У меня многопоточная программа, и меня попросили добавить опцию, чтобы поместить каждый поток в свое собственное ядро (процессор, процессор и т. Д.).
Я написал код для выполненияэто с использованием SetThreadAffinityMask () .Я получаю маску сходства процесса по умолчанию, проверяю, достаточно ли процессоров, чтобы сделать это, затем устанавливаю маску сходства каждого потока, чтобы включить только один из доступных процессоров (и различный для каждого потока).
Все это кажетсяскомпилировать и запустить без проблем, но как проверить, работает ли он на самом деле?
Кажется, должен быть какой-то инструмент мониторинга, который показывает, на каком процессоре работает поток, но я не могу его найти.ProcessExplorer
покажет загрузку ЦП потока, но не то, на каком ЦП это произошло.Я просмотрел возможные счетчики, которые можно использовать на perfmon
, но опять же я смог найти только% загрузки, а не какой процессор.
Было предложено сделать GetThreadAffinityMask () и сообщить об этом, но, похоже,мне просто сообщат, что я правильно вызвал SetThreadAffinityMask ().
Так что я просто должен поверить, что SetThreadAffinity () будет делать именно то, что я хочу?
(ПРИМЕЧАНИЕ: Я нашел довольно много, казалось бы, похожих вопросов по SO, но ни один из них не содержал ответа на этот конкретный вопрос).