Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как узнать частоту и загрузку(%) процессора [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

Загрузку - искать готовый код в интернете, их много


Наверх

Титульная страница Поиск, карта сайта Написать письмо