Я программирую на узле 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?
Спасибо.
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