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

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

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

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

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

Для pthreads я думаю, что sched_getaffinity() является, по крайней мере, частью решения. Не уверен точно, как pthreads называет CPU: s и ядра.

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

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