Как заменить SetProcessAffinityMask () / GetProcessAffinityMask () для систем с более чем 32 ядрами? - PullRequest
2 голосов
/ 23 марта 2011

SetProcessAffinityMask() функция принимает маску DWORD, поэтому ее нельзя правильно использовать в системах с более чем 32 процессорами.

Похоже, SetThreadGroupAffinity() предназначено для того, чтобы как-то решить проблему, но я не могу 'найти какие-либо полезные примеры кода, иллюстрирующие его использование?

Как мне адаптировать мою программу, используя SetProcessAffinityMask() / GetProcessAffinityMask() для систем с более чем 32 процессорами? Есть ли примеры кода?

1 Ответ

2 голосов
/ 23 марта 2011

Прежде всего SetProcessAffinityMask() принимает DWORD_PTR.Поскольку 32-разрядные версии ОС не поддерживают> 32 ядра, это означает, что речь идет о 64-разрядной ОС.Таким образом, фактический предел для SetProcessAffinityMask() составляет 64.

Что касается того, как обрабатывать> 64, я думаю, что Поддерживающие системы с более чем 64 процессорами в техническом документе скажут вам, что вам нужнознать.


РЕДАКТИРОВАТЬ

Вы заявляете в комментариях, что ваш код работает на 64-битной ОС на 64-битной ОС.

Как яПоймите, существует ограниченная поддержка очень тонкого контроля, если вы работаете внутри 32-битного эмулятора на 64-битной ОС.Предполагается, что если вы хотите воспользоваться этими новыми возможностями, вы должны прекратить использование эмулятора.

...