我有12个CPU,1个插槽,每个插槽6个内核,每个内核2个线程 - 这些信息如何与MPI和OpenMP并行化相对应?

问题描述 投票:1回答:2

我需要为一些计算要求严格的c ++代码实现一些并行计算功能。我已经读过可以使用MPI和OpenMP的组合来实现我所需要的 - MPI可用于在处理器之间分配任务,而OpenMP用于在各个处理器上的线程之间分配任务。

我键入lscpu(见下文)来检查我的办公室电脑的处理器细节,但我不知道如何解释它。关键点似乎如下:

  • 12个CPU
  • 1个插座
  • 每插槽6个核心
  • 每个核心2个线程

那么我如何根据并行化的可能性来解释这一点呢?具体来说,MPI和OpenMP如何对应此列表中的项目? MPI是用来分配12个CPU,然后通过2个线程分配OpenMP吗?但那么核心和套接字呢?

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              12
On-line CPU(s) list: 0-11
Thread(s) per core:  2
Core(s) per socket:  6
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               158
Model name:          Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
Stepping:            10
CPU MHz:             4409.872
CPU max MHz:         4700,0000
CPU min MHz:         800,0000
BogoMIPS:            7392.00
Virtualization:      VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            12288K
NUMA node0 CPU(s):   0-11
c++ parallel-processing mpi openmp hpc
2个回答
3
投票

MPI用于多台计算机(共享内存节点)的集群。通常,您为共享内存节点中的每个共享内存节点和OpenMP运行一个MPI排名(进程)。如果您瞄准单个办公室计算机,MPI不是编程模型的首选。最有可能的是,您应该独占使用OpenMP。

现在有一些有效的理由来为每个节点运行多个MPI进程,即出于NUMA的原因,或者因为您没有从共享内存中受益。

一般来说,如果您是初学者,首先关注一个并行范例并熟悉它。


3
投票

“MPI和OpenMP如何与此列表中的项目相对应” - 我会说MPI这个列表无关紧要,而OpenMP最多只能进行12x并行化。但问题是OpenMP并没有通过并行运行来神奇地为你的代码提供速度提升。现有应用程序可能需要彻底检查才能利用多个线程。因此,正确的出发点是找出哪个性能瓶颈是最容易并行的并且逐个返工。 OpenMP可能有也可能没有任何帮助。

© www.soinside.com 2019 - 2024. All rights reserved.