私は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."