Генерация высококачественного кода для программ на СИ - Тестирование компиляторов. Часть 2

ОГЛАВЛЕНИЕ


 Результаты теста исполнения для каждого компилятора в малой и большой
 моделях памяти приводятся в таблице 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--------------------------------------------------------------