函数/算法在进程

时间:2017-02-16 23:01:08

标签: parallel-processing mpi load-balancing

我有一个全局数组A,其元素最初在MPI程序中的多个进程上不均匀地分布。为了负载平衡,我想重新分配A的元素,以便每个进程拥有大致相同数量的元素。重新排列有很大的自由度,因为A元素的排序并不重要 - 我不关心A的哪个元素最终会在哪个过程中出现。当然,我希望尽快实现转移。

这个问题,标准解决方案或MPI功能是否有规范名称可以为我解决?

1 个答案:

答案 0 :(得分:0)

通常这被称为“负载均衡”,如您所说。

没有直接的MPI功能,您需要自己进行一些算术计算和发送/接收。然而,那里有相当多的库,它们提供了很好的分区域等。 Metis非常适合网格或基于图形的分区。

在您的情况下,困难来自于这样一个事实,即所有级别可能需要将其部分数据发送(并接收)到(来自)不同数量的级别。如果您有可能首先在一个等级上获得完整的全局A,则可以使用MPI_Scatter将其分散。否则你需要做一些计算:

  • 首先发送(MPI_Allgather)所有等级的元素数到每个等级
  • 计算每个等级应发送(接收)和(来自)谁的元素数量。
  • 进行发送/接收或使用片面通信。