узнать текущую скорость проца

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by t04, 21 Feb 2009.

  1. t04

    t04 Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    137
    Likes Received:
    40
    Reputations:
    8
    На ноутбуке частота проца изменятеся в зависимости от нагруженности проца. Нужно узнать текущую частоту а не максимальную. Все что нашел в инете показывает максимальную частоту или по максимуму загружает проц в момент измерения частоты что ведет к увеличению частоты проца на максимум.

    Пжста оч желательно на Delphi.
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    А чем тебе не подходит код?
    Code:
    function GetCPUSpeed: double;
    const
      DelayTime = 500; // время измерения в милисекундах
    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;
    
    Код вычисляет производительность проца по кол-ву тактов которое делает проц за определенный момент времяни. Если частота будет занижена, то и тактов он сделает меньше, что сразу будет заметно.
    Код настроен так что считается кол-во тактов за 0,5 секунды
     
  3. t04

    t04 Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    137
    Likes Received:
    40
    Reputations:
    8
    При параллельном запуске этого кода и проги CPU-Z данные о частоту разные, CPU-Z показывает 798 MHz и временами она поднимается до 1597 MHz а код показывает в диапозоне 1595-1598 (повесил на таймер и интервалом 500 мсек).

    подозреваю что в момент замера частоты проц загружается на максимум и мгновенно возвращается на половину частоты, поэтому CPU-Z не фиксирует постоянной частоты 159х Мгц.