Intel MPI のバージョンは、RHEL マシンにインストールされている impi/5.0.2.044/intel64 です。
次のコードを使用して、Java を使用して MPI プログラムを呼び出しています。
ProcessBuilder builder = new ProcessBuilder();
builder.command("mpirun ./myProgram");
builder.redirectError(Redirect.to(new File("stderr")));
builder.redirectOutput(Redirect.to(new File("stdout")));
Process p = null;
try {
p = builder.start();
} catch (IOException e) {
e.printStackTrace();
}
// Process has started here
p.destroy();
try {
// i = 143
int i = p.exitValue();
} catch( IllegalThreadStateException e){
}
しかし、exitValue()
が例外をスローせずに認識された後でも、ps aux
まだ大量の が表示./myProgram
され、プログラムはまだ強制終了されていないかのように結果ファイルを書き込んでおり、すべての計算が終了した後にのみ終了します。
現在、終了に成功した唯一の方法は、コンソールで Java プログラムを./myProgram
使用して Java を終了することです。Ctrl+C
私の意図は、計算をすぐに停止し、Java プログラムに他の計算をスケジュールさせることです。すべての mpi インスタンスを強制的に終了させる、または少なくとも一定時間 (30 秒または 1 分間のポーリングなど) で終了することを保証する回避策はありますか?