Характеристики времени выполнения конструкций языка турбо-паскаль

Изучение времени выполнения базовых конструкций языка программирования помогает глубже понять его реализацию, позволяет писать оптимизированные по времени выполнения программы, а также сравнивать последующие версии транслятора или интерпретатора этого языка по некоторой, возможно односторонней, методике. Тестовые программы дают более интегрированные оценки скорости выполнения программно их трудно использовать в практической работе.
Данное исследование проведено для языка Турбо-Паскаль [1 - 3] исходя из его широкой распространенности и наличия многих версий под различными ОС (MS DOS, Альфа-ДОС, SCP, СР/М-80, СР/М-86, OS/2 и др.).
Методика получения временных характеристик
Для хронометрирования времени выполнения тестируемой конструкции использованы процедуры.
procedure TMinusTl (таг H,M,S,T: integer; var HI,Ml,SI,Tl: integer; таг RH,RM,RS,RT: integer);
 
Для тестирования конструкций разработана программа DORA, позволяющая определять время выполнения базовых конструкций: циклов FOR I: = < начало > "ТО < конец > "DO < оператор >;
WHILE I = < конец > "DO < оператор >;
REPEAT I: = I + 1 UNTIL I =< конец > ; вывода символов на экран; конструкций:
IF и CASE (в сравнении);
CASE с различным числом вариантов выбора (от 1 до 9); арифметических операций и функций в режимах с математическим сопроцессором i8087 и без него;
передачи процедурам параметров простых и сложных типов (массив, запись, множество), типа указатель или запись, одно из полей которой - указатель.
 
Базовые конструкции выполнялись программой DORA в цикле 30 ООО раз (кроме медленных конструкций вывода на экран, которые выполнялись 1000 раз), после чего программа вычисляла время их выполнения (во всех таблицах оно дано до сотых секунды). По техническим причинам измерения проводились под MS DOS 3.2 на ПЭВМ "СОРАМ РС-401 Turbo", имеющей относительное быстродействие 1,1 от IBM PC XT на частоте 4,77 МГц и 1,8 - на частоте 8 МГц.
Результаты тестирования
Сначала мы убедились в очевидных фактах, что время выполнения программы, откомпилированной в память и дисковый файл типа .СОМ, одно и то же, если не учитывать времени загрузки этой программы с диска.
Конструкции с пустым блоком:
а)    do;
б)    do begin end;
в)    procedure; begin end;
г)    begin end
эквивалентны. В случае "в" дополнительное время тратится на вызов процедуры.
Более сложным является вопрос о времени передачи параметров процедурам. При увеличении числа скалярных параметров, передаваемых процедуре или функции, время увеличивается линейно, пропорционально числу передаваемых параметров . Имеет существенное значение способ передачи параметра - по ссылке или по значению: по ссылке (VAR) параметры, кроме CHAR и INTEGER, передаются значительно быстрее.

Время передачи параметров типа Type Par = Record item: < простой тип> end; равно времени передачи параметра соответствующего простого типа, т.е. заключение переменной в запись не влияет на время ее передачи в качестве параметра.
В Турбо-Паскале при передаче по ссылке (VAR) параметра типа STRING важно, насколько заполнена эта строка. При этом в версии 3.0 быстрее всего передается целиком заполненная строка (даже быстрее, чем пустая). Это определяется способом передачи параметра через стек.. В версии 4.0 языка Турбо- Паскаль время передачи строковых параметров существенно зависит от выбранных директив компиляции. Данные получены при значениях директив по умолчанию и при изменении отдельных директив для версии 4.0. Из таблицы видно, что отмена контроля переполнения стека и генерации отладочной информации уменьшает время передачи параметров. Этот фактор часто недооценивается программистами.

Примечание. $K,$S - контроль переполнения стека, $D - включение в объектный файл отладочной информации, $F- включение режима трансляции для программ объемом больше 64 Кбайт.

Время выполнения операций без математического сопроцессора зависит от количества цифр в числе.Арифметические операции над константами производятся заметно быстрее, чем над переменными. В остальных случаях использовались константы Типа Real.)
Результаты хронометрирования времени выполнения арифметических операций на ПЭВМ

Наиболее вероятные альтернативы выбора нужно располагать в начале CASE . Время обхода этой конструкции равно времени выбора (N + 1)-й альтернативы, где N - число альтернатив. При оптимизации времени выполнения программы следует учитывать вероятность такого исхода, и если она высока, то проверка должна осуществляться до входа в CASE.

В конструкции CASE перед оператором можно ставить несколько меток.
Конструкции циклов FOR, WHILE и REPEAT сравнивались в описанном выше простом случае для того, чтобы можно было оценить их. В обеих версиях конструкция FOR значительно быстрее других. Однако при шаге цикла, не равном 1, программист вынужден пользоваться WHILE или REPEAT, что ведет к потере эффективности и ухудшению читаемости программы. Отсутствие в Турбо-Паскале возможности задать шаг цикла (как и операции возведения в степень) - серьезный недостаток языка, который следовало бы устранить в новых реализациях. Появление в 1989 г. версии 5.5, в которой реализованы константные выражения, символьный отладчик, объектно-ориентированное программирование и другие возможности, свидетельствует о развитии языка.


 


Обсудить вопрос в студенческом форуме

 

Сайт содержит информацию о учебном заведении и студенческой общине и не является официальным