2017-02-16 54 views
3

我有一个全球性的阵列,A,其元素最初不均匀分布在多个过程中MPI程序。为了负载平衡,我想重新分配A的元素,以便每个进程拥有大约相同数量的元素。重排中有很大的自由度,因为A的元素排序并不重要 - 我不关心A的哪些元素在哪个过程中结束。当然,我会尽可能快地完成转移。功能/算法以均匀地重新分配数据处理介乎

是否有这个问题,标准溶液,或能解决这个问题对我来说是MPI函数名称不规范?

回答

0

通常这被称为“负载均衡”,因为你已经说。

没有直接的MPI函数,你需要做一些算术计算和发送/接收自己。然而,在那里有相当多的图书馆,它们提供了很好的分区域等。 Metis是非常流行的网格或基于图分区。

在你的情况下,困难来自于事实,所有的队伍可能需要发送(和接收)他们的数据(从)不同的列数只是部分。如果您有可能首先在一个等级上获得完整的全球A,则可以用MPI_Scatter分散它。否则,你需要做一些计算:

  • 先发(MPI_ALLGATHER)各级的元素计数的每一个等级
  • 指望有多少元素每个等级应该发送(接收)和(从)人。
  • 执行发送/接收或使用单向通讯。