我正在尝试运行10个不同的代码,每个代码都保存在其各自的目录中,命名为1,2,3,。。,10.
#PBS -l nodes=10:cores=1
这意味着我在10个不同的CPU上各有1个线程。现在我必须提交一个作业,以便每个目录只获得1个CPU的线程,类似地,其他目录2,3..,10
代码用于分子动力学,运行数小时,而且它们也是独立的。我尝试了Gnu Parallel,但我没能使用每10个CPU。可能是Gnu并行是为了在1个CPU内核之间分配作业。我知道MPI可以,但我不知道具体怎么做。请任何人提出建议。
我没有访问PBS集群的权限,但来自https://www.nas.nasa.gov/hecc/support/kb/using-gnu-parallel-to-package-multiple-jobs-in-a-single-pbs-job_303.html可能就是你想要的:
#PBS -lselect=6:ncpus=4:model=san
#PBS -lwalltime=4:00:00
cd $PBS_O_WORKDIR
seq 64 | parallel -j 4 -u --sshloginfile $PBS_NODEFILE
"cd $PWD; ./myscript.csh {}"
适应您的情况(未经测试(:
#PBS -l place=scatter
#PBS -l nodes=10:cores=1
cd $PBS_O_WORKDIR
seq 10 | parallel -j 1 --sshloginfile $PBS_NODEFILE --wd $PBS_O_WORKDIR ./myscript {}
您需要place=scatter
,因为否则同一主机可能会在$PBS_NODEFILE
中列出两次,并且GNU并行会忽略重复项。