![结合 gnu parallel 和 mpirun:如何处理最大核心数?](https://linux22.com/image/164740/%E7%BB%93%E5%90%88%20gnu%20parallel%20%E5%92%8C%20mpirun%EF%BC%9A%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E6%9C%80%E5%A4%A7%E6%A0%B8%E5%BF%83%E6%95%B0%EF%BC%9F.png)
我有一台 32 个核心的机器,我想用可变数量的核心运行一些 mpi 作业(这是因为问题需要这样做)。有没有办法让 gnu 并行了解 mpi 作业的数量来管理何时启动每个作业?
示例:假设我必须启动许多(200)个作业,其中包含以下数量的 mpi 作业:
NMPI=(2 2 2 4 4 4 4 6 7 10 12 24 32)
因此,最初我只想运行数组的前 8 个元素(因为它们的总和小于核心总数 32),然后在每个第一个元素完成后立即依次运行其他作业,不超过 32 个并发 mpi 作业总数的限制。例如,假设前 8 个进程正在运行,第一个进程刚刚完成(对于第一个 NMPI[0] == 2)。然后并行不应该运行任何新的东西,直到有足够的空闲处理器,因为下一个作业有 NMPI[8]==7,因此将超过 32 个核心的最大限制。或者有没有办法并行改进作业启动,例如首先启动最后一个 mpi 作业(32 个核心),然后最后一个减一加上前三个,依此类推?
预先感谢您的指导
答案1
翻转数组的顺序,因此首先从最大的作业开始。
也许您可以使用--load 100%
,--delay 10s
因此您确定该作业在开始下一个作业之前使用了所有核心?