Войти
ПрограммированиеФорумОбщее

QueryPerformanceCounter и многоядерность (8 стр)

Страницы: 13 4 5 6 7 8
#105
10:32, 8 окт. 2010

arabesc
Ну я могу точно также сказать - где цифры что нагрузка не увеличивается?


#106
10:42, 8 окт. 2010

KpeHDeJIb
> Ну я могу точно также сказать - где цифры что нагрузка не увеличивается?
думаю, эти разговоры о снижении производительности от увеличения частоты переключения потоков имеют 10-летнюю давность и относятся к совсем другому железу
сейчас я рассуждаю следующим образом
пусть квант времени работы потока равен 10мс, значит на 1-м ядре за 1с может быть 100 переключений контекста потоков
на 2-х ядрах, соответственно, будет 200 переключений
а реально вижу, что их больше 12'000
это значит, что во время кванта работы каждого потока происходит порядка 60 внутренних переключений контекста
мы увеличиваем точность таймера до 1мс и ожидаем увеличения частоты переключений контекста потоков в 10 раз
кстати, это надо ещё подтвердить экспериментом
но поскольку квант времени работы потока сократился в 10 раз, в 10 раз уменьшится и количество внутренних переключений контекста, т.е. с 60 оно упадёт до 6
таким образом, общее количество переключений останется примерно на том же исходном уровне
почему тогда должна снизиться производительность?

#107
11:02, 8 окт. 2010

Executor
> Причём тут на сколько ядер лечь? Как связано это с таймером?
Прямо связано.
> Задача проста, посадить таймер на одно ядро красиво и правильно, всё...
У каждого ядра свой таймер, не? Ты либо сядешь на одно ядро, либо будешь использовать оба. Прогресс как бы намекает нам, что второй вариант предпочтительнее. Всякая дурь с попытками посадить таймер отдельно на ядро, а главный поток пусть плавает вам потом такими косяками вылезет, что мало не покажется. Да и решение от индуса, если честно. Графику и физику уже можно садить на разные ядра с разными таймерами, нафига ты за одно ядро цепляешься?

#108
11:08, 8 окт. 2010

Мизраэль
Ты о чёмто своём...

#109
11:24, 8 окт. 2010

arabesc
> за что вы так timeGetTime не любите?
чем это хуже clock() ? вызов clock() меньше по времени чем timeGetTime().

#110
11:25, 8 окт. 2010

timeBeginPeriod никак не влияет на квантование времени в системе. Это малтимедийный таймер, он не используется для основных нужд windows. Вот если ускорить системный таймер, это может и повлиять, но официальных способов его ускорить нет. Обычно он тикает по 15-16ms за раз.

Уменьшение промежутка timeBeginPeriod приводит к уменьшению точности его работы. Если нечто запретило прерывание и за это время успело два раза тикнуть, тики пропадают.

#111
11:28, 8 окт. 2010

Executor
> Ты о чёмто своём...
твоё дело

#112
11:28, 8 окт. 2010

Andrey
> чем это хуже clock() ? вызов clock() меньше по времени чем timeGetTime().
clock - системный таймер, тикает по 15ms
timeGetTime можно настроить так, чтобы он по 1ms тикал. Чаще - не выйдет.
Если нужно замерять еще меньшие промежутки - годится только QPC

#113
11:28, 8 окт. 2010

arabesc
> да и вообще, в идеале для игры количество собственных рабочих потоков равно
> количеству ядер, остальные спят, никуда переключаться часто не надо
+1

#114
11:57, 8 окт. 2010

timeBeginPeriod судя докам влияет и на Sleep

#115
12:08, 8 окт. 2010

Есть еще на чипсете таймер с микросекундным разрешением, QPC тоже может его опрашивать только надо явно ему это указать - /usepmtimer в Boot.ini.
Именно так и поступает AMD Dual Core optimizer, просто отключает использование счетчика тактов процессора у QPC)))

Прошло более 5 лет
#116
20:47, 18 ноя. 2015

Zab
> timeBeginPeriod никак не влияет на квантование времени в системе.

Влияет непосредственным образом, после вызова timeBeginPeriod(1), квант времени на пререключение потоков становится 1 мс. Это единственный способ, который мне известен позволяющий добиться минимального времени пробуждения потока по событию. После этого вызова поток действительно просыпается не позже чем через 0.5-1 мс после события. Без него задержки намного больше (уже не помню точные значения, чтото порядка 5-10 мс).

Как негативный эффект, из-за более частого переключения контекста потоков, производительность с timeBeginPeriod(1) незначительно снижается, но зато дает возможность максимально быстро реагировать на события.

#117
21:05, 18 ноя. 2015

Барбос

Дарю тебе мифриловую лопату.

#118
22:27, 18 ноя. 2015

Ghost2
> Дарю тебе мифриловую лопату.
Чушь.

#119
23:11, 18 ноя. 2015

Саша123
> Чушь.
Вот именно, лопаты дают только золотые :)

Страницы: 13 4 5 6 7 8
ПрограммированиеФорумОбщее

Тема в архиве.