Узнать процессорное время из MS-DOS приложения

Тема в разделе "WASM.BEGINNERS", создана пользователем OioVologda, 20 мар 2007.

  1. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    P4 3.06 ГГц выдает 3077.60 МГц - да вроде совпадает
    а остальные как?

    и вообще, как QueryPerformanceFrequency узнает частоту TSC? Меряет? Или откуда-то читает?

    ps: кстати, там еще какой-то RDPMC есть..
     
  2. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Гы :)
    Уже точность до 100мс скостили :)
    Тогда читай дворд по адресу 0:46Ch - получиш число тиков.
    Частота - 18.2 Гц (~55ms).
    Потом считаеш разность и все дела.

    А вообще можно объяснить подробней суть такого изврата - мерять время выполнения DOS приложения под Win?
    Приложение DOS, так и запускай его под DOS.
    А там rdtsc в руки и получиш суперточность.
     
  3. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    Nouzui
    Вот, нашел ту статью: hxxp://www.insidepro.com/kk/030/030r.shtml
    В ней есть ответы на эти вопросы, в разделе "Разность таймеров".
     
  4. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    cppasm
    Скоро ДОС будет такой же редкостью, как и 5-дюймовый дисковод :)
     
  5. OioVologda

    OioVologda New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2006
    Сообщения:
    91
    Студенты до сих пор учатся прогать только на Turbo Pascal
     
  6. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    crypto
    Ну почему же. DosBOX есть, можно, кстати, проверить, как он эмулирует rdtsc. Есть подозрение, что она вернет число выполненных DosBOX'ом инструкций ;)
     
  7. OioVologda

    OioVologda New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2006
    Сообщения:
    91
    Вот еще вопрос? разве из MS-DOS можно вызвать QueryPerformanceFrequency, или может как нибудь преобразовать значение, полученное из RDTSC, чтобы получить значение в миллисекундах?
     
  8. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    все еще хуже, чем я думал )

    сделаешь пересчет в win32, или так нельзя? вообще, судя по статье, QueryPerformanceFrequency не обязательно вернет частоту TSC
    можно померить прямо в досе, в общем, придумаешь что-нибудь, все равно препод разбирается в этом еще меньше ;)
     
  9. OioVologda

    OioVologda New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2006
    Сообщения:
    91
    Прочитал статью, как то даже обидно стало за все их баги. Неужели у них не хватает ума сделать нормальный таймер с высокой точностью?
     
  10. OioVologda

    OioVologda New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2006
    Сообщения:
    91
    Ты просто препода не знаешь.
     
  11. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    у них у кого? )
    это проблема не микрософт, а железа, на котором нет точных часов
     
  12. OioVologda

    OioVologda New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2006
    Сообщения:
    91
    Nouzui
    А я про производителей железа и говорю...
     
  13. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    с другой стороны, программные задержки сожрут сверхвысокую точность )
    вообще, 100 нс даже сейчас - это специализированная архитектура
     
  14. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    А нельза просто по таймеру посмотреть, или точности не хватит? В таком случае смерить тактовую частоту по тому же таймеру и мерить по ней. Естественно надо всё делать в реальном режиме.
     
  15. OioVologda

    OioVologda New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2006
    Сообщения:
    91
    Vov4ick
    Блин, в реальном режиме простой замер времени от начала куска кода до его конца - и есть затраченное процессором время (предполагается что в куске кода - только обработка данных). Вся фишка как раз в том, чтобы это самое время под виндой надыбать
     
  16. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    OioVologda
    Извините, что вмешиваюсь, но поскольку программа ДОСовская, значит можно обращатся к портам, если использовать внешнее устройство с одним портом (Port A) для управлением внешнего таймера, [Port A]=1 таймер запускается [Port A]=0 таймер останавливается. Тут скорее всего должно быть программно-аппаратное решение
     
  17. OioVologda

    OioVologda New Member

    Публикаций:
    0
    Регистрация:
    21 ноя 2006
    Сообщения:
    91
    Это даст замерить чистое процессорное время? По-моему, если управлять таймером или какимлибо другим устройством, способным замерять промежутки времени, время, которое потратили другие процессы учтено не будет.
     
  18. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Попробуйте тогда посмотреть справочник по выньАпи - диспетчер задач же как-то время показывает.
    ЗЫ А с дискетки не судьба загрузиться и не парить мозги? Проги под ДОС должны работать в ДОС, а не в каком-то жалком тормозном NTVDM.