Как узнать, на каком процессоре работает каждый поток? - PullRequest
2 голосов
/ 08 ноября 2011

У меня многопоточная программа, и меня попросили добавить опцию, чтобы поместить каждый поток в свое собственное ядро ​​(процессор, процессор и т. Д.).

Я написал код для выполненияэто с использованием SetThreadAffinityMask () .Я получаю маску сходства процесса по умолчанию, проверяю, достаточно ли процессоров, чтобы сделать это, затем устанавливаю маску сходства каждого потока, чтобы включить только один из доступных процессоров (и различный для каждого потока).

Все это кажетсяскомпилировать и запустить без проблем, но как проверить, работает ли он на самом деле?

Кажется, должен быть какой-то инструмент мониторинга, который показывает, на каком процессоре работает поток, но я не могу его найти.ProcessExplorer покажет загрузку ЦП потока, но не то, на каком ЦП это произошло.Я просмотрел возможные счетчики, которые можно использовать на perfmon, но опять же я смог найти только% загрузки, а не какой процессор.

Было предложено сделать GetThreadAffinityMask () и сообщить об этом, но, похоже,мне просто сообщат, что я правильно вызвал SetThreadAffinityMask ().

Так что я просто должен поверить, что SetThreadAffinity () будет делать именно то, что я хочу?

(ПРИМЕЧАНИЕ: Я нашел довольно много, казалось бы, похожих вопросов по SO, но ни один из них не содержал ответа на этот конкретный вопрос).

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

Использование GetCurrentProcessorNumber() (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683181(v=vs.85).aspx)

1 голос
/ 08 ноября 2011

Вы можете вызвать GetCurrentProcessorNumber , чтобы получить номер процессора текущего выполняющегося потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...