Открытое ядро ​​MPI 4.0 и привязка памяти - PullRequest
2 голосов
/ 27 сентября 2019

Мне нужны некоторые советы о том, как добиться привязок ядра и памяти, которые я имею в виду, используя Open MPI 4.0.1.Это для одного вычислительного узла с 8 узлами NUMA и 64 ядрами, а именно 2x AMD Epyc 7551, SMT отключен.

Ядра в этой системе пронумерованы по следующей схеме:

enter image description here

Теперь я имею в виду 3 разные политики привязки, назовем их «закрыть», «распространить» и «разбросать».Я приведу 3 примера для каждого из 6,16 и 48 потоков, чтобы прояснить мою идею (надеюсь).Но мне нужны методы, которые работают с произвольным числом потоков MPI от 1 до 64.

1: «закрыть» Идея в том, чтобы держать потоки как можно ближе, то есть минимизировать ядро.задержка.enter image description hereenter image description hereenter image description here

2: «спред» с идеей использованиявсей доступной пропускной способности памяти

enter image description hereenter image description hereenter image description here

3: "scatter " Идея заключается в том, что каждый узел NUMA снова делится на 2 группы по 4 ядра, где каждая группа имеет свой собственный кэш L3.По сравнению с «распространением» эта политика должна максимизировать объем кэша L3, доступный для каждого потока.

enter image description hereenter image description hereenter image description here

Какие аргументы мне нужно передать mpirun для достижения каждой из этих 3 политик?Или любой другой метод, если это не может быть достигнуто без помощи, например, машинных файлов.

1 Ответ

0 голосов
/ 27 сентября 2019

У меня нет оборудования для его проверки, поэтому я не могу гарантировать, что это правильный ответ

  • "закрыть" mpirun --bind-to core --rank-by core --map-by core ...
  • "распространить" mpirun --bind-to core --rank-by core --map-by numa ...
  • "scatter" mpirun --bind-to core --rank-by core --map-by l3cache ...

Вы также можете mpirun --report-bindings ..., чтобы увидеть, как задачи MPI были закреплены Open MPI.

...