-1

Perceus (warewulf) ソフトウェアを備えたクラスターを使用して、コンピューティングを実行します。このソフトウェア パッケージにはwwmpirun、ホストファイルを準備して実行するためのプログラム (Perl スクリプト) が含まれていますmpirun

# ...
system("$mpirun -hostfile $tmp_hostfile -np $mpirun_np @ARGV");
# ...

このスクリプトを使用して、複数のノードで数学プログラム (CODE) を実行します。CODE は、通常、Ctrl+C でステータス、停止、停止のオプションを含む短いメニューを表示することで停止することになっています。ただし、MPI を使用して実行している場合、Ctrl+C を押すと、データが失われて CODE が強制終了されます。

CODE の開発者は回避策を提案しています - name のファイルを作成することでプログラムを停止できますstop%s。ここで、%sは CODE によって実行されるタスクファイルの名前です。これにより停止できますが、計算のステータスを取得できません。非常に長い時間がかかる場合があり、この機能を元に戻すことは非常にありがたいことです。

どう思いますか - 問題は CODE にありますかmpirun?

によって実行される CODE と通信する方法を見つけることができますmpirunか?

更新1

単一の実行では、Ctrl+C を押しstatusて、提供されたメニューで を入力してオプションを選択することにより、計算のステータスを取得しますs。CODE はステータス情報を STDOUT に出力し、計算を続行します。

4

1 に答える 1

1
  1. 「計算のステータスを取得できません」とはどういう意味ですか? どういうわけかステータスを取得することを期待していますが、そうではありませんか? または、ソフトウェアはあなたにステータスを与えるように設計されていませんか?

    あなたのsystem呼び出しは、標準エラー/アウトをどこにもリダイレクトしません。ステータスが想定されている場所です(この場合、パイプを開くか、ログにリダイレクトしてラッパーにログを読み取らせることでキャッチします)。

    また、 call の戻り値を評価して戻りコードを処理していません。これはsystem、プログラムが通信する別の方法である可能性があります。

  2. Ctrl+C の問題は、Ctrl+C が Perl ラッパーによってキャッチされ、素敵な Ctrl+C 割り込みハンドラーを持つ CODE ではなく、死んでしまうことが原因である可能性があります。解決策は、割り込みハンドラを追加することかもしれませんmpirun- Perl Cookbook Recipe 16.18 for$SIG{INT}またはhttp://www.wellho.net/resources/ex.php4?item=p216/sigintを参照してください。Ctrl+CPerl ラッパーにキャッチさせ、起動した CODE に INT シグナルを送信させたい場合があります。

于 2010-09-06T21:22:43.333 に答える