Доступные темы в Knights Landing

Я программирую на узле Knights Landing, который имеет 68 ядер и 4 гиперпотока / ядро. Я работаю над гибридным приложением MPI/OpenMP. Мой вопрос заключается в том, предназначены ли эти 4 гиперпотока для использования в качестве потоков OpenMP или как я могу их использовать? Когда я запускаю свою программу по следующей схеме:

export OMP_NUM_THREADS=1
mpirun -np 68 ./app

он работает намного быстрее, чем когда я использую схему:

export OMP_NUM_THREADS=4
mpirun -np 68 ./app

Возможно, проблема в том, что потоки для определенного MPI не близки друг к другу. Однако я не знаю, как это сделать.

Итак, могу ли я использовать 4 гиперпотока / ядро ​​в качестве потоков OpenMP?

Благодарю.

1 ответ

Поскольку вы, вероятно, используете среды выполнения Intel MPI и OpenMP, позвольте мне направить вам несколько ссылок с ценной информацией для закрепления потоков MPI и OpenMP в ядрах / потоках процессора. В настоящее время для достижения высокой производительности обязательна привязка процессов / потоков. Несмотря на то, что ОС пытается сделать все возможное, перемещение одного процесса / потока из одного ядра / потока в другое место подразумевает, что данные также должны быть перенесены. В этом отношении обратите внимание на Запуск программы MPI/OpenMP и Переменные среды для закрепления процессов. Например, если вы работаете с 68 рангами MPI, то вы, вероятно, начнете помещать каждый ранг MPI в другое ядро. Вы можете дважды проверить, выполняет ли mpirun ваши запросы, установив переменную окружения I_MPI_DEBUG (как описано здесь).

Другие вопросы по тегам