Главная страница
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.029 c
3-1091855712
SergP
2004-08-07 09:15
2004.09.12
Восстановление БД Oracle


1-1093526186
kj
2004-08-26 17:16
2004.09.12
Динамический массив.


14-1093514830
kogor
2004-08-26 14:07
2004.09.12
У кого есть СД от книги The Tomes of Delphi™ Algorithms and Data?


14-1093193860
Torry Real 1444
2004-08-22 20:57
2004.09.12
DI is closed


14-1093276002
dimonf
2004-08-23 19:46
2004.09.12
Народ, может кто знает конторы которые пишут софт для железа?