![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как узнать частоту и загрузку(%) процессора [D7, WinXP]
влад © (2004-11-15 22:59:00)как узнать частоту и загрузку в% процессора, если можно подробно
Jeer (2004-11-17 10:43:00) [1]http://www.digitlife.ru/cpu/msi-dot-gbt-cia-review.shtml
А вот здесь для интересующихся "где собака порылась".
На мой взгляд, увеличение частоты FSB при увеличении температуры процессора вообще-то некорректно, т.к. это положительная обратная связь в терминах системы управления.
Поэтому никаких DOT и CIA даже не буду включать и другим не советую:))
Jeer (2004-11-17 10:11:00) [2]Это известно, но если нужен ПК как управляющая система, то надо и походить к нему соответственно.
Кроме того не все материнки нормально выдерживают все заложенные в них уровни DOT.
А лично я отношусь к любому overcloking скептически.
Надежность важнее:))
VMcL (2004-11-16 21:25:00) [3]>> Jeer © (16.11.04 18:51) [8]
Как я недавно узнал, есть такая злостная веЗЧь: DOT, которая кладет на лопатки QueryPerfomanceCounter и QueryPerfomanceFrequency.
http://www.delphimaster.ru/cgi-bin/forum.pl?n=3&id=1099843607
grom (2004-11-16 20:15:00) [4]CPU Usage выводит загрузку процессора в %.
http://micsoft.narod.ru/bonus.html
Jeer (2004-11-16 18:51:00) [5]Действительно, давно известно:))
Но здесь вылезает небольшая систематическая погрешность.
Скажем на 2020 MHz показывает 2023 MHz.
Лучшие результаты получаются с использованием rdtsc, QueryPerfomanceCounter и QueryPerfomanceFrequency.
А переключать приоритет нити конечно же надо.
grigory (2004-11-16 18:36:00) [6]unit UCPUSpd;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, Buttons;
type
TFormCPUSpeed = class(TForm)
PageControl: TPageControl;
BitBtnStart: TBitBtn;
BitBtnStop: TBitBtn;
TabSheet: TTabSheet;
LabelCPUSpeed: TLabel;
LabelInfo: TLabel;
LabelWeb: TLabel;
procedure BitBtnStartClick(Sender: TObject);
procedure BitBtnStopClick(Sender: TObject);
private
{ Private declarations }
Stop: Boolean;
public
{ Public declarations }
end;
var
FormCPUSpeed: TFormCPUSpeed;
implementation
{$R *.DFM}
function GetCPUSpeed: Double;
const
DelayTime = 500; // measure time in ms
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer;
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);
Result := TimerLo / (1000.0 * DelayTime);
end;
procedure TFormCPUSpeed.BitBtnStartClick(Sender: TObject);
begin
BitBtnStart.Enabled := False;
BitBtnStop.Enabled := True;
Stop := False;
while not Stop do
begin
LabelCPUSpeed.Caption := Format('CPU speed: %f MHz', [GetCPUSpeed]);
Application.ProcessMessages;
end;
BitBtnStart.Enabled := True;
BitBtnStop.Enabled := False;
end;
Jeer (2004-11-16 18:05:00) [7]clickmaker © (16.11.04 12:02) [5]
Это много:))
При правильном измерении частоты на интервале 200 ms разброс не превышает долей MHz
clickmaker (2004-11-16 12:02:00) [8]
> [4] Игорь Шевченко © (16.11.04 11:58)
> Ты проверял свой код при разной степени загрузки процессора
> ?
Да. Разброс +-20 Мгц
Игорь Шевченко (2004-11-16 11:58:00) [9]clickmaker © (16.11.04 10:59) [3]
А в заголовке написано - WinXP.
Ты проверял свой код при разной степени загрузки процессора ?
clickmaker (2004-11-16 10:59:00) [10]
> влад (15.11.04 22:59)
> как узнать частоту
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0\~MHz
этот ключик есть только в NT-системах, а в общем случае см. код (на паскаль сам переводи)
_inline unsigned __int64 GetCycleCount(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
int getCPUSpeed(void)
{
unsigned __int64 m_startcycle;
unsigned __int64 m_res;
unsigned __int64 m_overhead;
unsigned cpuspeed10;
m_overhead = 0;
m_startcycle = GetCycleCount();
Sleep(1000);
m_res = GetCycleCount()-m_startcycle-m_overhead;
cpuspeed10 = (unsigned)(m_res/100000);
cpuspeed10 = cpuspeed10/10;
return cpuspeed10;
}
Jeer (2004-11-16 10:56:00) [11]Частоту через QueryPerformanceFrequency. (tick per sec)
Игорь Шевченко (2004-11-15 23:05:00) [12]Частоту из реестра
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0\~MHz
Загрузку - искать готовый код в интернете, их много