Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Программирование -> Assembler -> Оптимизация для pentium процессора


22. СКОРОСТНЫЕ ИСПЫТАНИЯ
========================
У Pentium есть внутренний, 64 битный таймер, который может быть прочитан в
EDX:EAX при использовании инструкции RDTSC (чтение временной счетчик). Это
очень полезно для замера точного количества тактов, потребовавшихся на
исполнение части кода.

Нижеприведенная программа замеряет количество тактов, которое исполнялась
часть кода. Программа выполняет 10 раз, 10 раз сохраняя время ушедшее на
исполнение кода. Программа может использоваться как в 16 так и в 32 битном
режиме.

RDTSC   MACRO                   ; макрос инструкции RDTSC
        DB      0FH,31H
ENDM

ITER    EQU     10              ; количество итераций

.DATA                           ; сегмент данных
ALIGN   4
COUNTER DD      0               ; счетчик цикла
TICS    DD      0               ; временное хранение счетчика таймера
RESULTLIST  DD  ITER DUP (0)    ; список результатов теста

.CODE                           ; сегмент кода
BEGIN:  MOV     [COUNTER],0     ; сброс счетчика цикла
TESTLOOP:                       ; проверка цикла
;****************   Делайте любую инициализацию здесь:   *******************
        FINIT
;****************   Конец инициализаций    *********************************
        RDTSC                   ; читаем счетчик таймера
        MOV     [TICS],EAX      ; сохраняем его
        CLD                     ; неспариваемый заполнитель
REPT    8
        NOP                     ; восемь NOP, для анулирования затеняющего
                                ; эффекта
ENDM

;****************   Впишите сюда тестируемые инструкции:  ******************
        FLDPI                   ; это только для примера
        FSQRT
        RCR     EBX,10
        FSTP    ST
;********************* Конец блока тестируемых инструкций  *****************

        CLC                     ; неспариваемый заполнитель с затенением
        RDTSC                   ; читаем таймер опять
        SUB     EAX,[TICS]      ; вычисляем разницу
        SUB     EAX,15          ; уменьшаем число тактов, ушедшие на заполниетль
        MOV     EDX,[COUNTER]   ; счетчик цикла
        MOV     [RESULTLIST][EDX],EAX   ; сохраняем результат в таблице
        ADD     EDX,TYPE RESULTLIST     ; увеличиваем счетчик
        MOV     [COUNTER],EDX           ; сохраняем счетчик таймера
        CMP     EDX,ITER * (TYPE RESULTLIST)
        JB      TESTLOOP                ; повторяем итерацию

; включите сюда код, для чтения результатов из таблицы RESULTLIST

Инструкция "заполнитель" устанавливается до и после критических частей кода.
Не спариваемая инструкция CLD включена, для того, что бы убедиться, что
спаривание и прочие эффекты идут как задумывалось. Восемь инструкций NOP
включены для защиты от декодирования префиксов и что бы тестовый код был
свободен от теней декодировки других инструкций. Однобайтные инструкции
включены здесь для сохранения условий спаривания. Инструкция CLC после
тестируемого кода включена для оттенения декодирования префикса 0FH инструкции
RDTSC, осовбождая тест от возможного затеняющего эффекта.

На PentiumPro вы можете использовать инструкцию CPUID до и после каждого
RDTSC, для того, что бы предотвратить параллельное исполнение вашего кода с
чем-нибудь еще. Декодирование CPUID на Pentium без MMX, из-за префикса 0FH,
но на него не распространяется затеняющий эффект, из-за того, что она
выполняется сериями.

Инструкция RDTSC не может выполняться в режиме виртуального 8086, так если
вы запускаете эту программу под DOS вы должны закомментировать EMM386 (или
любой друго менеджер памяти) в CONFIG.SYS и не запускать программу в DOS окне
под Windows.

У Pentium процессоров есть специальные счетчики монитора производительности,
с помощью которых вы можете просчитать такие вещи, как промахи кеша,
рассогласование, остановки AGI, и т.д. Подробное руководство, как пользоваться
этими счетчиками, не описано в этом руководстве, и может быть найдено
где-нибудь еще.

Дальше



 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100