Чтение онлайн

на главную - закладки

Жанры

Генерация высококачественного кода для программ, написанных на СИ

Хислей Филипп Н.

Шрифт:

– -------------------------------------------------------------¬

¦Таблица 2: Результаты теста оптимизации ¦

+-------------------------T---T---T---T---T---T---T---T---T---+

¦ КОМПИЛЯТОР ВЕРСИЯ ¦ 1 ¦ 2 ¦ 3 ¦ 4 ¦ 5 ¦ 6 ¦ 7 ¦ 8 ¦ 9 ¦

+-------------------------+---+---+---+---+---+---+---+---+---+

¦МЕТОДЫ ОПТИМИЗАЦИИ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦Свертка констант (целых) ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦

¦Свертка констант (плав.) ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦

¦Размножение

констант ¦ ¦ ¦ * ¦ ¦ ¦ * ¦ * ¦ ¦ * ¦

¦Размножение копий ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ ¦ * ¦

¦Алгебр.упрощения ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦

¦Подавление деления на 0 ¦ ¦ * ¦ ¦ ¦ ¦ * ¦ * ¦ ¦ * ¦

¦Удаление подвыражений ¦ ¦ ¦ * ¦ * ¦ * ¦ * ¦ * ¦ ¦ * ¦

¦Снижение мощности ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦

¦Удаление излишних ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦ загрузок/сохранений ¦ * ¦ ¦ * ¦ * ¦ * ¦ * ¦ * ¦ ¦ * ¦

¦Удаление недостижи- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦ мого кода ¦ * ¦ * ¦ * ¦ * ¦ ¦ * ¦ * ¦ ¦ * ¦

¦Удаление излишних ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦ присваиваний ¦ ¦ * ¦ * ¦ ¦ ¦ * ¦ * ¦ ¦ * ¦

¦Использ. машинно- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦ зависимых команд ¦ ¦ * ¦ ¦ * ¦ ¦ * ¦ * ¦ * ¦ * ¦

¦Поддержка встроенных ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦ функций ¦ ¦ ¦ ¦ ¦ ¦ ¦ * ¦ ¦ * ¦

¦Размещение переменных ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦ в регистрах ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦

¦Непосредственные инструк-¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦ ции 80287 ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ * ¦ ¦ * ¦

¦Сжатие цепочки переходов ¦ * ¦ ¦ * ¦ * ¦ ¦ * ¦ * ¦ ¦ * ¦

¦Вынесение инвариантного ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦ кода ¦ ¦ ¦ ¦ ¦ ¦ ¦ * ¦ ¦ ¦

¦Удаление переменных ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦ индукции циклов ¦ ¦ ¦ ¦ ¦ ¦ ¦ * ¦ ¦ ¦

¦Удаление циклов ¦ ¦ ¦ ¦ ¦ ¦ ¦ * ¦ ¦ ¦

¦Удал. глуб. подвыражений ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦Разворачивание циклов ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

¦Слияние циклов ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

+-------------------------+---+---+---+---+---+---+---+---+---+

¦ 1 - BORLAND Turbo C 1.5, 2 - COMPUTER INNOVATIONS ¦

¦ C86Plus 1.1, 3 - DATALIGHT Optimum-C 3.14, 4 - LATTICE ¦

¦ MS-DOS C 3.2, 5 - MANX Aztec C 4.0, 6 - METAWARE High C ¦

¦ 1.4, 7 - MICROSOFT C 5.0, 8 - MICROSOFT QuickC 1.0, 9 - ¦

¦ WATCOM C 6.0. ¦

¦ * - компилятор применяет этот метод оптимизации. ¦

+-------------------------------------------------------------+

¦ Большинство включенных в обзор компиляторов языка Си ¦

¦ поддерживают простые методы оптимизации, такие как ¦

¦ алгебраические упрощения, и только несколько компиляторов ¦

¦ применяют более сложные формы, такие как удаление общих ¦

¦ подвыражений. ¦

L--------------------------------------------------------------

Borland International.

Выход компилятора Turbo C представляет собой разумный,

но не очень оптимизированный код. Кроме свертки констант, удаления лишних загрузок регистров и алгебраических упрощений, компилятор выполняет только снижение мощности, удаление недостижимого кода и размещение переменных в регистрах. Он не поддерживает другие общие методы оптимизации, такие как удаление лишних сохранений, общих подвыражений и переменных индукции цикла, а также вынесение инвариантного кода.

Turbo C разумно управляет прологом и эпилогом функций и использованием регистров, засылая в стек и извлекая только те регистры, которые явно используются внутри тела функции.

Computer Innovation Inc.

Компилятор C86Plus вырабатывает хороший код со средним уровнем оптимизации. Он выполняет базовые приемы оптимизации, такие как свертка констант и размножение копий. Однако он не выполняет размножение констант для удаления лишних сохранений.

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

Хотя C86Plus успешно справляется со сверткой явных дублирующихся присваиваний в одно присваивание, удаление лишних сохранений он выполняет неустойчиво. Единственное лишнее присваивание в функции dead_code остается единственной командой после того, как компилятор удаляет недостижимый код из функции.

C86Plus - один из нескольких компиляторов рассматриваемого набора, который преобразует инициализацию элементов массива из функции проверки разворачивания циклов в эквивалентную команду STOSW процессора 80x86 с префиксом REP. Однако, что касается разумного уровня оптимизации в других областях, то он не смог решить задачу преобразования цепочки переходов в функции jump_chain_compression в один переход. Он не выполняет существенную оптимизацию циклов.

Datalight Inc.

С появлением Optimum-C Datalight стала одним из первых поставщиков, предложивших оптимизирующий компилятор. Хотя набор тестов не подтвердил наглядно претензии Datalight на глобальную оптимизацию, Optimum-C сработал так хорошо в некоторых фрагментах теста, что он продемонстрировал слабые фрагменты набора, требующие изменений для усовершенствования желаемой проверки. Например, в первой версии функции jump_compression не возвращалось значение, что делало все вычисления и присваивания в функции лишними. Optimum-C выявил это и удалил большую часть кода функции, включая цепочку переходов.

Поделиться:
Популярные книги

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Жених из гроба

Сотис Майя
1. Гробокопательница
Фантастика:
юмористическое фэнтези
сказочная фантастика
фэнтези
5.00
рейтинг книги
Жених из гроба

Ищу жену с прицепом

Рам Янка
2. Спасатели
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Ищу жену с прицепом

Гримуар тёмного лорда I

Грехов Тимофей
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар тёмного лорда I

Заклятие предков

Прозоров Александр Дмитриевич
3. Ведун
Фантастика:
фэнтези
альтернативная история
8.49
рейтинг книги
Заклятие предков

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Рота Его Величества

Дроздов Анатолий Федорович
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Рота Его Величества

Экспансия: Сотрудничество. Том 5

Белов Артем
5. Планетарный десант
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Экспансия: Сотрудничество. Том 5

Отверженный III: Вызов

Опсокополос Алексис
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Отверженный III: Вызов

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Локки 7. Потомок бога

Решетов Евгений Валерьевич
7. Локки
Фантастика:
аниме
эпическая фантастика
фэнтези
5.00
рейтинг книги
Локки 7. Потомок бога

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4