【问题标题】:How to distribute a vector of n elements across p processors如何在 p 个处理器之间分配 n 个元素的向量
【发布时间】: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


【解决方案1】:

(n + r) / p

为你工作?

【讨论】:

  • 哇!比我预期的还要简单。
  • 这是我从阅读 Stack Overflow 中学到的最好的东西。我很惊讶我以前从未见过这个。
【解决方案2】:

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

如果您懒得阅读 wiki 页面,我会将其缩减为几行。如果您想更深入地寻找可能更好的解决方案,或者想分析近似方案的工作情况,无论如何。

第 1 步:按优先级对元素进行排序。
第 2 步:获取具有最高优先级的元素,并将其推送到负担最小的进程。
第 3 步:如果您有更多元素,请转到第 1 步。否则返回。

【讨论】:

  • 不,我知道我的问题有解决方案。我只是不记得它是什么。
猜你喜欢
  • 2015-04-09
  • 2021-11-29
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多