Определите, на каком физическом процессоре работает мой код - PullRequest
3 голосов
/ 27 августа 2009

Существует ли Windows API или какой-либо способ определить, на каком физическом процессоре / ядре работает мой текущий поток? Мне не нужна эта информация. Мне просто любопытно.

Меня не интересуют процессоры, на которых разрешено выполнение потока. Я хотел бы знать, на каком именно он работает в настоящее время. Я знаю, что потоки довольно быстро переключаются с одного на другое ...

Ответы [ 3 ]

4 голосов
/ 27 августа 2009

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

Как уже говорили другие, вы можете использовать GetProcessAffinityMask или GetThreadIdealProcessor, но они будут работать, только если вы уже установили маску сходства или идеальный процессор для потока.

3 голосов
/ 27 августа 2009

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

2 голосов
/ 27 августа 2009

Для управления процессором, на котором работает ваш процесс или поток, с помощью Windows API, вы можете использовать SetThreadAffinityMask или SetProcessAffinityMask .

Они работают, устанавливая биты в битовой маске, где каждый бит представляет процессор, для которого может быть запланирован ваш поток или процесс:

BOOL WINAPI SetProcessAffinityMask(
  __in  HANDLE hProcess,
  __in  DWORD_PTR dwProcessAffinityMask
);

Вызовите GetProcessAffinityMask , чтобы узнать, какие процессоры доступны для использования в этих вызовах.

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