计算中的鬼行或列是什么?

时间:2014-02-26 06:10:46

标签: mpi message-passing

我是MPI编程的新手。在线阅读一些信息时,我无法理解鬼行/列。有人可以向我解释它是什么,它是如何实现的以及我们为什么要使用它?

1 个答案:

答案 0 :(得分:1)

鬼区通常与模板应用程序一起使用。这意味着流程可能会像这样布局(我将在2D中回答这个问题,但是你可以推断出很多维度对你有帮助):

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数据类型。

这是我通过快速Google搜索找到的教程。它不是专门针对MPI,而是解释了基本概念:http://www.hpjava.org/papers/HPJava/HPJava/node28.html