Как выбрать ядра, на которых может выполняться процесс

Разрешённые для процеcса ядра задаются при помощи Affinity mask.

Это битовая маска, один бит - одно ядро, с младших разрядов. 

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

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

procedure DoIt;
var
    ProcessAfMask,             // Маска для процесса.
    SystemAfMask : NativeUInt; // Маска для системы.
begin
  // Получаем маски.
  GetProcessAffinityMask(GetCurrentProcess, ProcessAfMask, SystemAfMask);
  // Устанавливаем себе маску как в системе, только отключив первое ядро.
  SetProcessAffinityMask(GetCurrentProcess, SystemAfMask - 1);
end;
Метки: