openMp и количество ядер против процессора - PullRequest
0 голосов
/ 13 марта 2020

Мне интересно, как openmp выясняет, сколько потоков он может запустить через библиотечный вызов omp_get_max_threads(). Я работаю на машине centOS linux, используя g cc -fopenmp. У моей машины 16 AMD Opteron (tm) Процессор 6136 с, каждый с 8 ядрами, все в соответствии с / proc / cpuinfo. Если я запускаю omp_get_num_procs (), он возвращает 16. Но omp_get_max_threads() также возвращает 16. Почему не максимальное число потоков 16 * 8?

Когда я запускаю программу, которая использует 16 потоков, я вижу программу в top, работающую на ~ 1600% ЦП, и если я переключаю 'Last used cpu (SMP)' ', это число немного меняется. Итак, 1600% имеет смысл, но есть ли способ узнать, на каких ядрах какие процессоры работают в потоках?

Я довольно новичок в openmp, так что извините, если эти вопросы кажутся наивными.

1 Ответ

1 голос
/ 14 марта 2020

Вы можете использовать набор инструментов hwlo c, чтобы узнать привязку потоков любого приложения к аппаратным потокам / ядрам. Вам нужно только имя или PID целевого запущенного процесса. Вот пример:

$ hwloc-ps --pid 2038168 --threads --get-last-cpu-location
2038168 Machine:0       ./a.out
 2038168    Core:5      a.out
 2038169    Core:3      a.out
 2038170    Core:1      a.out
 2038171    Core:4      a.out
 2038172    Core:0      a.out
 2038173    Core:2      a.out

Здесь мы видим, что процесс a.out (с PID 2038168) использует 6 потоков, каждая карта на разных ядрах. Однако отображение потоков на ядрах с течением времени может измениться, если вы не настроите OpenMP должным образом (отправной точкой является установка переменных среды OMP_PROC_BIND и OMP_PLACES ).

Кроме того, вы можете использовать hwloc-ps, чтобы понять топологию вашей машины (сколько ядер есть, сколько потоков, как они соединены и т. Д. c.). Я очень удивлен, что у вас может быть 16 "процессоров AMD Opteron (tm) 6136". Действительно, этот процессор использует сокет G34 , который доступен в конфигурации с 4 гнездами (и 8 кристаллами). Поэтому, пожалуйста, проверьте это с помощью hwloc-ps!

Альтернативным способом является использование инструмента профилирования (например, Intel VTune).

...