我目前正在使用一个用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个进程的原始问题。任何的意见都将会有帮助。谢谢!