2

並列ノードを利用して数値シミュレーションを実行しようとしています。ノード #0 から 12 があり、それらを個別に利用して、シミュレーションの別の部分を実行したいと考えています。基本的に、1 つのノードで x=1 から 4 の f(x) を評価し、次のノードで x=5 から 9 の f(x) を評価し、次に x = 10 から 14 の f(x) を評価する必要があります。次のもの、そしてそこから続きます。最初に、次のようなループを使用してみました。

n=0
while [ $n -le 12 ]
do
   ssh compute-0-$n
   #evaluate the f(x) for the x values that I want
   exit
   n=$(($n+1))
done

しかし、これは機能しませんでした。なぜなら、ssh compute-0-$n コマンドを使用してノードにジャンプするたびに、元のシェル スクリプトへの接続が停止したように見え、ノードを終了すると、シェル スクリプトがその陽気さを続けているように見えたからです。方法...これを達成するためのより良い方法があると思いますが、私はこれに比較的慣れていません。誰か助けてもらえますか?

4

3 に答える 3

1

最初に理解しておくべきことは、(& なしで) ssh を実行すると、ssh 自体が完了するまで実行されるということです。リモートホストで新しいシェルを開き、コマンドを読み取りますが、それを起動したスクリプトからのコマンドは読み取りません。ssh セッションは、それを起動したスクリプトを認識しません。標準入力からのコマンドを待っています。

次の 3 つのことを行う必要があります。

  1. ssh 行の後のループ内からすべてのコードを取得し、それを独自のスクリプト (docompute.sh と呼びます) に入れます。
  2. そのスクリプトを各計算ノードの実行ユーザーの $PATH 変数内のディレクトリに置き、
  3. 親スクリプトで、ループ内のすべてを に置き換えますssh compute-0-$n docompute.sh &。バックグラウンドで ssh プロセスを実行することにより、&必要な並列処理が得られます。

非常によく似た議論については、多くのマシンで同じスクリプトを実行するを参照してください。& を使用してバックグラウンドでコマンドを実行することが重要です。

于 2012-12-19T04:17:43.797 に答える
0

ubuntu の場合は、odp プログラムを使用できます。

このプログラムは、並列 ssh を利用してコマンドを同時に実行します。ユーザーは、データセンターの構成とスクリプトを構成ファイルに書き込んで、このプログラムを使用して並列実行するだけで済みました。

ここに URL があります: http://sourceforge.net/projects/odp/

于 2012-12-19T04:23:32.707 に答える