Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.12;
Скачать: CL | DM;

Вниз

Отключение процессоров   Найти похожие ветки 

 
Admin   (2004-07-28 17:35) [0]

Как мне отключить (а замет  опять включить) несколько процессоров в моей машине. Например, мне нужно, чтобы определенное место кода программы обрабатывалось на 1-ом процессоре, а затем опять кключались оставшиеся 3 процессора. Всего у меня 4 ксенона в машине. Отключал вручную через диспетчер задач (вин 2003) (Set affinity). Нашел АПИ ф-цию:

BOOL SetProcessAffinityMask(

   HANDLE hProcess, // handle to process
   DWORD dwProcessAffinityMask // process affinity mask
  );


Но не могу понять, что мне прописывать в dwProcessAffinityMask. Подскажите плз.


 
MU ©   (2004-07-28 17:47) [1]

A process affinity mask is a bit vector in which each bit represents the processor on which the threads of the process are allowed to run.

если сразу не понятно, то
используй
BOOL GetProcessAffinityMask(

   HANDLE hProcess, // handle to the process of interest
   LPDWORD lpProcessAffinityMask, // pointer to structure to receive process affinity mask
   LPDWORD lpSystemAffinityMask // pointer to structure to receive system affinity mask
  );
чтобы получить значение. отключай ручками процессоры и см., что возвращается


 
panov ©   (2004-07-28 18:01) [2]

BOOL SetProcessAffinityMask( HANDLE hProcess, DWOHD_PTR dwProcessAffinityMask);

В первом параметре, hProcess, передается описатель процесса. Второй параметр, dwProcessAffinityMask, — это битовая маска, указывающая, на каких процессорах мо гут выполняться потоки данного процесса. Передав, например, значение 0x00000005, мы разрешим процессу использовать только процессоры 0 и 2 (процессоры 1 и 3-31 ему будут недоступны).

Привязка к процессорам наследуется дочерними процессами. Так, если для роди тельского процесса задана битовая маска 0x00000005, у всех потоков его дочерних процессов будет идентичная маска, и они смогут работать лишь на тех же процессо рах. Для привязки целой группы процессов к определенным процессорам используйте объект ядра "задание" (см главу 5).

(c) Джеффри РИХТЕР


 
panov ©   (2004-07-28 18:05) [3]

см. также SetThreadAffimtyMask


 
Admin   (2004-07-28 18:07) [4]

Хмм... Сделал. На 1-процессорной машине указатель на  lpProcessAffinityMask вернул 1, на 4-х проц. - 15... Где логика?

procedure TForm1.Button1Click(Sender: TObject);
var pam, sam: cardinal;
begin
  GetProcessAffinityMask(GetCurrentProcess, pam, sam);
  label1.Caption := inttostr(pam);
  label2.Caption := inttostr(sam);
end;


 
Admin   (2004-07-28 18:10) [5]

Подскажите, как мне рассчитать эту самую битовую маску для отключения 2,3 и 4 процессора, а затем для их включения...


 
MU ©   (2004-07-28 18:11) [6]

см [2]


 
Admin   (2004-07-28 18:12) [7]

2 MU ©  

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


 
panov ©   (2004-07-28 18:14) [8]

В примере Рихтера:
0x00000005
берем последний байт, его двоичный вид:

00000101

биты нумеруются с 0 до 7, причем нулевой - правый бит.

т.е. в данном примере:


00000101
--------
76543210


тспользуются процессоры 0 и 2.


 
panov ©   (2004-07-28 18:15) [9]

У тебя процессоры также нумеруются с 0.


 
Admin   (2004-07-28 18:15) [10]

> Привязка к процессорам наследуется дочерними процессами.

А дочерними потоками (threads) ?


 
Admin   (2004-07-28 18:18) [11]

А понял... Значит надо в двоичный вид представить число, что получилось. А вот например если у меня более 8 процессоров. Как тут быть?


 
panov ©   (2004-07-28 18:18) [12]

А вот например если у меня более 8 процессоров

Ну так и маска состоит не из одного байта. Один байт я для примера взял.


 
Sergey Kaminski ©   (2004-07-28 18:46) [13]

Так эта... а зачем их отключать-то, я так и не понял?



Страницы: 1 вся ветка

Текущий архив: 2004.09.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
14-1093142043
Baron
2004-08-22 06:34
2004.09.12
Это лето?


14-1093409534
rok
2004-08-25 08:52
2004.09.12
Что означает Sys Rq на клавише Print Screen?


1-1093845591
Zhekson
2004-08-30 09:59
2004.09.12
AdvStringGrid for Delphi7


3-1092809583
Uran
2004-08-18 10:13
2004.09.12
Как лучше защитить базу данных?


8-1087961266
ИМХО
2004-06-23 07:27
2004.09.12
Разбить картинку на 2 картинки