3

次のようなコードがあるとします。

#include "mpi.h"

int main( int argc, char** argv )
{
    int my_array[10];
    //fill the array with some data

    MPI_Init(&argc, &argv);

    // Some code here

    MPI_Finalize();
    return 0;
}

各 MPI インスタンスは、my_array の独自のコピーを取得しますか? ランク0だけ?そのなかで何も?まったく前にコードを持っているのは悪い習慣MPI_Initですか?

4

2 に答える 2

8

「私が電話したときに記憶に何が起こるか」に対する簡単な答えMPI_Initは、何もないということです。

MPI_Init呼び出しプロセスでMPIライブラリを初期化します。それ以上でもそれ以下でもありません。呼び出しの時点でMPI_Init、すべてのMPIプロセスはすでに存在しており、それらはまだお互いを知らず、通信できません。

各MPIプロセスは、個別に実行されるプログラムです。プロセスはメモリを共有せず、メッセージを渡すことによって通信します。

実際、呼び出すプロセスはMPI_Init、それらが渡すメッセージが一致する限り、完全に異なるプログラムである可能性もあります。これはMPMDモデルです。

于 2012-07-28T02:12:58.523 に答える
2

mpi コードを実行すると、同じコードが別のプロセスで実行されます (メモリを共有できません)。したがって、各プロセスには独自の配列があります。

データが時間に依存しない限り(プロセスは必ずしも同期されているとは限りません)、プロセスランク(ランクは init 呼び出し後にのみ使用できると思います)または乱数ジェネレーター(ランダムシードを生成するものもあります)を除き、配列は等しい必要があります。 .

于 2012-07-27T22:06:56.287 に答える