замер времени

Тема в разделе "WASM.ZEN", создана пользователем unkier, 17 мар 2009.

  1. unkier

    unkier New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2009
    Сообщения:
    3
    Периодически возникает необходимость регистрировать некие события (приход пакета по ETHERNET, приход байтика по rs-485… неважно) с привязкой ко времени. Раньше запускал таймер (hpet), считал миллисекунды и брал их, когда нужно. Если на такой таймер повесить выдачу наружу (дискретный сигнальчик, какой ни будь), то можно осциллографом, или чем ни будь посмотреть, что всё выдается более, менее похожим на правду (точно не скажу, но примерно +- четверть миллисекунды).

    Далее возникает необходимость мерить точнее. Вообще интересен вопрос, какую точность можно поиметь от персоналки. Мерить тиками. Всё хорошо, при условии что мы знаем частоту процессора точную, реальную и она не плавает в процессе работы. Как узнать частоту проца и не плавает ли она. QueryPerformanceFrequency в винде выдает разные значения каждый раз при перезагрузке, почему ? Как вообще эта функция реализована ? В linux в информации о процессоре (/proc/cpuinfo) тоже цифра разная каждый раз.

    Осильте кто ни будь мой поток сознания и ответьте на вопросы по мере нахождения в тексте, если возможно.

    Заранее благодарен.
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Зависит от системы. Выбирается наибыстрейший таймер. Если частота точно неизвестно то мереется. Если известна то вбивается фиксировнная.

    Излишне.

    Обычной PIC позволяет мерить до микросикунд.
    Значение счетчика можно считать из таймера или восе его перепрограммировать.

    В ряде процессорах RDSTC имеет фиксированную частоту "не зависящую" от частоты процессора. Поэтому порой виндовс берет ее в качестве QueryPerformanceFrequency.
    Фиксируетса частота RDSTC при загрузки компьютера. Так что при разных загрузках может быть разной и выбирается она соизмеримой с частотй процессора.

    Насчет точности хочу заметить что измерять мы можем очень маленькии временные промяжутки.
    Но относительная ошибка состовляет приерно 50 милионных.
     
  3. unkier

    unkier New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2009
    Сообщения:
    3
    наверно rdtsc имелось ввиду ?
    тоесть это не тики процессора а какие то попугаи ?

    всётаки почему разная ? всё динамическое управление частотой выключено. (всякие кул энд квает и тому подобное)
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    unkier
    Да вечно путаю.
    Зависит от модели процессора. В старых была равной частоте процессора и почти не изменялась. В другом ряде менялось изменялась вместе с частотой в зависимости от нагрузки. А в третьих уже разделили частота процессора меняется, а rdtsc остается фиксированной, но соизмеримой с частотой процессора.
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Все процессы в природе носят случайный характер.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    С помощью тск это не измеришь с необходимой точностью. Тск используется всегда в цикле, где множество итераций потом делятся на их число, чтобы найти среднее значение. Это напрмер для опередения скорости исполнения какойто процедуры. Но на порту длительность сигнала этим не измеришь, темболее исли поток данных быстрый, так как за малый промежуток времени всёравно счётчик будет прыгать, так у интел. Может гденибудь у амд иначе..
     
  7. unkier

    unkier New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2009
    Сообщения:
    3
    а чем можно ?

    может есть точные таймеры в виде платы например в pci-e ?