【发布时间】:2011-08-05 03:45:14
【问题描述】:
假设我有一个包含 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 的进程的元素数。
【问题讨论】:
-
经典的农民/工人方法怎么样? MPI 示例:inf.ed.ac.uk/teaching/courses/ppls/farm.c
-
不适用于我的情况。我需要从图像中分配行进行处理,因此农民/工人方法不是解决方案。
-
从上面的问题陈述中,您无法提前知道执行时间,因为这取决于数据,所以一个农民,许多工人(又名“任务袋”)的方法似乎是一种理想的解决方案,是的,您可以从矩阵中取出每一行并在单独的处理器上运行。您的代码示例可以更清楚地说明问题。
标签: algorithm parallel-processing mpi