Ассемблирование циклов Visual C++ 6.0

Тема в разделе "WASM.A&O", создана пользователем bers, 18 окт 2005.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257






    От этого время не увеличивается, т.к. время, затраченное на все эти инструкции, в конце вычитается из времени теста и получается чистое время, затраченное только на выполнение тестируемого кода. Без времени на опрос счётчика. Именно для этого и вызывается rdtsc несколько раз. И поэтому и сохраняется время на опрос самого счётчика в переменных counterL/counterH.



    Так что 364 тика - это время, потраченное именно на тестируемый код, а не на опрос счётчика. Реальное время. Если вместо твоего цикла вставить пустую строку (убрать цикл между Init_Clock() и Stop_Clock()), то время будет 0 тиков ровно.



    xor eax,eax / cpuid вызываются тоже не от нехрен делать, а чтобы проц доделал свои делишки перед началом теста и был готов на все 100 :)

    edx может понадобиться, если тест затяжной и количество тиков перевалит за 4 Гигатика.



    Как правильно мерять, можно найти у А.Фога (утилитка wintest)
     
  2. bers

    bers New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2005
    Сообщения:
    139
    Адрес:
    Russia
    Это все понятно - для чего вызывается cpuid тоже известно, сам раньше так и делал; edx - заранее не нужен - меряем небольшой участок кода. Ну а так в общем согласен - все делаешь правильно -)).