结合 gnu parallel 和 mpirun:如何处理最大核心数?

结合 gnu parallel 和 mpirun:如何处理最大核心数?

我有一台 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因此您确定该作业在开始下一个作业之前使用了所有核心?

相关内容