На каком ядре работает данный поток? - PullRequest
3 голосов
/ 28 апреля 2011

Есть ли функция или любой другой способ программно узнать, на каком ядре какого процессора работает данный поток моей программы (pid)?Оба решения OpenMP или Pthreads помогли бы мне, если это возможно.Спасибо.

Ответы [ 4 ]

4 голосов
/ 28 апреля 2011

Я думаю, это будет зависеть от платформы. В Windows вы можете использовать NtGetCurrentProcessorNumber , но это предупреждение, которое может исчезнуть.

Я ожидаю, что это трудно сделать, потому что ничто не мешает перемещению потока в новое ядро ​​в любое время (во всяком случае, в большинстве приложений). Как только вы получите результат, он может устареть.

3 голосов
/ 13 августа 2011

Я думаю, что в Linux можно попробовать sched_getcpu ().

1 голос
/ 28 апреля 2011

Это трудно сделать переносимым, поскольку ответ зависит как от аппаратного обеспечения, так и от ОС.

Аппаратная локализация - это новый инструмент, который позволяет запрашивать ЦП / ядро ​​/ потокинформация и т. д. (и установка привязок привязки) независимо от операционной системы и оборудования.Он поддерживает огромный список оборудования и операционных систем, и поэтому должен добавить много переносимости для таких запросов.Как только вы отобразите топологию вашей системы, hwloc_get_last_cpu_location вернет процессор, на котором последний поток работал, где процессор может означать ядро ​​или аппаратный поток.

1 голос
/ 28 апреля 2011

Для pthreads, я думаю, <a href="http://linux.die.net/man/2/sched_setaffinity" rel="nofollow">sched_getaffinity()</a> - по крайней мере часть решения.Хотя точно не знаю, как pthreads называет процессор и ядра.

...