Генерация высококачественного кода для программ на СИ - Тестирование компиляторов. Часть 2
ОГЛАВЛЕНИЕ
Страница 10 из 17
Результаты теста исполнения для каждого компилятора в малой и большой
моделях памяти приводятся в таблице 1. Тесты в наборе теста исполнения
организованы в функции, которые вызывались из главной управляющей
процедуры. Весь набор был скомпилирован и отредактирован в один файл EXE.
Некоторые из процедур теста выполняются так быстро, что единственный вызов
функции невозможно точно измерить. В этих случаях функции вызываются из
управляющей процедуры многократно, чтобы увеличить время выполнения для
получения возможности количественных измерений. В таблице 1 приводится
количество итераций для каждого теста.
--------------------------------------------------------------¬
¦Таблица 1: Результаты оптимизированного теста выполнения ¦
+-------------------------------------------------------------+
¦ COMPUTER ¦
¦ BORLAND INNOVATIONS DATALIGHT ¦
+----------------------T------------T------------T------------+
¦КОМПИЛЯТОР ¦ Turbo C ¦ C86Plus ¦ Optimum-C ¦
+----------------------+------------+------------+------------+
¦ВЕРСИЯ ¦ 1.5 ¦ 1.10 ¦ 3.14 ¦
+----------------------+------------+------------+------------+
¦ЦЕНА ¦ $99.95 ¦ $497 ¦ $139 ¦
+----------------------+------------+------------+------------+
¦РАЗМЕР ПРГРАММЫ(KB) ¦ 35/40 ¦ 30/38 ¦ 33/40 ¦
+----------------------+------------+------------+------------+
¦ОБЩИЕ ОПЕРАЦИИ (*) ¦ ¦ ¦ ¦
¦Вызовы функций ¦ 6.0/7.2 ¦ 7.6/8.2 ¦ 6.0/7.6 ¦
¦Целочисл. арифметика ¦ 7.0/7.0 ¦ 8.5/8.5 ¦ 6.3/6.3 ¦
¦Арифм-ка длинных целых¦ 29.0/29.0 ¦ 23.4/23.9 ¦ 26.3/26.9 ¦
¦Индексация ¦ 7.9/9.9 ¦ 7.9/11.4 ¦ 5.9/7.9 ¦
¦Использ-е указателей ¦ 6.2/15.3 ¦ 12.9/19.2 ¦ 6.8/15.3 ¦
¦ С регистровыми ¦ ¦ ¦ ¦
¦ переменными ¦ 6.8/15.2 ¦ 10.3/19.8 ¦ 6.8/15.3 ¦
¦Решето (Sieve) ¦ 5.0/5.0 ¦ 5.8/5.8 ¦ 4.3/3.8 ¦
¦ С регистровыми ¦ ¦ ¦ ¦
¦ переменными ¦ 6.4/6.5 ¦ 4.6/4.6 ¦ 4.3/3.8 ¦
+----------------------+------------+------------+------------+
¦ОПЕРАЦИИ С ФАЙЛАМИ ¦ ¦ ¦ ¦
¦Чтение и запись (**) ¦ ¦ ¦ ¦
¦ С дискеты на дискету¦ 8.2/8.2 ¦ 8.3/8.3 ¦ 8.3/8.2 ¦
¦ С жесткого диска ¦ ¦ ¦ ¦
¦ на жесткий диск ¦ 3.9/3.4 ¦ 3.9/3.9 ¦ 3.9/3.3 ¦
¦Getc и putc (***) ¦ ¦ ¦ ¦
¦ С дискеты на дискету¦ 49.8/50.6 ¦ 45.6/50.1 ¦ !13.5!/49.4¦
¦ С жесткого диска ¦ ¦ ¦ ¦
¦ на жесткий диск ¦ 17.6/18.4 ¦ 18.9/21.1 ¦ !5.5!/17.3 ¦
+----------------------+------------+------------+------------+
¦ОПЕРАЦИИ 80x87 ¦ ¦ ¦ ¦
¦Сложение/умножение (*)¦ 3.1/3.1 ¦ 2.8/2.8 ¦ 3.1/3.1 ¦
¦Нат. логарифм (****) ¦ 1.0/1.0 ¦ 1.3/1.3 ¦ 1.3/1.2 ¦
¦Синус/тангенс(****) ¦ 1.1/1.1 ¦ 1.5/1.5 ¦ 1.2/1.3 ¦
+----------------------+------------+------------+------------+
¦ Время измерялось в секундах и приводится для ¦
¦ малой/большой моделей памяти. ¦
¦ Тесты выполнялись на IBM PC/AT с тактовой частотой 6 ¦
¦ мегагерц, с сопроцессором 80287, с параметрами в ¦
¦ CONFIG.SYS FILES = 20 и BUFFERS = 20. ¦
¦ Значения, входящие в 10%-ю окрестность лучшего ¦
¦ результата, заключены в восклицательные знаки. ¦
¦ * - 20 итераций, ** - 1 итерация, *** - 2 итерации, ¦
¦ **** - 10 итераций. ¦
L--------------------------------------------------------------
--------------------------------------------------------------¬
¦Таблица 1: Продолжение ¦
+-------------------------------------------------------------+
¦ ¦
¦ LATTICE MANX METAWARE MICROSOFT WATCOM ¦
+---------T---------T---------T---------T---------T-----------+
¦MS-DOS C ¦Aztec C ¦High C ¦ C ¦QuickC ¦WATCOM C ¦
+---------+---------+---------+---------+---------+-----------+
¦3.2 ¦4.0 ¦1.4 ¦5.0 ¦1.0 ¦6.0 ¦
+---------+---------+---------+---------+---------+-----------+
¦$500 ¦$499 ¦$595 ¦$450 ¦$99 ¦$295 ¦
+---------+---------+---------+---------+---------+-----------+
¦34/41 ¦20/24 ¦33/44 ¦28/39 ¦31/44 ¦25/30 ¦
+---------+---------+---------+---------+---------+-----------+
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦7.5/8.1 ¦7.9/8.6 ¦6.9/9.5 ¦6.1/6.0 ¦6.5/7.5 ¦!3.8/4.5! ¦
¦7.7/7.7 ¦9.1/9.2 ¦5.8/5.8 ¦5.3/5.2 ¦6.8/6.8 ¦!3.7/3.8! ¦
¦23.3/24.3¦23.9/24.2¦27.8/29.1¦23.9/24.8¦27.8/28.7¦!20.0/21.0!¦
¦11.0/34.9¦9.0/10.5 ¦7.1/7.8 ¦!4.8!/7.2¦7.9/11.3 ¦5.4/!5.5 ¦
¦12.3/58.5¦12.8/15.3¦5.4/15.3 ¦!5.1!/9.8¦7.8/17.8 ¦6.1/!6.2! ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦12.8/58.6¦7.8/15.3 ¦!5.2!/15.3!5.1!/9.8¦7.7/17.8 ¦5.6/!6.2! ¦
¦7.1/6.9 ¦7.6/7.6 ¦5.4/5.6 ¦4.2/4.3 ¦5.3/5.4 ¦!3.2/3.4! ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦6.9/7.0 ¦5.9/6.1 ¦5.8/6.0 ¦4.2/4.3 ¦6.5/6.5 ¦!3.2/3.4! ¦
+---------+---------+---------+---------+---------+-----------+
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦8.2/8.2 ¦8.3/8.2 ¦8.0/8.0 ¦8.3/8.2 ¦8.2/8.3 ¦8.2/8.2 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦3.9/3.7 ¦3.9/2.8 ¦!1.0/0.9!¦3.3/3.8 ¦3.9/3.4 ¦3.4/3.4 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦51.3/51.5¦28.6!27.7!39.8/39.8¦40.0/40.0¦40.0/40.0¦51.2/51.3 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦21.0/26.0¦12.5!11.0!16.0/15.2¦14.8/15.7¦16.1/16.0¦19.2/20.1 ¦
+---------+---------+---------+---------+---------+-----------+
¦ ¦ ¦ ¦ ¦ ¦ ¦
¦4.7/4.7 ¦2.6/2.6 ¦2.6/2.1 ¦!1.7/1.7!¦3.1/3.0 ¦1.8/1.8 ¦
¦1.3/1.3 ¦1.1/1.1 ¦1.1/1.2 ¦1.0/1.0 ¦1.2/1.3 ¦!0.9/0.9! ¦
¦1.9/1.9 ¦1.3/1.3 ¦1.1/1.2 ¦1.1/1.1 ¦1.3/1.4 ¦!1.0/1.0! ¦
+---------+---------+---------+---------+---------+-----------+
¦ Компиляторам задавались ключи для оптимизации по ¦
¦ скорости, использования непосредственных инструкций ¦
¦ процессоров 80286 и 80287. Все тесты, интенсивно ¦
¦ использующие процессор, были выиграны компиляторами ¦
¦ WATCOM и Microsoft. Не нашлось компилятора, код которого ¦
¦ для тестов ввода/вывода выполнялся бы во время, близкое к ¦
¦ лучшему, в малой и в большой моделях памяти одновременно. ¦
L--------------------------------------------------------------