使用 bash 在处理器的多个内核中运行相同的程序

使用 bash 在处理器的多个内核中运行相同的程序

我有一个 8 核处理器,我想在其中 3 个核心上运行一系列实验,其中我针对一个实例运行 C++ 二进制文件。我能够使用 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 Parallel:

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 个单独的任务,但它将等待所有三个任务完成,然后开始接下来的三个任务。我希望它在三个任务中的任何一个完成后启动下一个任务,以便在任何时间点(除了最后,总是有三个任务在运行)

经过进一步谷歌搜索,我找到了一个可行的解决方案。但如果有人能给出更优雅的解决方案,我会将其标记为正确的。

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

相关内容