На каком ядре работает данный поток?
Есть ли функция или какой-либо другой способ программно узнать, на каком ядре какого процессора работает данный поток моей программы (pid)? Оба решения OpenMP или Pthreads помогут мне, если это возможно. Благодарю.
4 ответа
Я думаю, это будет зависеть от платформы. В Windows вы можете использовать NtGetCurrentProcessorNumber, но это предостережение, возможно исчезающее.
Я ожидаю, что это трудно сделать, потому что ничто не может остановить перемещение потока на новое ядро в любое время (во всяком случае, в большинстве приложений). Как только вы получите результат, он может устареть.
Это трудно сделать переносимым, поскольку ответ зависит как от аппаратного обеспечения, так и от операционной системы.
Библиотека аппаратного обеспечения - это новый инструмент, который позволяет запрашивать информацию о процессоре / ядре / потоке и т. Д. (И устанавливать привязки привязки) независимым от ОС / оборудования способом. Он поддерживает огромный список оборудования и операционных систем, и поэтому должен добавить много переносимости для таких запросов. Как только вы наметите топологию вашей системы, hwloc_get_last_cpu_location
вернет ЦП, в котором последний поток работал, где ЦП может означать основной или аппаратный поток.
Я думаю, что для pthreads sched_getaffinity()
по крайней мере, часть решения. Хотя точно не знаю, как pthreads называет процессор и ядра.