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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
7-77651
SPeller
2002-03-26 03:15
2002.06.24
CPU


1-77456
RDA
2002-06-11 15:41
2002.06.24
Указатели


3-77319
Sam
2002-05-31 10:35
2002.06.24
2 вопроса


4-77701
ERW
2002-04-23 17:16
2002.06.24
Скроллинг в Memo


14-77583
Незарегистривов
2002-05-21 03:18
2002.06.24
О цвете