Мне нужно реализовать некоторые функциональные возможности параллельных вычислений для некоторого вычислительного кода на С ++. Я читал, что комбинация MPI и OpenMP может использоваться для достижения того, что мне нужно - MPI может использоваться для распределения задач между процессорами, а OpenMP используется для распределения задач между потоками на отдельных процессорах.
Я набрал lscpu
(см. Ниже), чтобы проверить информацию о процессоре моего офисного ПК, но я не уверен, как его интерпретировать. Ключевые моменты выглядят следующим образом:
- 12 CPU (s)
- 1 розетка
- 6 Core (s) на сокет
- 2 резьбы на ядро
Так, как мне интерпретировать это с точки зрения возможностей для распараллеливания? В частности, как MPI и OpenMP соответствуют элементам в этом списке? Используется ли MPI для распределения по 12 процессорам, а затем по OpenMP по 2 потокам? Но тогда как насчет ядер и сокетов?
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