弄清楚使用openmpi的处理器数量

时间:2016-07-09 06:30:55

标签: ubuntu-14.04 mpi openmpi hpc

我在Ubuntu 14.04和Intel ifort编译器上编译了一个双精度openmpi的天气预报软件。但是我无法弄清楚几个问题。我需要弄清楚我需要发送到mpirun的处理器数量。这是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

这是我用来运行我的软件的命令 mpirun -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时,它成功运行但不完全使用CPU。 CPU使用率从3%到35%不等,但内存使用率几乎为100%,系统冻结大约十分钟并退出并显示错误消息

forrtl严重(41)虚拟内存不足。

我运行了多个信号量的WRF(与此问题相关的软件不是WRF),我没有遇到任何速度或内存问题。 我可以重新编译为单精度,但在我这样做之前,我希望能够计算出要发送到mpirun的核心(处理器)的数量。

1 个答案:

答案 0 :(得分:1)

大多数英特尔CPU(包括您正在使用的CPU)都有一个虚拟执行单元,允许两个通常称为“超线程”的同步指令流。"对于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,看看会发生什么。如果再次崩溃,还有其他问题。

  

当我将np设置为1时,它成功运行但不完全使用CPU。 CPU使用率从3%到35%不等,但内存使用率几乎为100%,系统冻结大约十分钟,并退出错误消息,严重(41)虚拟内存不足。

您可能需要运行较小的问题大小。这台机器没有足够的物理内存来满足所请求的分配,并且正在使用虚拟内存(基本上是硬盘空间)来尝试实现它们,但仍然耗尽。在任何情况下,您都不希望在运行模拟时使用虚拟内存(它比主内存慢了1000倍)。