доступные темы в 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?

Спасибо.


person armando    schedule 21.10.2017    source источник
comment
В подавляющем большинстве приложений было бы бесполезно запускать такое количество потоков при выполнении ранга MPI на каждом ядре. По умолчанию для Intel MPI потоки должны размещаться локально, но было бы интереснее сначала убедиться, что ваш OpenMP показывает выигрыш на одном ранге MPI, используя 2 или 4 ядра, а затем попробовать вероятные комбинации количества рангов и потоков. .   -  person tim18    schedule 21.10.2017
comment
Детали того, как устанавливается сходство, различаются в зависимости от реализации MPI, но MPI, ориентированный на KNL, должен включать эту функцию.   -  person tim18    schedule 22.10.2017
comment
У меня не было достаточного опыта работы с knl, чтобы сказать, может ли приложение, которое эффективно использует более 1 потока на ядро, достичь пика до того, как будут задействованы все ядра. На knc mpi может заставлять одно ядро ​​​​загружаться сообщениями, а другое — запускать os и mpi.   -  person tim18    schedule 22.10.2017
comment
какую библиотеку MPI вы используете? mpirun -np 68 grep Cpus_allowed_list /proc/self/status расскажет вам, как связаны все задачи MPI. обратите внимание, что это физический процессор, и их немного сложно интерпретировать. вы можете запустить lstopo, чтобы понять топологию. на KNL не стоит ожидать каких-либо значительных улучшений при переходе с 2 на 4 потока на ядро. все остальное зависит от приложения. Например, Intel сообщила, что оптимальные результаты были достигнуты в конкретном приложении с плоским MPI и 136 задачами на узел (что соответствует 2 потокам на ядро, что немного нелогично).   -  person Gilles Gouaillardet    schedule 22.10.2017
comment
Разве вы не должны использовать экспорт «OMP_NUM_THREADS=272»? поскольку число представляет собой общее количество потоков, а не количество потоков для каждого процессора. Согласно gcc.gnu.org/onlinedocs/libgomp/OMP_005fNUM_005fTHREADS.html   -  person Surt    schedule 22.10.2017


Ответы (1)


Поскольку вы, вероятно, используете среды выполнения Intel MPI и OpenMP, позвольте мне направить вам несколько ссылок с ценной информацией для закрепления потоков MPI и OpenMP в процессорных ядрах/потоках. В настоящее время привязка процесса/потока необходима для достижения высокой производительности. Несмотря на то, что ОС старается сделать все возможное, перемещение одного процесса/потока с одного ядра/потока в другое место означает, что данные также необходимо передавать. Если на то пошло, взгляните на Запуск программы MPI/OpenMP и < a href="https://software.intel.com/en-us/mpi-developer-reference-windows-environment-variables-for-process-pinning" rel="nofollow noreferrer">Переменные среды для закрепления процессов. Например, если вы работаете с 68 рангами MPI, то вы, вероятно, начнете помещать каждый ранг MPI в другое ядро. Вы можете дважды проверить, выполняет ли mpirun ваши запросы, установив переменную среды I_MPI_DEBUG (как описано здесь).

person Harald    schedule 24.10.2017