- 此问题在此处已有答案**:
Parallelize Bash script with maximum number of processes(16个答案)
昨天关门了。
我正在并行运行一个shell脚本script.sh
,它的每一行都指向一个文件夹并运行一段Fortran代码:
cd folder1 && ./code &
cd folder2 && ./code &
cd folder3 && ./code &
cd folder4 && ./code &
..
cd folder 96 && ./code
wait
cd folder 97 && ./code
..
..
..
cd folder2500 && ./code.sh
大约有2500个文件夹,代码输出彼此独立。我可以访问96个CPU,每个作业使用大约1%的CPU,所以我使用&
键和wait
命令并行运行96个作业。由于不同的原因,96个作业不是同时完成的。有些作业需要40分钟,有些需要90分钟。一个重要的区别。所以我想知道是否有可能较早完成的作业使用可用的CPU来优化执行时间。
我也尝试了GNU Parallel:parallel -a script.sh
,但它也有同样的问题,我在互联网上找不到有类似问题的人。
2条答案
按热度按时间cs7cruho1#
一种
bash/wait -n
方法:注:
wait -n; start new job; wait -n
周期内可能会完成多个作业,在这种情况下,您一次运行的作业可能少于jobmax
(即,jobcnt
高于运行作业的实际数量)wait -n; start new job; wait -n
周期内完成多个作业的可能性应该大大降低(如果不能消除的话)tjrkku2a2#
您可以使用GNU并行:
这将使您的所有核心保持忙碌,在每个作业完成时立即启动一个新作业。
如果只想并行运行48个作业,请用途:
如果要进行预演并查看将运行的内容,但实际上不运行任何内容,请用途:
如果要查看进度报告,请用途: