Вы можете использовать набор инструментов 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).