Форум: "Система";
Текущий архив: 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