我有一个全局数组A,其元素最初在MPI程序中的多个进程上不均匀地分布。为了负载平衡,我想重新分配A的元素,以便每个进程拥有大致相同数量的元素。重新排列有很大的自由度,因为A元素的排序并不重要 - 我不关心A的哪个元素最终会在哪个过程中出现。当然,我希望尽快实现转移。
这个问题,标准解决方案或MPI功能是否有规范名称可以为我解决?
答案 0 :(得分:0)
通常这被称为“负载均衡”,如您所说。
没有直接的MPI功能,您需要自己进行一些算术计算和发送/接收。然而,那里有相当多的库,它们提供了很好的分区域等。 Metis非常适合网格或基于图形的分区。
在您的情况下,困难来自于这样一个事实,即所有级别可能需要将其部分数据发送(并接收)到(来自)不同数量的级别。如果您有可能首先在一个等级上获得完整的全局A,则可以使用MPI_Scatter
将其分散。否则你需要做一些计算: