【发布时间】:2017-06-08 09:04:26
【问题描述】:
我一直在使用以下命令运行几个与 MPI 结合的科学程序包
nohup mpirun -np N -x OMP_NUM_THREADS=M program.exe < input > output &
其中 N 和 M 的值取决于我机器的物理 CPU 内核。比如我的机器有这样的规格
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 24
On-line CPU(s) list: 0-23
Thread(s) per core: 2
Core(s) per socket: 6
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 45
Model name: Intel(R) Xeon(R) CPU E5-2440 0 @ 2.40GHz
Stepping: 7
在这种情况下,我首先尝试设置为 N = 24 和 M = 1,因此计算运行非常缓慢。然后我将 N 和 M 分别更改为 12 和 2。所以我发现后者显然为我提供了最快的计算。
我想知道为什么我将 N & M 设置为 12 和 2 提供比第一种情况更高的性能?
【问题讨论】:
-
试试 N=2 和 M=12,我认为它给出了最快的代码。为什么?因为 OpenMP 是为共享内存设计的,而 MPI 是为分布式内存设计的。
标签: linux parallel-processing mpi openmp