如何在p个处理器上分配n个元素的向量

时间:2011-04-14 00:11:34

标签: algorithm parallel-processing mpi

假设我有一个n个元素的向量,我想在p进程上分发它,其中n不是p的倍数。每个进程的等级从0到p-1。如何确定每个流程中有多少元素,以便更均匀地分配数据?

例如,如果n = 14且p = 4,我想要像[3,3,4,4]或[3,4,3,4]这样的分布,但不是[3,3,3,5] ] [4,4,4,2]。

我想要一个函数f(n,p,r),它返回具有等级r的进程元素的数量。

2 个答案:

答案 0 :(得分:8)

确实

(n + r) / p

为你工作?

答案 1 :(得分:1)

这似乎是Bin Packing问题的一个特例。有一些非常好的近似算法,但理论上它是NP难的。

如果您无法阅读维基页面,我会将其缩减为几行。如果您希望更深入地寻找可能更好的解决方案,或者想要通过各种方法分析近似方案的工作情况。

步骤1:按优先级排序元素 第2步:抓住具有最高优先级的元素,并将其推到负担最小的过程中 第3步:如果您有更多元素,请转到步骤1.返回。