MPI基本数据类型与主机语言的数据类型相对应,但MPI_BYTE和MPI_PACKED除外。我的问题是,使用那些MPI基本数据类型有什么好处?或者等效地说,为什么仅仅使用宿主语言数据类型是不好的?
在幻灯片31“为什么数据类型”中,我阅读了William等人的一篇教程,其中写道:
(http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiintro/ppframe.htm)
我不明白这个解释。首先,如果基本数据类型不同,我不明白为什么使用MPI数据类型可以解决这种差异,因为基本MPI数据类型对应于主机语言的基本数据类型(基本数据类型)。第二,为什么这种面向应用程序的内存数据布局有两个好处?
任何回答我最初问题的答案都将被接受。我对威廉·格洛普的解释的任何回答都将被接受。
发布于 2013-09-27 21:01:00
简单地说,这个系统为MPI增加了一个强类型的级别。
很长的答案是,MPI数据类型的目的是告诉MPI函数他们正在使用什么。因此,例如,如果您将一个int从一个小终端机器发送到一个大端机器,那么MPI可以为您完成字节顺序转换。另一个更常见的好处是,MPI知道MPI_DOUBLE有多大,所以不必到处都有一堆sizeof语句。
注意,MPI数据类型是标记,而不是实际的数据类型。换句话说,您可以使用
double d;不
MPI_DOUBLE d;发布于 2013-09-27 23:31:30
首先,如果基本数据类型不同,我不明白为什么使用MPI数据类型可以解决这种差异,因为基本MPI数据类型对应于主机语言的基本数据类型(基本数据类型)。
因为给定的MPI数据类型不需要引用两个不同机器上相同的基本类型。MPI_INT可以是一台机器上的int,另一台可以是long。这在C++中尤其有用,因为the C++ standard doesn't specify byte size for the various integral types,所以int在一台机器上的位数实际上可能比另一台机器多。
第二,为什么这种面向应用程序的内存数据布局有两个好处?
请看MPI_Send()的参数。它接收到数据开始时的void*,以及要发送的元素的数量。它假设元素在内存中连续排列,一个接一个,并且都是相同的类型。除了最幸运的情况之外,在您的应用程序中,这一切都是不正确的。即使您只有一个简单的结构数组(其中结构的元素不是完全相同的类型),如果没有用户定义的MPI数据类型,发送这些结构的唯一方法就是将第一个元素从每个结构复制到一个单独的数组,发送它,然后将第二个元素从每个结构复制到不同的数组,然后发送,等等。派生MPI数据类型允许您直接从它所在的位置提取数据,而无需重新安排或复制它。
不过,我不知道第二点应该指什么。
https://stackoverflow.com/questions/19058839
复制相似问题