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

Timer survey

Страницы: 1 2 3 Следующая »
#0
21:19, 10 июля 2009

Написал простой тест системных таймеров. Протестируйте, кому не сложно. В первую очередь интересует работа на AMD системах.
Требуется: output и минимальная информация о системе (NT/kernel version), желательно также модель чипсета.
Пример (Win7 RC, Intel P45)

                  Resolution      Step              Call cost
GetTickCount():   1000Hz (1ms)    62Hz (16ms)       99 ticks
GetTickCount():   1000Hz (1ms)    62Hz (16ms)       63 ticks
GetTickCount():   1000Hz (1ms)    66Hz (15ms)       72 ticks
timeGetTime():    1000Hz (1ms)    1000Hz (1ms)      99 ticks
timeGetTime():    1000Hz (1ms)    1000Hz (1ms)      99 ticks
timeGetTime():    1000Hz (1ms)    1000Hz (1ms)      72 ticks
timeBeginPeriod(1)
GetTickCount():   1000Hz (1ms)    62Hz (16ms)       63 ticks
GetTickCount():   1000Hz (1ms)    66Hz (15ms)       63 ticks
GetTickCount():   1000Hz (1ms)    62Hz (16ms)       63 ticks
timeGetTime():    1000Hz (1ms)    1000Hz (1ms)      99 ticks
timeGetTime():    1000Hz (1ms)    1000Hz (1ms)      117 ticks
timeGetTime():    1000Hz (1ms)    1000Hz (1ms)      117 ticks
timeEndPeriod(1)
QPC:    2935175Hz (0.341usec)  1467587Hz (0.681usec)  2115 ticks
QPC:    2935175Hz (0.341usec)  1467587Hz (0.681usec)  1926 ticks
QPC:    2935175Hz (0.341usec)  1467587Hz (0.681usec)  2016 ticks

Windows версия: Timer test (Windows version), код
Linux версия: Timer test (POSIX version), код


#1
21:31, 10 июля 2009

Название ОС:                      Microsoft Windows XP Professional
Версия ОС:                        5.1.2600 Service Pack 2 сборка 2600
Изготовитель системы:            MICRO-STAR INTERNATIONAL CO.,LTD
Модель системы:                  MS-7519
Тип системы:                      X86-based PC
Процессор(ы):                    Число процессоров - 2.
                                  [01]: x86 Family 6 Model 23 Stepping 10 GenuineIntel ~3174 МГц
                                  [02]: x86 Family 6 Model 23 Stepping 10 GenuineIntel ~3174 МГц

-- Timer measurement --
                Resolution              Step                    Call cost
GetTickCount(): 1000Hz (1ms)            62Hz (16ms)            57 ticks
GetTickCount(): 1000Hz (1ms)            66Hz (15ms)            57 ticks
GetTickCount(): 1000Hz (1ms)            62Hz (16ms)            47 ticks
timeGetTime():  1000Hz (1ms)            62Hz (16ms)            1529 ticks
timeGetTime():  1000Hz (1ms)            62Hz (16ms)            41933 ticks
timeGetTime():  1000Hz (1ms)            66Hz (15ms)            95 ticks
timeBeginPeriod(1)
GetTickCount(): 1000Hz (1ms)            66Hz (15ms)            57 ticks
GetTickCount(): 1000Hz (1ms)            62Hz (16ms)            57 ticks
GetTickCount(): 1000Hz (1ms)            62Hz (16ms)            57 ticks
timeGetTime():  1000Hz (1ms)            1000Hz (1ms)            95 ticks
timeGetTime():  1000Hz (1ms)            1000Hz (1ms)            104 ticks
timeGetTime():  1000Hz (1ms)            1000Hz (1ms)            66 ticks
timeEndPeriod(1)
QPC:            3174580000Hz (0.000usec)        6961798Hz (0.144usec)  484 ticks
QPC:            3174580000Hz (0.000usec)        7264485Hz (0.138usec)  456 ticks
QPC:            3174580000Hz (0.000usec)        7417242Hz (0.135usec)  456 ticks

