저는 8개의 코어 프로세서를 가지고 있으며 하나의 인스턴스에 대해 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개의 작업이 모두 완료될 때까지 기다립니다. 세 가지 작업 중 하나가 완료된 후 다음 작업을 시작하여 언제든지(마지막을 제외하고 항상 세 가지 작업이 실행되도록) 원합니다.
추가 인터넷 검색 후 작동하는 솔루션을 찾았습니다. 그러나 누군가가 더 우아한 해결책을 제시할 수 있다면 나는 그것이 올바른 것으로 표시하겠습니다.
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."