我一直在使用一个由 200 个节点组成的集群,每个节点有 32 个内核来模拟随机过程。
我必须对同一系统进行大约 10 000 次模拟,因此我在一个节点的 32 个核心中运行相同的模拟(使用不同的 RNG 种子),直到它完成所有 10 000 次模拟。(每个模拟完全独立于其他模拟)
在这样做时,根据种子的不同,一些模拟需要比其他模拟更多的时间,一段时间后,我通常会分配给我的完整节点,但只有一个核心在运行(所以我不必要地占用了 31 个核心)。
在我的 sbatch 脚本中,我有这个:
# Specify the number of nodes(nodes=) and the number of cores per nodes(tasks-pernode=) to be used
#SBATCH -N 1
#SBATCH --ntasks-per-node=32
...
cat list.dat | parallel --colsep '\t' -j 32 ./main{} > "Results/A.out"
它在同一节点中一次运行 32 个 ./main,直到使用 list.dat 的所有行(10 000 行)。
有没有办法释放这些未使用的核心用于其他工作?有没有办法让我将这 32 个作业发送到随机节点,即一个作业提交在(可能)不同的节点中使用最多 32 个核心(无论目前是免费的)?
谢谢!