Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.12.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
3-99502
Sour
2003-12-04 09:12
2003.12.30
Компоненты прямого доступа к IB FIBPlus


14-99776
RainKM
2003-12-05 22:01
2003.12.30
PS/2


14-99769
Knight
2003-12-05 23:11
2003.12.30
Какой максимальный объём данных...


1-99578
Anton.
2003-12-17 17:05
2003.12.30
Как в рич едит узнать позицию курсора?


14-99739
Kucher
2003-12-09 11:38
2003.12.30
Посоветуйте хорошее интерфейсное решение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский