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

标签 c++ parallel-processing mpi openmp hpc

我需要为一些对计算要求很高的 C++ 代码实现一些并行计算功能。我读到 MPI 和 OpenMP 的组合可用于实现我的需要 - MPI 可用于在处理器之间分配任务,而 OpenMP 用于在各个处理器上的线程之间分配任务。

我输入了 lscpu(见下文)来检查我办公室 PC 的处理器详细信息,但我不确定如何解释它。关键点似乎如下:

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

那么我如何根据并行化的可能性来解释这一点?具体来说,MPI和OpenMP如何对应这个列表中的项目? MPI 是否用于分布在 12 个 CPU 上,然后 OpenMP 分布在 2 个线程上?但是内核和 socket 呢?

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

最佳答案

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

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

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

关于c++ - 我有 12 个 CPU,1 个插槽,每个插槽 6 个内核,每个内核 2 个线程 - 这些信息如何对应于 MPI 和 OpenMP 的并行化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55591518/

相关文章:

注册的 doParallel 集群不适用于 train/caret parRF 模型

mpi - 有MPI stub 库吗?

c++ - 如何防止并行代码耗尽所有可用的系统内存?

c++ - Eclipse CDT 构建配置 - 使用 CPP 单元测试 DLL

C++ - 检查字符是否出现在控制台的给定位置

python - Windows 上 Python 3 的多线程处理

C# 并行共享内部变量

c++ - 谐波级数和 c++ MPI

c++ - 使用 fstream 读取带有 float 的 vector

c++ - 在 C++ 中表示多遍抽象语法树 (AST)?