6

MPI 基本データ型は、MPI_BYTE と MPI_PACKED を除いて、ホスト言語のデータ型に対応しています。私の質問は、これらの MPI 基本データ型を使用する利点は何ですか? または同様に、ホスト言語のデータ型をそのまま使用するのがなぜ悪いのでしょうか?

William Gropp などによるチュートリアルを読みました。スライド 31 の「Why Datatypes」には、次のように書かれています。

  • すべてのデータは型によってラベル付けされるため、MPI 実装は、メモリ表現と基本データ型の長さが非常に異なるマシン上のプロセス間の通信 (異種通信) をサポートできます。
  • メモリ内のデータのアプリケーション指向レイアウトの指定
    • 実装でメモリ間のコピーを減らす
    • 利用可能な場合、特別なハードウェア (スキャッター/ギャザー) を使用できます

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

説明がわかりません。まず、基本的な MPI データ型がホスト言語の基本的なデータ型 (基本的なデータ型) に対応するため、基本的なデータ型が異なる場合、MPI データ型を使用して違いを解決できる理由がわかりません。第 2 に、メモリ内のこのアプリケーション指向のデータ レイアウトには、前述の 2 つの利点があるのはなぜですか?

私の元の質問に対処する回答はすべて受け入れられます。William Gropp の説明に対する私の質問を解決する回答も受け入れられます。

4

2 に答える 2

3

簡単に言えば、このシステムは MPI に一定レベルの強力な型付けを追加するというものです。

長い答えは、MPI データ型の目的は、MPI 関数に何を処理しているかを伝えることです。たとえば、リトルエンディアンのマシンからビッグエンディアンのマシンに int を送信すると、MPI がバイト順の変換を行うことができます。もう 1 つの一般的な利点は、MPI が MPI_DOUBLE の大きさを認識しているため、sizeofどこにでも大量のステートメントを配置する必要がないことです。

MPI データ型はタグであり、実際のデータ型ではないことに注意してください。つまり、使用します

double d;

いいえ

MPI_DOUBLE d;
于 2013-09-27T21:01:00.940 に答える
2

まず、基本的なデータ型が異なる場合、基本的な MPI データ型はホスト言語の基本的なデータ型 (基本的なデータ型) に対応するため、MPI データ型を使用して違いを解決できる理由がわかりません。

特定の MPI データ型は、2 つの異なるマシンで同じ基本型を参照する必要がないためです。あるマシンでは であり、他のマシンでは でMPI_INTある可能性があります。C++ 標準ではさまざまな整数型のバイト サイズが指定されていないため、これは C++ で特に役立ちます。intlongint

第 2 に、メモリ内のこのアプリケーション指向のデータ レイアウトには、前述の 2 つの利点があるのはなぜですか?

の引数を見てくださいMPI_Send()void*データの先頭に a と、送信する要素の数を受け取ります。要素がメモリ内で連続して並んでいて、すべて同じ型であると想定しています。幸運な場合を除いて、これはアプリケーションには当てはまりません。構造体の単純な配列 (構造体の要素がすべて同じ型ではない) がある場合でも、ユーザー定義の MPI データ型なしでこれらの構造体を送信する唯一の方法は、各構造体の最初の要素を配列を分離して送信し、次に各構造体の 2 番目の要素を別の配列にコピーして送信します。派生 MPI データ型を使用すると、データを並べ替えたりコピーしたりせずに、その場所から直接データを取得できます。

ただし、2番目のポイントが何を指しているのかわかりません。

于 2013-09-27T23:31:30.860 に答える