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

Delphi: Точный таймер (Win API) (комментарии)

Страницы: 1 2 3 4 5 6 Следующая »
#0
7:15, 24 апр. 2020

Delphi: Точный таймер (Win API) (комментарии)

Это сообщение сгенерировано автоматически.
#1
7:15, 24 апр. 2020

Ну во первых это не класс, а запись.
А во вторых: есть, что нибудь с rdtsc ?

#2
9:06, 24 апр. 2020

Автор не перестает удивлять, штампуя статейки для первоклашек )

#3
(Правка: 9:25) 9:08, 24 апр. 2020

Пользуюсь тоже таким таймером. Но для начала попробуй своим таймером замерить скорость со вставками и без :)
Мне кажется экономия на стекфрейме тут лишняя, сама функция вроде бы в syscall улетает, а там накладные расходы в десятки раз больше чем стек. Особенно для queryfrequency ассемблер - мёртвому припарка.

Это gettickcount шустрый, тупо переменную читает. Но ее своевременное обновление ядром не гарантировано.

#4
9:11, 24 апр. 2020

nes
Ну-ну, а на гд все древние бородатые программисты, писавшие ещё на Спектрум. В машинных кодах без иде :>

#5
9:27, 24 апр. 2020

Ну, не спектрум, и не совсем в кодах... Изображение

+ Показать

#6
9:30, 24 апр. 2020

Cheb
Норм, выкладывай целиком)

#7
(Правка: 9:53) 9:50, 24 апр. 2020

Все это ассемблерное кунг-фу не нужно нихрена, потому что есть готовое API в виде QPF/QPC и clock_gettime.

PS. И более того, в юзерспейсе использование подобных выкрутасов - это не портируемо даже внутри одной ОС.

#8
9:52, 24 апр. 2020

Всё не выкладу, оно вшито в движок, но что могу - отрежу.

+ Показать
#9
(Правка: 10:00) 9:57, 24 апр. 2020

>, потому что есть готовое API в виде QPF/QPC
Вызов которого на порядок медленнее, чем RDTSC, даже со всеми свистелками и перделками, что я ея обвесил.
Кроме того, они дают разрешение *ниже*, чем RDTSC. Я стабильно наблюдаю, как они берут тот же TSC и делят его на 1000.0 - полагаю, для совместимости, чтобы старый софт не подавился большими значениями.
По крайней мере, QueryPerformanceFrequency(), или как её там, в Windows 7 возвращает частоту TSC, делённую на 1000. На нескольких процах пробовал.
То есть, получаем то же самое, только дороже и искуственно огрублённое с потерей разрядности.

TL;DR TSC даёт реально в наносекундах и сам вызов занимает наносекунд сорок. QPC даёт в микросекундах и вызов занимает... Полторы сотни наносекунд, ЕМНИП.

#10
10:03, 24 апр. 2020

Mira

> Мне кажется экономия на стекфрейме тут лишняя
Какая нафиг экономия?Миллисекунда разрешения этого «таймера» - вечность относительно количества тактов, которое успевает натикать тот самый счётчик, который опрашивается в статье.

#11
10:11, 24 апр. 2020

Ghost2
дак вот.
я просто думаю какой бы счетчик для просчета движения в сервере сделать.
например известна стартовая позиция персонажа, его скорость и направление. надо точно просчитать его текущее положение на данный момент.
часто дергать QPC слишком накладно.
GTC - при сильной загрузке лажает.
магия с RDTSC - еще не пробовал, но говорят могут быть нюансы тоже.

#12
10:16, 24 апр. 2020

Cheb

> Вызов которого на порядок медленнее, чем RDTSC
Какая прости разница, быстрый это вызов или нет?

> Кроме того, они дают разрешение *ниже*, чем RDTSC
RDTSC даёт тебе попугаи. Те люди, которые пишут операционные системы под 350 архитектур уже озаботились тем, чтобы хоть как-то этих попугаев можно было перевести в секунды.

> в Windows 7 возвращает частоту TSC, делённую на 1000
Она что угодно может возвращать. От частоты ФАПЧ клока процессора, через частоту PIT, HPET, APIC и до 32768 Гц в RTC.

#13
10:29, 24 апр. 2020

>RDTSC даёт тебе попугаи.
Меня трудностями не испугаешь.

>уже озаботились тем, чтобы хоть как-то этих попугаев можно было перевести в секунды.
"как-то" - конкретно, через анус.

>Она что угодно может возвращать.
Вот именно. А TSC - гарантированно гигагерцы, в весьма узких пределах на современных (Не старше 10 лет) цпу. От 2.5 до 4.5 миллиардов попугаев в секунду. Неизменность частоты гарантируется: последние, кто не поддерживал TSC invariancy, были ранние четвёртые пни.

#14
10:32, 24 апр. 2020

З.Ы. От таймера часто требуется померить "интервал от и до". В подобных случаях, релятивистский подход, как у меня, без перевода в секунды и обратно - даёт наименьшие потери точности. И RDTSC тут - самый оптимальный. Замучила паранойя - делай fallback версию на QPC с переключением на лету.

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумОбщее