У меня 12 процессоров, 1 сокет, 6 ядер на сокет, 2 потока на ядро ​​- как эта информация соответствует распараллеливанию с MPI и OpenMP? - PullRequest
1 голос
/ 09 апреля 2019

Мне нужно реализовать некоторые функциональные возможности параллельных вычислений для некоторого вычислительного кода на С ++. Я читал, что комбинация 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

Ответы [ 2 ]

3 голосов
/ 09 апреля 2019

«как MPI и OpenMP соответствуют элементам в этом списке» - я бы сказал, что для MPI этот список не имеет значения, в то время как OpenMP будет способен максимально 12x распараллеливания.Но дело в том, что OpenMP волшебным образом не дает вашему коду ускорение при параллельной работе.Существующие приложения могут потребовать полного пересмотра, чтобы использовать преимущества нескольких потоков.Таким образом, правильной отправной точкой было бы выяснить, какое из узких мест производительности проще всего сделать параллельным, и переработать их один за другим.OpenMP может или не может быть никакой помощи.

3 голосов
/ 09 апреля 2019

MPI используется для кластеров из нескольких компьютеров (узлов с общей памятью). Как правило, вы запускаете один ранг MPI (процесс) для каждого узла совместно используемой памяти и OpenMP внутри узла совместно используемой памяти. Если вы нацелены на один офисный компьютер, MPI - не лучший выбор для модели программирования. Скорее всего, вы должны использовать исключительно OpenMP.

Теперь есть несколько веских причин для запуска более одного процесса MPI на узел, т. Е. По причинам NUMA или потому, что вы не пользуетесь общей памятью.

В общем, если вы новичок, сначала сосредоточьтесь на одной параллельной парадигме и ознакомьтесь с ней.

...