Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как узнать частоту системного таймера?  (Прочитано 8273 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Daniloff
Помогающий

ru
Offline Offline

« : 27-12-2004 10:13 » 

Выполнял QueryPerformanceFrequency(). На одной машине получил 1193182, а на другой - 3579545. Написал на асме прогу под голый ДОС, которая оценивет время выполнения 10000 команд в тиках таймера. На первой машине время составило 22H, на второй - 70Н. Частота процессора первой - 350МГц, второй - 600МГц. Вывод: таймер тактируется разными частотами! Теперь вопрос: можно ли из ДОС определить его частоту? Мне просто необходимо вычислить более-менее точное время исполнения кусочка кода...
Записан
Allex63
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 27-12-2004 11:03 » 

В "новых" процессорах (PIII и дальше) есть слабодокументированная команда,
позволяющая узнать "текущий цикл CPU".
Проблемы с Timing'ом в итоге решаются достачочно просто. Как "узнать частоту процессора", так и "сколько микросекунд уходит на выполнение данного модуля".

//Delphi Example

function GetCPUCycle: Int64;
begin
   asm
    db  0fh,31h   // Опкод для команды rdtsc
    mov dword ptr Result,eax
    mov dword ptr Result[4],edx
   end;
end;
« Последнее редактирование: 20-12-2007 18:42 от Алексей1153++ » Записан

Мысли должны быть короткие и плоские.
Так их в ROM больше помещается.
Daniloff
Помогающий

ru
Offline Offline

« Ответ #2 : 27-12-2004 11:19 » 

сдается мне, число тиков этого счетчика, затраченное на выполнение некой инструкции - величина постоянная? это значит - для определения характеристик проца придется все равно обращаться к таймеру (ждать миллисекунду и подытоживать тики)?
Записан
Allex63
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 27-12-2004 11:55 » 

Hi, Daniloff!
Сдается верно, если не учитывать спецэффекты от использования кешей и прочей оптимизации, свойственной современным процессорам. А ждать лучше не миллисекунду, а что-то более осмысленное (0.1 sec, например), так как накладные расходы ОС на работу с таймерами довольно велики и вносят свою долю погрешностей.

Записан

Мысли должны быть короткие и плоские.
Так их в ROM больше помещается.
Daniloff
Помогающий

ru
Offline Offline

« Ответ #4 : 28-12-2004 11:44 » 

Наваял програмку для Win используя метод, предложенных Allex-ом, установил частоту таймера: 1194532 (≈1193180). Даже с натяжками на многозадачность 3 МГц не получается. Результат стабилен.
Измерял 50000 тиков таймера тиками процессора Улыбаюсь.  С частотой теперь все понятно, непонятно другое - почему AMD-350 совершает 10000 холостых циклов за 22h тика, а P3-600 - за 70h....
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines