Форум: "Система";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
ВнизCPU Найти похожие ветки
← →
SPeller (2002-03-26 03:15) [0]Как определить скорость проца ??
← →
VuDZ (2002-03-26 07:25) [1]
__declspec(naked)
__int64 GetCpuTick()
{ __asm {
rdtsc
ret
} }
int GetCpuFrequency ()
{
__int64 Frequency,
TimerCount1,
TimerCount2,
CpuCount1,
CpuCount2; if (!QueryPerformanceFrequency ((LARGE_INTEGER*) &Frequency)) return 0;
QueryPerformanceCounter ((LARGE_INTEGER*) &TimerCount1);
CpuCount1 = GetCpuTick ();
Sleep (500);
CpuCount2 = GetCpuTick ();
QueryPerformanceCounter ((LARGE_INTEGER*) &TimerCount2);
if (TimerCount1 == TimerCount2) return 0;
return (int) ((double) ((CpuCount2 - CpuCount1) * Frequency) /
(double) (TimerCount2 - TimerCount1));
}
← →
SPeller (2002-03-26 09:40) [2]А на паскале, я в си 0.
Если не сложно.
← →
Севостьянов Игорь (2002-03-26 12:44) [3]Есть у меня компонент CarbonSoft cxCpu2000
Сам не пробовал, но думаю рабочий - там много чего по процессорам
Не только скорость + поддержка современных процов
Могу выслать, спрашивай по мылу...вышлю (200 кил с доками)
Вот как они это делают, но для разных процов по разному
function GetCPUSpeed(ADelay: DWORD): Single;
var
t: DWORD;
mhi, mlo, nhi, nlo: LongInt;
t0, t1, chi, clo, shr32: Comp;
begin
{ This routine depends on the RTDSC instruction }
if (TestFeatureBitEx(SFS_TSC)) then begin
shr32 := 65536;
shr32 := shr32 * 65536;
t := GetTickCount;
while (t = GetTickCount) do begin end;
asm
DB 0FH
DB 031H
mov mhi, EDX
mov mlo, EAX
end;
while (GetTickCount < (t + ADelay)) do begin end;
asm
DB 0FH
DB 031H
mov nhi, EDX
mov nlo, EAX
end;
chi := mhi; if (mhi < 0) then chi := chi + shr32;
clo := mlo; if (mlo < 0) then clo := clo + shr32;
t0 := chi * shr32 + clo;
chi := nhi; if (nhi < 0) then chi := chi + shr32;
clo := nlo; if (nlo < 0) then clo := clo + shr32;
t1 := chi * shr32 + clo;
Result := ((t1 - t0) / (1E6 / (1000/ADelay)));
end else
Result := ERR_CPUIDNOTSUPPORTED;
end;
← →
Фэ (2002-03-26 21:38) [4]// Частота в MHz
function cpugettick:int64;
asm
dw 310Fh // rdtsc
end;
function cpuGetFreq: dword; stdcall; export;
var
i1,i2,t:int64;
pr:dword;
begin
pr := GetThreadPriority(GetCurrentThread );
SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL);
QueryPerformanceCounter( i1 );
t := cpugettick;
Sleep(SleepTime);
asm
dw 310Fh // rdtsc
sub eax, dword[t]
sbb edx, dword[t+4]
mov dword[t], eax
mov dword[t+4], edx
end;
QueryPerformanceCounter( i2 );
i2 := i2-i1;
QueryPerformanceFrequency( i1 );
i2 := i2*1000000 div i1;
Result := round(t/(i2));
SetThreadPriority(GetCurrentThread,pr);
end;
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c