複数の反復でforループを並列化

複数の反復でforループを並列化

ループの繰り返し回数が10^6のように非常に大きくなるforループを並列化したいと思います。したがって、プロセスの代わりにスレッドを作成できる場合は、より良いようです。どうすればいいですか?コードは以下のように表示されます。

N=$1

for (( i=0; i < $N; i++ )); do

    ./random >> output /* in each iteration one random number is appended to
                          a file "output" */                                

done

ベストアンサー1

  1. シェルではスレッドを作成できません。
  2. 複数のプロセスで同じファイルに書きたくありません。
  3. randomプログラムが数字のみを生成する場合
    • ループがバインドされるのに十分速くなければなりません。
    • 可能であれば、引数を受け入れ、それだけの数字を印刷するように編集する必要があります。
    • 実際の実行によってボトルネックが発生した場合は、数値の生成方法を再検討する必要があります。コードを公開することもできます。コードレビュー

もしあなたが本当に本物それでもこれを行うには、チャンク単位で実行します。

for i in {0..9}; do
    for ((j = 1; j < $N/10; j++)); do
        ./random
    done > tmp$i &
    pid[$i]=$?
done
for i in {0..9}; do
    wait ${pid[$i]}
done
cat tmp{0..9} >> outfile

おすすめ記事