Bashを使用して、プロセッサの複数のコアで同じプログラムを実行します。

Bashを使用して、プロセッサの複数のコアで同じプログラムを実行します。

私は8つのコアプロセッサを持ち、1つのインスタンスに対してC ++バイナリを実行する3つのコアに対して一連の実験を実行したいと思います。 Bashを使用して並列化できますが、コア数を3に制限することはできません。

これは私のbashスクリプトです。


run_graph_algo1(){
  ./../bin/graph_algo1_cpp "$1" > "${1}.algo1.log"
}
 

for file in *.txt
do
     run_graph_algo1 "$file" &
done

wait
echo "All Instances have finsihed running."

重要な場合はMacOSを使用し、追加のライブラリは使用しません。ありがとうございます!

答え1

GNUパラレルがある場合:

run_graph_algo1(){
  ./../bin/graph_algo1_cpp "$1" > "${1}.algo1.log"
}
export -f  run_graph_algo1

parallel -j3 run_graph_algo1 ::: *.txt

echo "All Instances have finsihed running."

GNU Parallelはこのような作業のために作られています。

答え2

編集:これは間違った解決策です。以下のプログラムは3つの個別のタスクを開始しますが、次の3つのタスクを開始する前に、3つのタスクがすべて完了するのを待ちます。 3つのタスクのうちの1つが完了したら、次のタスクを開始していつでも(最後を除いて常に3つのタスクを実行するようにしたい)。

追加のインターネット検索後に動作するソリューションを見つけました。しかし、誰かがよりエレガントな解決策を提示することができれば、私はそれが正しいとマークします。

run_graph_algo1(){
  ./../bin/graph_algo1_cpp "$1" > "${1}.algo1.log"
}
 
N=3
#N = 4 just preserving this mistake 

for file in *.txt
do
     ((i=i%N)); ((i++==0)) && wait
     run_graph_algo1 "$file" &
done

wait
echo "All Instances have finsihed running."

関連情報