На каком ядре работает данный поток?

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

4 ответа

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

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

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

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

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

Я думаю, что для pthreads sched_getaffinity() по крайней мере, часть решения. Хотя точно не знаю, как pthreads называет процессор и ядра.

Другие вопросы по тегам