为什么请求比工作线程更多的节点会使MPI更快

为什么请求比工作线程更多的节点会使MPI更快,mpi,Mpi,我使用的是一个MPI程序,它将把一个巨大的样本空间平均地划分为工作线程,并并行地完成这项工作。我正在使用以下脚本提交我的作业 #!/bin/bash #PBS -l nodes=NNODES mpirun -np NPROC ./run >log 我从我的集群网页上发现,我们每个节点有10个核心。我天真地假设,如果我需要100个工作线程(NPROC),我只需要请求10个节点(NNODES)。然而,我发现当我增加nNode时,程序运行的walltime持续减少 我猜这是因为在每个节点分配1

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

#!/bin/bash
#PBS -l nodes=NNODES
mpirun -np NPROC ./run >log
我从我的集群网页上发现,我们每个节点有10个核心。我天真地假设,如果我需要100个工作线程(NPROC),我只需要请求10个节点(NNODES)。然而,我发现当我增加nNode时,程序运行的walltime持续减少

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


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

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