2014-02-26 25 views

回答

1

鬼区域通常与模板应用程序一起使用。这也就意味着,该过程可能是这样的(我要回答二维这个问题,但可以推断但许多方面是有帮助的你)进行布局:

0 | 1 | 2 
--------- 
3 | 4 | 5 
--------- 
6 | 7 | 8 

每个进程直接通信与其邻居(北部,南部,东部和西部)每次迭代交换数据。每个进程具有2D数据的一些块被布置是这样的:

1 5 9 3 7 
2 3 4 8 0 
2 5 7 3 9 
9 3 8 1 4 
8 3 7 3 2 

数据的边缘通常被用作“鬼区”:

1 5 9 3 7 
    --------- 
2 | 3 4 8 | 0 
2 | 5 7 3 | 9 
9 | 3 8 1 | 4 
    --------- 
8 3 7 3 2 

这意味着该数据是由可用于邻近的进程,以便他们可以在自己的计算中使用它,通常用于计算域分解问题边界处物理对象之间的某种交互。

至于实现,这将取决于数据,但通常可以使用自定义MPI数据类型完成。我不会在这里提供代码,因为它对于你的应用程序是非常特殊的,但是网上有很多教程可以学习如何使用MPI数据类型。

这里是一个教程,我用一个快速的谷歌搜索出现。这不是专门针对MPI的,但它解释了基本概念:http://www.hpjava.org/papers/HPJava/HPJava/node28.html