Сейчас на форуме: UniSoft, laslo, bartolomeo (+5 невидимых)

 eXeL@B —› Программирование —› CPUID на 2-х процессорном компе
Посл.ответ Сообщение


Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 13 февраля 2007 21:59
· Личное сообщение · #1

На 2-х процессроном компе у каждого проца свой SN, показываемый по CPUID.
Как программно заставить прогу принудительно работать на каком-то конкретном проце?
Нужно это для того, чтобы определить у каждого проца SN.



Ранг: 160.1 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 13 февраля 2007 22:32
· Личное сообщение · #2

SetProcessAffinityMask



Ранг: 63.1 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 13 февраля 2007 23:44
· Личное сообщение · #3

SetProcessAffinityMask имеет другое назначение.
Вцелом принудить прогу работать на конкретном проце можно только посредством NativeAPI, тк распределение процессорного времени зарыто глубоко в ядре



Ранг: 88.3 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 14 февраля 2007 00:05
· Личное сообщение · #4

может быть SetThreadIdealProcessor? и смотреть по возвращаемому значению...



Ранг: 200.3 (наставник)
Активность: 0.090
Статус: Участник

Создано: 14 февраля 2007 03:49
· Личное сообщение · #5

HANDLE threadHandle = GetCurrentThread();
SetThreadIdealProcessor(threadHandle, 1);
(с)

-----
Само плывет в pуки только то, что не тонет.




Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 14 февраля 2007 16:31 · Поправил: S_T_A_S_
· Личное сообщение · #6

См. MSDN:

The SetThreadIdealProcessor function sets a preferred processor for a thread. The system schedules threads on their preferred processors whenever possible. Мимо.

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. SetProcessAffinityMask - то, что нужно.


ЗЫ

GetCurrentThread:
push -2
pop eax
retn

(c) Microsoft



Ранг: 200.3 (наставник)
Активность: 0.090
Статус: Участник

Создано: 14 февраля 2007 17:07
· Личное сообщение · #7

По-моему лучше в программе вызвать два треда, чтоб каждый отработал на разном процессоре, чем запускать процессы ?

-----
Само плывет в pуки только то, что не тонет.




Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 15 февраля 2007 15:30 · Поправил: S_T_A_S_
· Личное сообщение · #8

Эти 2 треда могут быть выполнены на одном ядре. Особенно, если вызвать SetProcessAffinityMask Создавать лишние просессы не нужно.




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 15 февраля 2007 16:50
· Личное сообщение · #9

мухохо вот ту то и облажались протокреатеры

-----
have a nice day




Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 08 ноября 2011 16:10
· Личное сообщение · #10

S_T_A_S_
Аффинитет и есть номер камня. Сделайте цикл из SetProcessAffinityMask() и прочитайте на каждой итерации ApicId через CPUID - это и есть номер процессора текущего.


 eXeL@B —› Программирование —› CPUID на 2-х процессорном компе
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати