私のメインの FORTRAN MPI コードは、すべてのプロセスがスクリプトを呼び出すポイントに到達します。コードは次のようになります
write(syscommand,'(a131xi3)') './vscript.csh' my_mpi_proc_num
rc=system(syscommand)
これで、コードのこのセクションは 100 回以上ループし、スクリプトはすべてのプロセスで正常に実行されます。次に、私が知る限りランダムに、何らかのプロセスがシステムに入り、エラーコード 32512 を返します。その後、いくつかの他のことが起こります (申し訳ありませんが、これ以上コードを表示できません。私の雇用主はあまり満足しないでしょう. )、MPI_ABORT が呼び出され、すべてのプロセスが終了します。32512 は、コマンドが見つからない場合に返されるエラー コードであることが多いと言われています。前述したように、スクリプトはこのクラッシュの前に何百回も見つかっており、何も動かしていないため、これはありそうもありません。
私はストップギャップ測定を見つけたようです:
write(syscommand,'(a131xi3)') './vscript.csh' my_mpi_proc_num
rc=32512
num_attempts=0
do while (num_attempts<100 .and. rc==32512)
num_attempts=num_attempts+1
rc=system(syscommand)
enddo
つまり、各プロセスは 32512 を通過するために 100 回試行します。これは恐ろしいコードだと確信していますが、動作しています。
では、なぜこのエラーが発生するのか、誰にも手がかりがありますか? 考え: 2 つのプロセスがほぼ同時に同じスクリプトを実行しようとした場合、そのうちの 1 つが強制的に追い出され、その 32512 を返すことになりますか? ありがとう。