0

我正在使用一个 MPI 程序,它将一个巨大的样本空间平等地划分为工作线程并并行完成工作。我正在使用以下脚本提交我的工作。

#!/bin/bash
#PBS -l nodes=NNODES
mpirun -np NPROC ./run >log

我从集群网页中发现每个节点有 10 个内核。我天真地假设如果我需要 100 个工作线程 (NPROC),我只需要请求 10 个节点 (NNODES)。但是,我发现当我增加 NNODES 时,程序运行的 walltime 一直在减少。

我猜这是因为在为每个节点分配 1 而不是多个工作线程时资源竞争较少。如果这是真的,我认为当 NNODES==100(NPROC) 时,挂墙时间也会趋于平稳,因为现在每个节点将有 1 个工作线程,如果我们有更多节点,它不会进一步减少挂墙时间比请求的工作线程。

然而,我又错了,因为进一步增加 NNODES 超过 100(NPROC) 几乎线性地进一步减少了墙时间。这真的让我很困惑,因为源代码实际上是从上面的脚本中读取 NPROC 并将样本划分为它们,我无法理解为什么请求比工作线程更多的节点会使事情变得更快。

4

1 回答 1

0

如果您的程序使用大量 I/O,您可能会观察到一个副作用,即通过保留大量节点,您会阻止其他作业运行,因此网络、文件系统等的压力较小,您的作业有更多的资源。但是,如果您的工作受 CPU 限制,则不适用。

于 2013-10-12T12:55:10.570 回答