2

Windows に mpi をインストールしたので、そのライブラリを使用できます。問題は、私が書くときのWindowsで

mpiexec -n 4 proj.exe 

コマンドプロンプトに入ると、適切な操作が行われません。4 つの異なるプロセスがコード ファイル全体を個別に使用します。MPI_Init および MPI_Finalize 行でのみ動作する並列プロセスのようには動作しません。この問題を解決するにはどうすればよいですか? Windows で MPI を動作させることは不可能ですか。

Ps: 私は Dev c++ を使用しています

4

1 に答える 1

17

MPI はあなたが言ったことによって正しく実行されています。代わりに、あなたの仮定は正しくありません。すべての MPI 実装 (私がとにかく使用したもの) では、プログラム全体がすべてのプロセスで最初から最後まで実行されます。MPI_Init 関数と MPI_Finalize 関数は、各プロセスの MPI 構造をセットアップおよび破棄するために必要ですが、並列実行の開始と終了を指定しません。並列セクションの先頭はメインの最初の命令であり、最後は最後のリターンです。

あなたが望むように見えるもののための良い「テンプレート」プログラムは次のようになります( MPIでこの問題を高速化する方法でも回答されています):

int main(int argc, char *argv[]) {
    MPI_Init(&argc, &argv);  
    MPI_Comm_size(MPI_COMM_WORLD,&numprocs);  
    MPI_Comm_rank(MPI_COMM_WORLD,&myid);

    if (myid == 0) { // Do the serial part on a single MPI thread
        printf("Performing serial computation on cpu %d\n", myid);
        PreParallelWork();
    }

    ParallelWork();  // Every MPI thread will run the parallel work

    if (myid == 0) { // Do the final serial part on a single MPI thread
        printf("Performing the final serial computation on cpu %d\n", myid);
        PostParallelWork();
    }

    MPI_Finalize();  
    return 0;  
}  
于 2010-02-18T18:25:18.730 に答える