我正在编写一个程序,其中包含一些模拟NxN细胞世界中动物位置的群体配偶。我们已经将它作为一个串行程序完成,现在我正在使用OpenMPI将其更改为分布式。我们决定按流程均匀分配世界线。
示例:在8x8世界(N = 8)中,有3个进程(p = 3):
pid=0 handles lines 0, 1 and 2;
pid=1 handles lines 3, 4 and 5;
pid=2 handles lines 6 and 7.
我需要的是一个数学表达式(不是C函数!),它给出了pid作为N(世界上的行数),p(进程数)和i(行索引)的函数[pid = f(N,p,i)]
Using previous example:
f(8, 3, 0) = 0;
f(8, 3, 1) = 0;
f(8, 3, 2) = 0;
f(8, 3, 3) = 1;
f(8, 3, 4) = 1;
f(8, 3, 5) = 1;
f(8, 3, 6) = 2;
f(8, 3, 7) = 2;
我不想要一个函数,因为如果我有一个1000000x1000000的世界,大约1000000 ^ 2只动物,那么每个动物会调用一次这个函数。我认为“简单”的数学表达式更快,但我无法推断它。
提前致谢
答案 0 :(得分:0)
你的意思是如果p = 3,则s(大小)= N / p,对于N中的任何i:
pid = roundUp(i/N*s)
是吗?
答案 1 :(得分:0)
嗯,答案是在课程笔记上......
pid = max(楼层(i / ceiling(N / p)),楼层((i-(N%p))/楼层(N / p));
谢谢大家。