#2
21:41, 10 июля 2009

Название ОС:                      Microsoft Windows XP Professional Версия 2002 Service Pack 3                     
Изготовитель системы:      Intel GMS 915
Модель системы:                Intel GMS 915
Тип системы:                      X86-based PC
Процессор:                    Intel(R) Celeron(R) M ~1504 МГц
                           
GetTickCount(): 1000Hz (1ms)            66Hz (15ms)            64 ticks
GetTickCount(): 1000Hz (1ms)            62Hz (16ms)            389 ticks
GetTickCount(): 1000Hz (1ms)            62Hz (16ms)            250 ticks
timeGetTime():  1000Hz (1ms)            1000Hz (1ms)            119 ticks
timeGetTime():  1000Hz (1ms)            1000Hz (1ms)            119 ticks
timeGetTime():  1000Hz (1ms)            1000Hz (1ms)            112 ticks
timeBeginPeriod(1)
GetTickCount(): 1000Hz (1ms)            66Hz (15ms)            64 ticks
GetTickCount(): 1000Hz (1ms)            62Hz (16ms)            70 ticks
GetTickCount(): 1000Hz (1ms)            66Hz (15ms)            70 ticks
timeGetTime():  1000Hz (1ms)            1000Hz (1ms)            118 ticks
timeGetTime():  1000Hz (1ms)            1000Hz (1ms)            106 ticks
timeGetTime():  1000Hz (1ms)            1000Hz (1ms)            106 ticks
timeEndPeriod(1)
QPC:            3579545Hz (0.279usec)  596590Hz (1.676usec)    2734 ticks
QPC:            3579545Hz (0.279usec)  511363Hz (1.956usec)    2929 ticks
QPC:            3579545Hz (0.279usec)  596590Hz (1.676usec)    2794 ticks

#3
2:09, 11 июля 2009

openSuSe 11.1
едро 2.6.27
Intel DualCore 2.5 GHz
Intel P43

cheb@host-20-10:~/downloads> ./timer_tes.timer_test
-- Timer measurement --
                Resolution            Step                    Call cost
gettimeofday():  1MHz (1usec)          1000000Hz (1usec)      487 ticks
gettimeofday():  1MHz (1usec)          1000000Hz (1usec)      487 ticks
gettimeofday():  1MHz (1usec)          1000000Hz (1usec)      475 ticks
clock_gettime(): 1000000000Hz (0.001usec)      2288329Hz (0.437usec)  813 ticks
clock_gettime(): 1000000000Hz (0.001usec)      3246753Hz (0.308usec)  812 ticks
clock_gettime(): 1000000000Hz (0.001usec)      3257328Hz (0.307usec)  800 ticks

#4
11:24, 11 июля 2009

WinXP SP3(5.1.2600 Service Pack 3 Сборка 2600), AMD64 Athlon x2 5000(2.6GHz), NVIDIA nForce4

-- Timer measurement --
    Resolution    Step      Call cost
GetTickCount():  1000Hz (1ms)    62Hz (16ms)    122 ticks
GetTickCount():  1000Hz (1ms)    66Hz (15ms)    279 ticks
GetTickCount():  1000Hz (1ms)    62Hz (16ms)    92 ticks
timeGetTime():          1000Hz (1ms)    1000Hz (1ms)    122 ticks
timeGetTime():          1000Hz (1ms)    1000Hz (1ms)    123 ticks
timeGetTime():          1000Hz (1ms)    1000Hz (1ms)    123 ticks
timeBeginPeriod(1)
GetTickCount():  1000Hz (1ms)    62Hz (16ms)    33 ticks
GetTickCount():  1000Hz (1ms)    66Hz (15ms)    31 ticks
GetTickCount():  1000Hz (1ms)    62Hz (16ms)    33 ticks
timeGetTime():          1000Hz (1ms)    1000Hz (1ms)    122 ticks
timeGetTime():  1000Hz (1ms)    1000Hz (1ms)    108 ticks
timeGetTime():          1000Hz (1ms)    1000Hz (1ms)    108 ticks
timeEndPeriod(1)
QPC:    3579545Hz (0.279usec)  596590Hz (1.676usec)  3952 ticks
QPC:    3579545Hz (0.279usec)  715909Hz (1.397usec)  3983 ticks
QPC:    3579545Hz (0.279usec)  715909Hz (1.397usec)  3889 ticks

