小编典典

Bash:在多个内核上运行同一程序

linux

我可以使用一台可以访问10个内核的机器-我想实际使用它们。我习惯在自己的机器上做的事情是这样的:

for f in *.fa; do
  myProgram (options) "./$f" "./$f.tmp"
done

我要执行10个文件-我们将其称为blah00.fa,blah01.fa,… blah09.fa。

这种方法的问题在于,myProgram一次仅使用1个内核,并且在多核计算机上这样做,我将一次使用10个内核,因此我不会使用mahcine来其最大能力。

如何更改脚本,以使其同时运行所有10个.fa文件?我看过了在bash中跨多个内核运行循环进程,但是我无法从中获取命令来完成我想要的事情。


阅读 292

收藏
2020-06-07

共1个答案

小编典典

你可以用

for f in *.fa; do
    myProgram (options) "./$f" "./$f.tmp" &
done
wait

这将并行启动所有工作,然后等到 所有工作 完成后再继续。如果您的工作多于核心,那么您将启动所有这些工作,并让您的OS调度程序担心换出进程。

一种修改是一次启动10个作业

count=0
for f in *.fa; do
    myProgram (options) "./$f" "./$f.tmp" &
    (( count ++ ))        
    if (( count = 10 )); then
        wait
        count=0
    fi
done

但这不如使用,parallel因为您无法在旧工作完成时开始新工作,并且在设法启动10个工作之前也无法检测到旧工作是否完成。wait允许您等待单个特定进程或_所有_ 后台进程,但不会让您知道任意一组后台进程的完成时间。

2020-06-07