· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ASSEMBLER —› CPU Speed [cybult] - sux

Посл.отвђт Сообщен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