0

我想在进程之间平衡一组矩阵块。矩阵块具有不同的大小,尽管通常一个单独的块占主导地位,具有相似的大小或什至大于所有其他块的组合。进程的数量可能比块的数量大得多和小得多。每个块可以存储在单个进程中,也可以作为 ScaLAPACK 阵列分布。平衡应在质量上满足以下条件:

  • 没有进程应该接收比 target_load = sum(size(blocks[:])) / n_procs 更多的矩阵元素
  • 任何块都不应分布在比 size(block) / target_load 更多的进程上。MPI 通信器可能从 mpi_comm_world 中分离出来
  • MPI 通信器不能重叠(块 1 和 2 都分布在进程 0:4 上很好,但块 1 分布在进程 0:3 上,块 2 分布在进程 2:5 上是不行的;未分布的块可以任意堆叠在分布式块之上)

我知道这种分布将取决于应用前两个条件的强度和优先级(第三个条件应该严格适用)。尽管如此,是否有任何算法有助于对这些条件进行一些解释?

4

1 回答 1

0

这是计算机科学中一个相当普遍的问题,因此现成的库应该能够帮助您。您应该查看metis和/或SCOTCH,看看其中任何一个是否适合您的需求。

您的第一个条件是“负载平衡”,您的第二个条件是“通信成本”(即 MPI 通信在分割块中的成本)。

这两个条件之间的适当平衡完全取决于问题的性质,但是使用 SCOTCH 或 metis,您应该能够调整这些参数,直到找到最佳组合。

于 2020-12-03T15:27:46.670 回答