MPICH2 на машине с двумя узлами NUMA - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в MPI. Я использую MPICH2 на компьютере с Linux со следующей информацией:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                40
On-line CPU(s) list:   0-39
Thread(s) per core:    2
Core(s) per socket:    10
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 85
Model name:            Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz
Stepping:              4
CPU MHz:               799.844
CPU max MHz:           3000.0000
CPU min MHz:           800.0000
BogoMIPS:              4400.00
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              1024K
L3 cache:              14080K
NUMA node0 CPU(s):     0-9,20-29
NUMA node1 CPU(s):     10-19,30-39

Насколько я понимаю, у меня есть 2 узла, 20 ядер и 40 потоков (то есть процессоров) на этой машине. Это правильно? Если да, я думаю, что я должен установить MPICH для запуска 20 процессов (один процесс на каждое физическое ядро), верно? Однако когда я запускаю команду mpiexec -n 20 MyProgram, средняя загрузка процессора составляет всего 50%. Если я изменю на mpiexec -n 40 MyProgram, загрузка процессора составит 100%, но общая производительность на самом деле ухудшается, поэтому я думаю, что я могу переоценить.

1 Ответ

0 голосов
/ 25 апреля 2018

загрузка ЦП является вводящим в заблуждение показателем. Загрузка ЦП отражает часть времени, в течение которой некоторые задачи были запланированы на логическом ЦП. Среднее значение CPU - это среднее значение по всем логическим ядрам. Таким образом, 50% среднего значения ЦП может означать, что любой другой логический ЦП использует 100% (а остальные 0%). Таким образом, вы наблюдаете это в ситуации, когда каждое физическое ядро ​​всегда используется.

Использование ЦП, означает использование ресурсов. Есть рабочие нагрузки, которые выигрывают от использования гиперпоточности, а рабочие нагрузки - нет. Существуют рабочие нагрузки, которые могут быть быстрее при использовании меньшего количества потоков, чем физические ядра (например, ограниченная пропускная способность памяти). Существуют рабочие нагрузки, которые могут быть быстрее при использовании большего количества потоков, чем логические процессоры (например, ограниченная задержка ввода / вывода).

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

...