#5
14:02, 11 июля 2009

minuz
Dual-Core Optimizer установлен?

#6
14:48, 11 июля 2009

Yamazaru
да установлен

#7
18:45, 11 июля 2009

Yamazaru
результаты и система аналогичны minuz, для полноты картины не мешало бы добавить в таблицу RDTSC, и наличие(или отсутствие) ключа /USEPMTIMER в boot.ini(от которого зависит QPC).

#8
20:12, 11 июля 2009

Tonal
По результатам и так видно если в QPC используется TSC, ACPI, PIT или HPET )

#9
2:30, 12 июля 2009
Linux athlon 2.6.30-gentoo-r1 #1 SMP Sun Jun 28 15:35:53 MSD 2009 x86_64 AMD Athlon(tm) 64 X2 Dual Core Processor 4200+ AuthenticAMD GNU/Linux
-- Timer measurement --
                 Resolution             Step                    Call cost
gettimeofday():  1MHz (1usec)           500000Hz (2usec)        3530 ticks
gettimeofday():  1MHz (1usec)           1000000Hz (1usec)       3384 ticks
gettimeofday():  1MHz (1usec)           500000Hz (2usec)        3358 ticks
clock_gettime(): 1000000000Hz (0.001usec)       596658Hz (1.676usec)    3700 ticks
clock_gettime(): 1000000000Hz (0.001usec)       596302Hz (1.677usec)    3711 ticks
clock_gettime(): 1000000000Hz (0.001usec)       596302Hz (1.677usec)    3757 ticks

Результаты clock_gettime --- некорректны. Какой именно clock_gettime используется? Лочится ли процесс на cpu?

#10
12:18, 12 июля 2009

nbkolchin
А в чём они не корректны, вроде бы всё верно. Используется стандартная POSIX функция из librt, процесс не лочится - шанс что из трёх попыток все три будут выполнены на разных hardware threads минимальный.

#11
18:25, 12 июля 2009

Yamazaru
> Используется стандартная POSIX функция из librt

У этой функции первым параметром указывается тип часов: CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_MONOTONIC_RAW, CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID. Это всё разные часики. Какой из них?

Если используется CLOCK_REALTIME --- это gettimeofday с другим форматом вызова.

> процесс не лочится - шанс что из трёх попыток все три будут выполнены на разных hardware threads минимальный.

Это некорректное утверждение. Текущему шедулеру --- пофигу на каком ядре выполнять процесс. Но в данном случае --- это не оно. Разброс был бы больше.

#12
19:49, 12 июля 2009

nbkolchin
Справа от ссылки есть исходный код. Используется CLOCK_REALTIME, потому как он всегда присутствует, а PROCESS_CPUTIME и THREAD_CPUTIME полезнее для профайлинга, чем для измерения FPS.
Вроде в последних версиях kernel'а gettimeofday() это уже wrapper над clock_gettime() )
Кажется с 2.6.20 TSC не используется как time source, если у него есть проблемы с синхронизацией или energy states. Так что scheduler может помешать только если context switch произойдёт в цикле измерения.
Не вижу разброса в приведённом тобой результате, лишь минимальные погрешности, хотя clock_gettime() похоже использует TSC. Видимо потому что процессор поддерживает rdtscp.

#13
20:12, 12 июля 2009

Yamazaru
> Справа от ссылки есть исходный код.

Сорри, я его не заметил.

Вопрос снят. Ошибка была у меня. В том месте где я думал, что используется MONOTONIC --- использовался rdtscp. А на машине, где я запускал твой тест rdtscp --- нет.

#14
19:36, 13 июля 2009

up

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

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