动态更改MPI拓扑

时间:2013-04-11 01:53:55

标签: c parallel-processing mpi topology decomposition

我目前正在使用一个用C语言编写并使用MPI并行化的程序。使用公共域分解技术划分计算网格。关于2D分解(简化)的过程布局如下:

/////////////////////////////
/       /         /         /
/   1   /    2    /    3    /
/       /         /         /
/////////////////////////////
/       /         /         /
/   4   /    5    /    6    /
/       /         /         /
/////////////////////////////
/       /         /         /
/   7   /    8    /    9    /
/       /         /         /
/////////////////////////////

在代码中的某一点,我必须解决一系列仅具有X依赖性的方程式。由于x的依赖性,它的当前形式是拓扑结构,它一次只能与3个进程并行化,这导致了我的问题......是否有一种方便/有效的方法将当前拓扑映射到另一个拓扑在代码中,有利于完全并行化,即使用所有9个进程?例如,像这样:

/////////////////////////////
/            1              /
/////////////////////////////
/            2              /
/////////////////////////////
/            3              /
/////////////////////////////
/            4              /
/////////////////////////////
/            5              /
/////////////////////////////
/            6              /
/////////////////////////////
/            7              /
/////////////////////////////
/            8              /
/////////////////////////////
/            9              /
/////////////////////////////

有人可能会问,为什么不从这开始......对于整体问题,2D域分解效率要高得多,之后我还需要y-dependencies,我需要做一些类似拓扑的事情,因此图像以上将被转置。

因此,我需要使用一些通信例程将2D拓扑映射到代码中的1D拓扑(动态),以实现9个进程的完全并行化,但我不确定是否有一种高效且有效的方法做这个VS并行运行3个进程的原始问题。任何的意见都将会有帮助。谢谢!

0 个答案:

没有答案