В общем, хотел написать свою собственную утилиту как Process Lasso, но столкнулся с прикола - функция "EnumProcess" не может устанавливать "AffinityMask" больше, чем на 8 потоков, потому что переменная, отвечающая за это, типа "byte".
255 - это максимум байта. Если процессор имеет больше 8 потоков, стандартный компонент не может работать с остальными потоками.
у меня 13400f 6-p ядри 4-e ядри обшем 16 потоков и хоче вес система была бы в энергоэффективный ядрах а AffinityMask притаком конфиге это 61440
очен полезный апдейт для гибридный процессори как alder-lake rocket-lake и райзени с x3D в ccd0
65535 = all cores 0-15
61440 = e cores 12-15
4095 = p cores 0-11
вот это пример affinitymask:
1 = Core 0
2 = Core 1
3 = Core 0 + Core 1
4 = Core 2
5 = Core 0 + Core 2
6 = Core 1 + Core 2
7 = Core 0 + Core 1 + Core 2
8 = Core 3
9 = Core 0 + Core 3
10 = Core 1 + Core 3
11 = Core 0 + Core 1 + Core 3
12 = Core 2 + Core 3
13 = Core 0 + Core 2 + Core 3
14 = Core 1 + Core 2 + Core 3
15 = Core 0 + Core 1 + Core 2 + Core 3
16 = Core 4
17 = Core 0 + Core 4
18 = Core 1 + Core 4
19 = Core 0 + Core 1 + Core 4
20 = Core 2 + Core 4
21 = Core 0 + Core 2 + Core 4
22 = Core 1 + Core 2 + Core 4
23 = Core 0 + Core 1 + Core 2 + Core 4
24 = Core 3 + Core 4
25 = Core 0 + Core 3 + Core 4
26 = Core 1 + Core 3 + Core 4
27 = Core 0 + Core 1 + Core 3 + Core 4
28 = Core 2 + Core 3 + Core 4
29 = Core 0 + Core 2 + Core 3 + Core 4
30 = Core 1 + Core 2 + Core 3 + Core 4
31 = Core 0 + Core 1 + Core 2 + Core 3 + Core 4
ну ты понял, итд
найдите этот файлик
Hiasm\Elements\delphi\code\hiEnumProcess.pas
на замените "pc: byte" на "pc: cardinal"
типо так:
procedure ThiEnumProcess._work_doSetProc;
var
proc: THandle;
pc: cardinal; // изменилис из byte на cardinal
begin
pc := Readinteger(_Data, _data_AffinityMask, 0);
if pc = 0 then Exit;
SetDebugPrivilege(FDebugPrivilege);
proc := OpenProcess(PROCESS_SET_INFORMATION, false, procEntry.th32ProcessID);
SetProcessAffinityMask(proc, pc);
CloseHandle(proc);
end;
Теги: EnumProcess AffinityMask гибридный процессори