0

私は Mac OSX で作業しており、ターミナルで bash を使用しています。

C での OpenMP の使用に関する多くの文献を見つけることができましたが、シェル スクリプトを実行しているプログラムに出くわしました。スクリプトは、1000 個の異なるパラメーターを使用して実行可能ファイルを 1000 回呼び出します。どの呼び出しも相互に依存していないため、これがコードを並列化するのに適した場所であることがわかっています。

問題は、bash のシェル スクリプトで #pragma omp parallel for をどのように使用するかです。また、シェルが行うことを .c ファイルに記述することも考えましたが、.exe を呼び出してファイルの名前を変更し、c で移動する方法がわかりませんでした。

わかりやすい名前のシェル スクリプトを次に示します。

#!/bin/zsh
for ((x = 0, y = 4 ; x < 1000 ; x++, y *= 1.0162))
do
typeset -F 3 y
echo $y
./program arg1 $y /path0 arg2
mv file1.ppm file1.$(printf %04d $x).ppm
mv file1.$(printf %04d $x).ppm /path1
mv file2.ppm file2.$(printf %04d $x).ppm
mv file2.$(printf %04d $x).ppm /path2
done

paste a.txt b.txt > c.txt
mv c.txt /path3

変数の説明:

プログラムは 4 つのパラメーターを取り込んだ後に実行されます。このスクリプトでは、y のみが変化します。

arg1 と arg2 が与えられます。

すべての /path は、データを保存するさまざまな場所へのパスです。

file1.ppm と file2.ppm は、./program 呼び出しから計算されます。

a.txt と b.txt が与えられ、それぞれ for ループで計算されます。

4

3 に答える 3

1

以前は、並列ジョブを送信するために Portable Batch System (PBS) を使用していました。コンピューターのクラスターでもこれを設定し、ジョブを送信し、バックグラウンドで優先度を低くして実行し、ホストで出力を収集できます。

http://en.wikipedia.org/wiki/Portable_Batch_System

ただし、これの無料版はもうサポートされていないようなので、現在何が推奨されているのかわかりません。

于 2013-05-29T08:43:03.137 に答える