用完MPI群组传播者

时间:2015-12-19 15:43:43

标签: c++ mpi mpich

我试图在非结构化网格上并行化以顶点为中心的有限体积代码。我首先分区我的网格,然后分配一个处理器来解决每个分区。每个处理器/分区具有与一个或多个相邻分区共享的顶点。作为示例,请考虑以下内容,其中网格被分区并分布在6个处理器中:

enter image description here

在每个共享顶点处,需要将来自相应相邻处理器的数据加在一起并发回。例如,考虑Proc 1的分区句柄。它与Proc 2共享顶点'a'和'b',与Proc 4共享'd''e',与Proc 2,4,5共享'c'。因此,在MPI术语中,Proc 1将涉及3个单独的AllReduce调用。

目前,我的代码基于共享顶点创建了不同的MPI组。在上面的例子中,Proc 1将成为3个这样的组的成员。对于每个组,我创建一个MPI组通信器,并使用MPI_IAllreduce执行非阻塞全减少。该算法适用于具有100个分区的网格。但是如果我处理大量分区,代码会崩溃。似乎MPI耗尽了传播者来分配。

任何人都可以建议可能的解决方法或问题的替代方法。虽然我总是可以使用较少数量的网格分区,但是能够允许代码尽可能多地使用分区(给定可用资源)会很好。

0 个答案:

没有答案