|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 26, 2002 03:05:38 Ну парень даёт !!! -------------------- rdtsc push eax push 1000 call Sleep rdtsc -------------------- Sleep - HAhahahahaha !!! А про эти то забыл ??? QueryPerformanceFrequency(&ulFreq); QueryPerformanceCounter(&ulTicks); Правильный соурс на C. Оптимизируите по надобности: int GetCPUSpeed(void) { /////////////////////////////////////////////////////////maxcode.com LARGE_INTEGER ulFreq, // No. ticks/s ( frequency). This is exactly 1 second interval ulTicks, // Curent value of ticks ulValue, // for calculation, how many tick is system (depend on instaled HW) able ulStartCounter, // start No. of processor counter ulEAX_EDX, // we need 64 bits value and it is stored in EAX,EDX registry ulResult; // calculate result of "measuring" //function retrieves the frequency of the high-resolution performance counter(HW not CPU) //it is number of ticks per second QueryPerformanceFrequency(&ulFreq); //current value of the performance counter QueryPerformanceCounter(&ulTicks); //calculate one sec interval //ONE SEC interval = start nuber of the ticks + # of ticks/s //loop ( do..while statement bellow) until actual # of ticks this number is <= then 1 sec ulValue.QuadPart = ulTicks.QuadPart + ulFreq.QuadPart; //(read time-stamp counter) instruction. //This asm instruction loads the high-order 32 bits of the register into EDX, and the low-order 32 bits into EAX. __asm RDTSC __asm mov ulEAX_EDX.LowPart, EAX __asm mov ulEAX_EDX.HighPart, EDX ulStartCounter.QuadPart = ulEAX_EDX.QuadPart; do { //just read actual HW counter QueryPerformanceCounter(&ulTicks); } while(ulTicks.QuadPart <= ulValue.QuadPart) ; //get actual number of processor ticks __asm RDTSC __asm mov ulEAX_EDX.LowPart, EAX __asm mov ulEAX_EDX.HighPart,EDX //calculate result from current processor ticks count ulResult.QuadPart = ulEAX_EDX.QuadPart - ulStartCounter.QuadPart; return (int)(ulResult.QuadPart / 1000000 + 1); ////////////////////////////////////////////////////maxcode.com //just copy this code if you want to use it... if you don't understand it there isn't much to it and //if you do then you don't have to know it any more so.... just copy the code in your app } |
|
|
Дата: Ноя 26, 2002 06:54:05 Ну парень даёт !!! Ну измеряет его программа плюс-минус 5MHz, зато проще пареной репы. Правильный соурс на C. А Ю шуэ? |
|
|
Дата: Ноя 26, 2002 11:32:10 Эта тема уже проходит раз третий, четвёртый.... Ещё раз замечаю, что функции QueryPerformanceFrequency(&ulFreq); QueryPerformanceCounter(&ulTicks); Не дают точного результата..., или дают с точностью 5000 тактов +/- У НТ есть ещё набор функций для этого но rdtsc для небольших участков кода (по времени) точнее |
|
|
Дата: Ноя 26, 2002 13:51:12 Кстати, а что это за парень? |
|
|
Дата: Ноя 26, 2002 14:06:22 · Поправил: Four-F Edmond: ...или дают с точностью 5000 тактов +/- Я так понимаю, что тут речь именно о тактовой частоте камня. http://zp.amsnet.pl/cdragan/assembly.html Тулза Cpuid с сорцами. Как она определяет спид я не смотрел, но на всех машинах где я ее тестил, точность была +-1MHz ;) |
|
|
Дата: Ноя 26, 2002 15:33:48 · Поправил: Vid0 Edmond: Кстати, а что это за парень? Посмотри "Последние исходники" на http://www.wasm.ru/: CPU Speed [cybult] Four-F: Тулза Cpuid с сорцами... Да, в Cpuid использована GetTickCount() и это тоже OK если не нужна большая точность, но не Sleep() всё же !!! P2M: Ну измеряет его программа плюс-минус 5MHz Исползуя Sleep() можно измерить и плюс-минус 50% при полной загрузке системы, а то и хуже ;) |
|
|
Дата: Ноя 27, 2002 04:10:07 Vid0:Исползуя Sleep() можно измерить и плюс-минус 50% Если очень постараться. Зачем запускать подобного рода тесты, если система занимается чем-то еще? |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.076 |