Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.30;
Скачать: CL | DM;

Вниз

Определение частоты процессора   Найти похожие ветки 

 
Woolen   (2003-10-23 11:36) [0]

Не понимаю, как софверно можно более или менее точно определить частоту процессора. Я, так понимаю, изобрел велосипед и все уже давно решено гораздо более изящно, но, блин, не знаю, как. Обычно, чужие алгоритмы получают погрешность на 1 - 2 МГц, а у меня разброс на Celeron 2 ГГц: 1976 - 2005 МГц. Это же невозможно кому-то показывать! Делаю так:
1) считываю текущее значение - rdtsc
2) запускаю мультимедийный (для точности) таймер - у обычного погрешность 0.05 секунды
3) сбрасываю будеву переменную
4) запускаю бесконечный цикл, пока переменная не будет выставлена - выставляется в обработчике таймера
5) считываю второй раз rdtsc
6) вычитаю заначения, делю на 1000000 (чтоб мегагерцы получить) и возвращаю как результат функции
Вопрос: Скажите, кто знает, плз, почему такой большой разброс (ведь мультимедийный - по идее - самый точный таймер в системе), и как получить более точное значение, чтоб не было разброса в 30 МГц, а был хотя бы в 5?


 
Vlad Oshin ©   (2003-10-23 11:40) [1]

www.podgoretsky.com, Asm и Delphi

const
DelayTime = 500; // measure time in ms
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer;
s:string;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);

s:= Format("CPU speed: %f MHz", [TimerLo / (1000.0 * DelayTime)]);
Label1.Caption :=s;


 
Игорь Шевченко ©   (2003-10-23 11:52) [2]

В реестре она написана, частота


 
Woolen   (2003-10-23 12:30) [3]


> В реестре она написана, частота

А поточнее можно? Спасибо


 
Vlad Oshin ©   (2003-10-23 12:46) [4]


> В реестре она написана, частота

да тут еще рядом много чего полезного лежит! Спасибо.


> Woolen (23.10.03 12:30) [3]

ProcessorNameString ищи или подобное


 
clickmaker ©   (2003-10-23 12:52) [5]

HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0

~MHz

Но это тока в НТ


 
Woolen   (2003-10-23 13:15) [6]


> HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0
>
> ~MHz
>
> Но это тока в НТ

погрешность такая же, как и измерение вышеуказанным способом, но измерение в 95, 98, Me должно еще работать, так что выбираю в пользу измерения. Спасибо большое всем, кто откликнулся


 
Anatoly Podgoretsky ©   (2003-10-23 13:23) [7]

1) считываю текущее значение - rdtsc
2) запускаю мультимедийный (для точности) таймер - у обычного погрешность 0.05 секунды
3) сбрасываю будеву переменную

Ты в измерения добавил еще и 2/3, надо 2, 3, 1

Ну и конечно приоритеты.


 
Woolen   (2003-10-23 13:55) [8]


> 1) считываю текущее значение - rdtsc
> 2) запускаю мультимедийный (для точности) таймер - у обычного
> погрешность 0.05 секунды
> 3) сбрасываю будеву переменную
>
> Ты в измерения добавил еще и 2/3, надо 2, 3, 1
>
> Ну и конечно приоритеты.

Спасибо



Страницы: 1 вся ветка

Текущий архив: 2003.12.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
3-99463
Vertigo
2003-12-05 12:06
2003.12.30
Поиск базы InterBase в локалке


1-99616
g-l-u-k
2003-12-16 21:48
2003.12.30
Последние файлы


14-99726
Сатир
2003-12-08 18:15
2003.12.30
subj


3-99491
md
2003-12-04 16:42
2003.12.30
Фон в DBGrid


14-99727
chs2r
2003-12-08 16:27
2003.12.30
Что такое судьба? Мои мысли...