Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.071 c
6-1089277043
jav
2004-07-08 12:57
2004.09.12
HTTPS запрос к серверу...


14-1093067609
kaZaNoVa
2004-08-21 09:53
2004.09.12
TThread и через CreateThread


1-1093588179
serg128
2004-08-27 10:29
2004.09.12
Как активизировать MDI окно?


14-1093261320
onix
2004-08-23 15:42
2004.09.12
Русские буквы


1-1093364754
Фёдор Мегатронов
2004-08-24 20:25
2004.09.12
Чисто теоретический вопрос на счёт Тредов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский