MPI数据类型有什么好处?

use*_*452 6 types mpi

MPI基本数据类型对应于主机语言的数据类型,MPI_BYTE和MPI_PACKED除外.我的问题是使用这些MPI基本数据类型有什么好处?或者等效地,为什么仅使用主机语言数据类型是不好的?

我阅读了William Gropp等人的教程.在幻灯片31"为什么是数据类型"中,它说:

  • 由于所有数据都按类型标记,因此MPI实现可以支持具有非常不同的内存表示和基本数据类型长度(异构通信)的计算机上的进程之间的通信.
  • 在内存中指定面向应用程序的数据布局
    • 减少实现中的内存到内存副本
    • 允许在可用时使用特殊硬件(分散/聚集)

(http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiintro/ppframe.htm)

我没有理解这个解释.首先,如果基本数据类型不同,我不明白为什么使用MPI数据类型可以解决差异,因为基本MPI数据类型对应于主机语言的基本数据类型(基本数据类型).其次,为什么这种面向应用的内存数据布局有两个好处?

任何解答我原始问题的答案都将被接受.任何答案都可以解决我的问题,威廉格罗普的解释也将被接受.

Ada*_*dam 4

简而言之,该系统为 MPI 添加了一定程度的强类型。

长的答案是 MPI 数据类型的目的是告诉 MPI 函数它们正在使用什么。因此,例如,如果您将 int 从小端机器发送到大端机器,那么 MPI 可以为您进行字节顺序转换。另一个更常见的好处是 MPI 知道 MPI_DOUBLE 有多大,因此您不必到处sizeof都有一堆语句。

请注意,MPI 数据类型是标记,而不是实际数据类型。换句话说,你使用

double d;
Run Code Online (Sandbox Code Playgroud)

不是

MPI_DOUBLE d;
Run Code Online (Sandbox Code Playgroud)

  • 您不能使用“MPI_DOUBLE d;”。`MPI_DOUBLE` 不是 C 或 C++ 类型。它仅供内部 MPI 使用。在某些 MPI 实现中,数据类型是简单索引(数字),而在其他实现中,数据类型是结构。您不能像常规类型一样使用它们。这就像说“17 d;”,其中“17”是您的类型。这个不成立。 (2认同)