MPI基本數據類型對應於主機語言的數據類型,MPI_BYTE和MPI_PACKED除外。我的問題是使用這些MPI基本數據類型的好處是什麼?或者等價地說,爲什麼只使用宿主語言數據類型就不好?MPI數據類型的好處是什麼?
我讀威廉Gropp等一個教程在滑塊31「爲什麼數據類型」,它說:
- 由於所有數據都通過類型標記時,MPI實現可以支持進程之間的通信的機器上非常不同的存儲器表示和基本數據類型的長度(異構通信)。在存儲器中的數據的
- 指定面向應用的佈局
- 減少在執行
- 允許使用特殊的硬件的存儲器到存儲器的副本(分散/聚集)可用
(http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiintro/ppframe.htm)
我不明白這個解釋。首先,如果基本數據類型不同,我不明白爲什麼使用MPI數據類型可以解決差異,因爲基本MPI數據類型對應於主機語言(基本數據類型)的基本數據類型。其次,爲什麼這種面向應用的內存數據佈局具有上述兩個好處?
任何解決我原來問題的答案都將被接受。任何答案都可以解決我的問題,William Gropp的解釋也將被接受。
我不明白最後一個例子。假設'd'是可變的,將從一個進程發送到另一個進程。當我們定義'd'時,我們當然使用'MPI_DOUBLE d',而不是'double d',對吧? – user2196452
在程序中使用'double d'。看看MPI_Send的原型。注意它需要一個'void *'作爲緩衝區來發送。它還要求MPI_Datatype告訴它緩衝區中的內容。這就是你放MPI_DOUBLE的地方。 – Adam
我明白你的意思了。換句話說,我們可以在程序中使用'double d;'或'MPI_DOUBLE d;'(如果編譯器不抱怨)。你對這兩個好處有什麼看法,即減少mem-to-mem副本並允許使用特殊硬件? – user2196452