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