计算出使用 openmpi 的处理器数量
Figuring out the number of processors for using openmpi
我在 Ubuntu 14.04 和 Intel ifort 编译器上用双精度的 openmpi 编译了一个天气预报软件。但是我无法弄清楚一些问题。我需要计算出我需要发送给 mpi运行 的处理器数量。这是 lscpu
的输出
x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 60
Stepping: 3
CPU MHz: 800.000
BogoMIPS: 6784.93
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3output of lscpu
这是我用于 运行 我的软件的命令
mpi运行-np 4 aaa。但是当我这样做时,我得到了这些错误 -
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD
with errorcode 1001.
NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.
当我将 np 设置为 1 时,它 运行s 成功但没有完全使用 CPU。 CPU 使用率从 3% 到 35% 不等,但内存使用率几乎是 100%,系统冻结大约十分钟并退出并显示错误消息
forrtl severe(41) 虚拟内存不足。
我有 运行 WRF(与此问题相关的软件不是 WRF)和多个信号量,我没有遇到任何速度或内存问题。
我可以重新编译为单精度,但在我这样做之前,我希望能够计算出要发送到 mpi运行 的内核(处理器)的数量。
大多数 Intel CPUs(包括您正在使用的)都有一个虚拟执行单元,允许两个同步指令流,通常称为 "hyperthreading." 对于 Linux 内核,这似乎作为一个额外的 CPU 核心。因此,lscpu
告诉您有四个 CPU 核心 (CPU(s): 4
)。仔细查看其余输出,您会发现实际上只有两个 CPU 个核心:
Thread(s) per core: 2 <--- this is hyperthreading
Core(s) per socket: 2
Socket(s): 1
我通常不建议 运行在单个物理 CPU 内核上使用多个 MPI 进程,即使存在超线程也是如此。它往往会导致不利的性能,并且在您的情况下,有时会崩溃。尝试使用 mpiexec -np 2 aaa
看看会发生什么。如果它再次崩溃,则还有其他问题。
When I set np to 1 it runs successfully but does not use the CPU completely. CPU usage varies from 3% to 35% but the memory usage is almost 100% and the system freezes for about ten minutes and exits with the error message forrtl severe(41) insufficient virtual memory.
您可能需要 运行 较小的问题规模。这台机器没有足够的物理内存来满足请求的分配,并且正在使用虚拟内存(本质上是硬盘 space)来尝试满足它们,但仍然 运行 耗尽。在任何情况下,您都不想在 运行 进行模拟时使用虚拟内存(它比已经很慢的主内存慢 ~1000 倍)。
我在 Ubuntu 14.04 和 Intel ifort 编译器上用双精度的 openmpi 编译了一个天气预报软件。但是我无法弄清楚一些问题。我需要计算出我需要发送给 mpi运行 的处理器数量。这是 lscpu
的输出x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 60
Stepping: 3
CPU MHz: 800.000
BogoMIPS: 6784.93
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3output of lscpu
这是我用于 运行 我的软件的命令 mpi运行-np 4 aaa。但是当我这样做时,我得到了这些错误 -
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD
with errorcode 1001.
NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.
当我将 np 设置为 1 时,它 运行s 成功但没有完全使用 CPU。 CPU 使用率从 3% 到 35% 不等,但内存使用率几乎是 100%,系统冻结大约十分钟并退出并显示错误消息
forrtl severe(41) 虚拟内存不足。
我有 运行 WRF(与此问题相关的软件不是 WRF)和多个信号量,我没有遇到任何速度或内存问题。 我可以重新编译为单精度,但在我这样做之前,我希望能够计算出要发送到 mpi运行 的内核(处理器)的数量。
大多数 Intel CPUs(包括您正在使用的)都有一个虚拟执行单元,允许两个同步指令流,通常称为 "hyperthreading." 对于 Linux 内核,这似乎作为一个额外的 CPU 核心。因此,lscpu
告诉您有四个 CPU 核心 (CPU(s): 4
)。仔细查看其余输出,您会发现实际上只有两个 CPU 个核心:
Thread(s) per core: 2 <--- this is hyperthreading
Core(s) per socket: 2
Socket(s): 1
我通常不建议 运行在单个物理 CPU 内核上使用多个 MPI 进程,即使存在超线程也是如此。它往往会导致不利的性能,并且在您的情况下,有时会崩溃。尝试使用 mpiexec -np 2 aaa
看看会发生什么。如果它再次崩溃,则还有其他问题。
When I set np to 1 it runs successfully but does not use the CPU completely. CPU usage varies from 3% to 35% but the memory usage is almost 100% and the system freezes for about ten minutes and exits with the error message forrtl severe(41) insufficient virtual memory.
您可能需要 运行 较小的问题规模。这台机器没有足够的物理内存来满足请求的分配,并且正在使用虚拟内存(本质上是硬盘 space)来尝试满足它们,但仍然 运行 耗尽。在任何情况下,您都不想在 运行 进行模拟时使用虚拟内存(它比已经很慢的主内存慢 ~1000 倍)。