MPI 库是否可以实现分层并行?

Is hierachical parallelism possible with MPI libraries?

我正在使用 MPI 编写计算代码。我有几个软件部分,每个部分计算问题的不同部分。每个部分都是用 MPI 编写的,因此可以 运行 作为一个独立的模块。现在我想将这些部分组合成一个程序 运行 ,并且代码的所有部分 运行 并行,而每个部分本身也是并行的 运行ning 。

例如节点总数 = 10,第 1 部分 运行 有 6 个节点,第 2 部分 运行 有 4 个节点,两者 运行 在一起。

有没有什么方法可以使 10 个节点的 mpi运行 和 mpi_init 每个部分具有所需数量的节点,而无需重写整个程序来为每个部分的代码分配进程?

这并不简单。

一种选择是使用外部程序,该程序与 MPI_Comm_spawn()(两次)您的子程序一起使用。缺点是需要一个插槽。

另一个选项需要重写,因为所有任务都将在同一个 MPI_COMM_WORLD 中结束,这取决于他们 MPI_Comm_split() 根据他们是谁,并使用生成的通信器而不是 MPI_COMM_WORLD.