Посл.ответ |
Сообщение |
Ранг: 266.8 (наставник), 5thx Активность: 0.22↘0.03 Статус: Участник very WELL :)
|
Создано: 13 февраля 2007 21:59 · Личное сообщение · #1
На 2-х процессроном компе у каждого проца свой SN, показываемый по CPUID.
Как программно заставить прогу принудительно работать на каком-то конкретном проце?
Нужно это для того, чтобы определить у каждого проца SN.
| Сообщение посчитали полезным: |
|
Ранг: 160.1 (ветеран) Активность: 0.07↘0 Статус: Участник
|
Создано: 13 февраля 2007 22:32 · Личное сообщение · #2
SetProcessAffinityMask
| Сообщение посчитали полезным: |
Ранг: 63.1 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 13 февраля 2007 23:44 · Личное сообщение · #3
SetProcessAffinityMask имеет другое назначение.
Вцелом принудить прогу работать на конкретном проце можно только посредством NativeAPI, тк распределение процессорного времени зарыто глубоко в ядре
| Сообщение посчитали полезным: |
Ранг: 88.3 (постоянный), 3thx Активность: 0.04↘0 Статус: Участник
|
Создано: 14 февраля 2007 00:05 · Личное сообщение · #4
может быть SetThreadIdealProcessor? и смотреть по возвращаемому значению...
| Сообщение посчитали полезным: |
Ранг: 200.3 (наставник) Активность: 0.09↘0 Статус: Участник
|
Создано: 14 февраля 2007 03:49 · Личное сообщение · #5
HANDLE threadHandle = GetCurrentThread();
SetThreadIdealProcessor(threadHandle, 1);
(с)
----- Само плывет в pуки только то, что не тонет. | Сообщение посчитали полезным: |
Ранг: 163.7 (ветеран) Активность: 0.07↘0 Статус: Участник
|
Создано: 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.09↘0 Статус: Участник
|
Создано: 14 февраля 2007 17:07 · Личное сообщение · #7
По-моему лучше в программе вызвать два треда, чтоб каждый отработал на разном процессоре, чем запускать процессы ?
----- Само плывет в pуки только то, что не тонет. | Сообщение посчитали полезным: |
Ранг: 163.7 (ветеран) Активность: 0.07↘0 Статус: Участник
|
Создано: 15 февраля 2007 15:30 · Поправил: S_T_A_S_ · Личное сообщение · #8
Эти 2 треда могут быть выполнены на одном ядре. Особенно, если вызвать SetProcessAffinityMask Создавать лишние просессы не нужно.
| Сообщение посчитали полезным: |
Ранг: 218.9 (наставник), 42thx Активность: 0.16↘0 Статус: Участник dotnet
|
Создано: 15 февраля 2007 16:50 · Личное сообщение · #9
мухохо вот ту то и облажались протокреатеры
----- have a nice day | Сообщение посчитали полезным: |
Ранг: 47.7 (посетитель), 17thx Активность: 0.09↘0 Статус: Участник
|
Создано: 08 ноября 2011 16:10 · Личное сообщение · #10
S_T_A_S_Аффинитет и есть номер камня. Сделайте цикл из SetProcessAffinityMask() и прочитайте на каждой итерации ApicId через CPUID - это и есть номер процессора текущего.
| Сообщение посчитали полезным: |