このpostで提起された問題を再現しようとしました。以下は私のコードです。答えによると、すべてのプロセスが独立して実行されるので、プロセス1ではglobal_variable
が0になるはずです。しかし、プロセス1も1000を出力します。したがって、プロセスはMPI_Initで生成されるため、MPI_Init、作成されたプロセスは同じ値を取得します。私はその投稿を誤解していますか?MPIとそのグローバル変数
#include <stdio.h>
#include <mpi.h>
static int global_variable;
main(int argc, char **argv)
{
int ierr, num_procs, my_id;
global_variable = 1000;
ierr = MPI_Init(&argc, &argv);
/* find out MY process ID, and how many processes were started. */
ierr = MPI_Comm_rank(MPI_COMM_WORLD, &my_id);
ierr = MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
if(my_id == 0) {
printf("%d\n", global_variable);
}
else if(my_id == 1) {
printf("%d\n", global_variable);
}
ierr = MPI_Finalize();
}
あなたがそれらを使用していない場合、なぜそれらのすべての 'ierr'戻り値を格納しているのでしょうか? – Kusalananda
コメントに@Kusalanandaの点があります。さらに、ファイルI/Oに関連しないMPI呼び出しのデフォルトエラーハンドラはジョブ全体を終了させるので、 'MPI _... 'ルーチンは' MPI_SUCCESS'を返すか、まったく返しません。 'MPI_ERRORS_RETURN'エラーハンドラが**明示的に**設定されていない限り、それはです。 –