MPI-2.2 では、データ長パラメーターを として定義していますint
。int
これは、まだ 32ビットであるため、ほとんどの 64 ビット Unix システムで問題になる可能性があり、通常は問題です。このようなシステムは LP64 と呼ばれます。これはlong
、ポインターの長さが 64 ビットであるのに対しint
、長さが 32 ビットであることを意味します。対照的に、Windows x64 は LLP64 システムです。つまり、int
とlong
は 32 ビット長ですが、long long
と ポインターは 64 ビット長です。64 ビット x86 CPU 用の Linux は、LP64 であるそのような Unix ライクなシステムの例です。
MPI_Send
MPI-2.2実装で上記のすべてを考えると、2^31-1
要素のメッセージサイズ制限があります。ユーザー定義型 (連続型など) を構築することで、この制限を克服できます。これにより、データ要素の量が削減されます。たとえば、2^10
いくつかの基本的な MPI タイプの要素の連続したタイプを登録してから、この新しいタイプの要素MPI_Send
を送信するために使用すると、基本的なタイプの要素のメッセージが生成されます。一部の MPI 実装は、要素数を内部で処理するために使用する場合、このような場合でも失敗する可能性があります。また、それは壊れており、出力引数がタイプであるためです。2^30
2^40
int
MPI_Get_elements
MPI_Get_count
count
int
MPI-3.0 は、これらの問題のいくつかに対処します。たとえば、引数にtypedefを使用するMPI_Get_elements_x
andMPI_Get_count_x
操作を提供します。ポインター値を保持できるように定義されているため、ほとんどの 64 ビット システムでは 64 ビット長になります。の代わりに取る他の拡張呼び出し (すべて で終わる) があります。以前の/操作は保持されますが、出力引数が保持できる数よりもカウントが大きい場合に返されるようになりました(この明確化は MPI-2.2 標準には存在せず、未定義の動作で非常に大きなカウントを使用しています)。MPI_Count
count
MPI_Count
_x
MPI_Count
int
MPI_Get_elements
MPI_Get_count
MPI_UNDEFINED
int
pyCthon が既に述べたように、C++ バインディングは MPI-2.2 で廃止され、MPI フォーラムでサポートされなくなったため、MPI-3.0 から削除されました。C バインディングを使用するか、サードパーティの C++ バインディングを使用する必要がありますBoost.MPI
。