Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отключение процессоров [D7, WinXP]


Admin ©   (2004-07-28 17:35:00) 

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

BOOL SetProcessAffinityMask(

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


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


Sergey Kaminski   (2004-07-28 18:46:00) [1]

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


Admin   (2004-07-28 18:18:00) [2]

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


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

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

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


panov   (2004-07-28 18:15:00) [4]

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


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

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

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


panov   (2004-07-28 18:14:00) [6]

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

00000101

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

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


00000101
--------
76543210


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


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

2 MU ©  

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


MU   (2004-07-28 18:11:00) [8]

см [2]


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

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


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

Хмм... Сделал. На 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;


panov   (2004-07-28 18:05:00) [11]

см. также SetThreadAffimtyMask


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

BOOL SetProcessAffinityMask( HANDLE hProcess, DWOHD_PTR dwProcessAffinityMask);

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

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

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


MU   (2004-07-28 17:47:00) [13]

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
  );
чтобы получить значение. отключай ручками процессоры и см., что возвращается


Наверх

Титульная страница Поиск, карта сайта Написать письмо