我可以使用一台可以访问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中跨多个内核运行循环进程,但是我无法从中获取命令来完成我想要的事情。
你可以用
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允许您等待单个特定进程或_所有_ 后台进程,但不会让您知道任意一组后台进程的完成时间。
parallel
wait