(GNU Parallel新手指南)
我的目标是在多个核心上运行相同的R脚本,但参数不同。我的第一个问题是如何在我的笔记本电脑上(2个实际核心,4个虚拟核心)使其工作,然后将其移植到有64个核心的计算机上。
当前:
我有一个名为"Test.R"的R脚本,它接受参数,执行某些操作(例如将一些数字相加,然后将结果写入文件),然后停止。
我有一个包含以下内容的"commands.txt"文件:
/Users/name/anaconda3/lib/R/bin/Rscript Test.R 5 100 100
/Users/name/anaconda3/lib/R/bin/Rscript Test.R 5 100 1000
/Users/name/anaconda3/lib/R/bin/Rscript Test.R 5 100 1000
/Users/name/anaconda3/lib/R/bin/Rscript Test.R 5 100 1000
/Users/name/anaconda3/lib/R/bin/Rscript Test.R 50 100 1000
/Users/name/anaconda3/lib/R/bin/Rscript Test.R 50 200 1000
这条命令告诉GNU parallel使用R来运行Test.R(我已经通过anaconda安装了R)。
在终端中(在导航到桌面,即Test.R和commands.txt所在的位置后),我使用以下命令:
parallel --jobs 2 < commands.txt
我希望这个命令能够使用2个核心,并从commands.txt中运行所有任务,直到所有任务完成。(我尝试过对此命令进行变化,例如将2改为1,在这种情况下,2个核心的利用率达到100%,而其他两个核心的利用率在20-30%左右)。
当我运行此命令时,所有4个核心的利用率都达到了100% (如htop所示),前两个任务完成了,但没有更多的任务完成,尽管所有4个核心仍然保持在100%。
当我在64核计算机上运行相同的命令时,所有64个核心都达到了100%,我不得不取消任务。
非常感谢任何关于要查看的资源或我做错的地方的建议。
以下是运行上述命令时请求的htop输出(按CPU%排序):
1 [||||||||||||||||||||||||100.0%] Tasks: 490, 490 thr; 4 running
2 [|||||||||||||||||||||||||99.3%] Load average: 4.24 3.46 4.12
3 [||||||||||||||||||||||||100.0%] Uptime: 1 day, 18:56:02
4 [||||||||||||||||||||||||100.0%]
Mem[|||||||||||||||||||5.83G/8.00G]
Swp[|||||||||| 678M/2.00G]
PID USER PRI NI VIRT RES S CPU% MEM% TIME+ Command
9719 user 16 0 4763M 291M ? 182. 3.6 0:19.74 /Users/user/anaconda3
9711 user 16 0 4763M 294M ? 182. 3.6 0:20.69 /Users/user/anaconda3
7575 user 24 0 4446M 94240 ? 11.7 1.1 1:52.76 /Applications/Utilities
8833 user 17 0 86.0G 259M ? 0.8 3.2 1:33.25 /System/Library/StagedF
9709 user 24 0 4195M 2664 R 0.2 0.0 0:00.12 htop
9676 user 24 0 4197M 14496 ? 0.0 0.2 0:00.13 perl /usr/local/bin/par
htop
的输出吗? - Ole Tange