ZX-Ревю 1996 №7-8 1995 г.

Форум - оценка быстродействия программ.


  (С)  Мучкаев Максим
                    г. Самара, 1996

                     Оценка быстродействия программ

   Дано: две процедуры на ассемблере, написанные по разным алгоритмам, но 
выполняющие одно и то же действие (например, обычная "бегущая строка").

   Найти: какая из двух процедур выполняется быстрее? То есть, на выполнение 
какой из процедур уходит меньше тактов процессора?

   Если процедура по своим размерам невелика (до 100 ассемблерных команд), то 
эту задачу можно решить, используя таблицу из книги ИНФОРКОМА "ПРОГРАММИРОВАНИЕ 
В МАШИННЫХ КОДАХ И НА ЯЗЫКЕ АССЕМБЛЕРА", где кроме кодов команд, приведено еще 
и число тактов, приходящееся на команду.
   Для примера мы рассмотрим программу "бегущей строки". В такой программе 
кроме большой длинны, есть еще и множество циклов, что затрудняет подсчет числа 
тактов вручную.
   В принципе, можно подсчитать не точное, а примерное число тактов, занимаемое 
вашей программой. Можно применять всякие хитрые способы, но все это сложно!
   А вот простой и доступный всем способ оценки времени выполнения программы:

      ORG      30000
      EI
LOOP  LD       A,1      ; Выдаем на BORDER 1 (синий).
      OUT      (#FE),A  ;
      CALL     SCROLL   ; Вызываем измеряемую программу.
      XOR      A        ; Выдаем на BORDER 0
      OUT      (#FE),A
      HALT              ; Ожидаем до поступления прерывания.
      LD       A,(23560); Если нажат SPACE - выход,
      CP       32
      JR       NZ,LOOP  ; Если не нажат - повтор с метки LOOP.
      RET

   Итак, вы пишите на ассемблере эту программу и запускаете ее. Эта программа 
циклически вызывает некую процедуру SCROLL, время работы которой мы хотим 
измерить. До вызова процедуры на бордюр выдается синий цвет, а после завершения 
процедуры - черный цвет. Таким образом, на бордюре мы получаем две полосы - 
синюю и черную.
  Так вот, чем больше синего цвета на экране, тем больше (в тактах) занимает 
вызываемая программа. ВНИМАНИЕ! Команда HALT должна стоять один раз, сразу 
после второго OUT (#FE),A. В вызываемой процедуре этой команды быть не должно!
   Если программа работает очень быстро - вы увидите черный бордюр и редко 
проскакивающие синие штрихи. Для программ от 1000 до 66-69 тыс. тактов вы 
увидите бордюр заполненный, в той или иной мере, синим цветом. Если бордюр 
полностью синий, значит ваша процедура "поедает" почти все такты процессора 
между прерываниями. Ну, а если бордюр отчаянно замигает синим цветом - вы вышли 
за пределы одного прерывания, и значит ваша программа "весит" более чем 72 тыс.
тактов.
   Как вы наверное уже поняли, этим способом можно мерить число тактов не 
только одной процедуры, но и нескольких процедур сразу! Это может быть полезно 
при создании программ, активно работающих с экраном. Для того, чтобы такие 
программы не "тормозили" и не "глючили", они должны умещаться в числе тактов 
между двумя прерываниями, а это число для каждой машины разное (у моего
"PENTAGON'а" - 72194 тактов, а у друзей на "SCORPION'ах" - около 69 тыс.тактов).
   Ну, а самое интересное еще впереди! Теперь вы сможете оценить распределение 
процессорного времени между подпрограммами. Вот конкретный пример на базе 
текста одной из типичных в наше время "музыкалок":

     ORG  30000
     EI
LOOP LD   A,1        ; Выдали на бордюр синий цвет.
     OUT  (#FE),A
     CALL SCROLL     ; Вызвали SCROLL.
     LD   A,2        ; Выдали на бордюр красный цвет.
     OUT  (#FE),A
     CALL ANALIZATOR ; Вызвали ANALIZATOR.
     LD   A,3        ; и т.д.
     OUT  (#FE),A
     CALL MAIN_EFFECT
     LD   A,4
     OUT  (#FE),A
     CALL SONG
     XOR  A
     OUT  (#FE),A
     HALT
     LD   A,(23560)
     CP   32
     JR   NZ,LOOP
     RET

   В результате работы такой "музыкалки", на бордюр будут выдаваться 5 
разноцветных полосок. По размерам первых четырех вы сможете судить о числе 
тактов, "съеденных" каждой из вызываемых процедур, а по размерам последней 
(черной) полосы можно определить сколько процессорного времени еще осталось!
   Надеюсь, что я не окончательно вас запутал! Так вот, теперь опубликованные в 
ZX-РЕВЮ 95/6 на стр. 43-44 советы по ускорению программ, будут для вас не 
пустым звуком. Попробуйте, в соответствии с этими советами, ускорить какую либо 
процедуру, а затем проведите "контрольный замер" и убедитесь в результатах
своей работы.



СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Планы - проект программы для раводки плат.
Kempston Mouse-2 - Определение наличия мышки. Обработка кнопок и координат.
Видеоглобус - новости.
Хобби - Gendalf рассказывает как он стал Оружейником (об увлечении хоббитизмом).
Реклама - реклама и объявления.

В этот день...   21 ноября