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

WATCOM очень хорошо удаляет недостижимый код. C 6.0 не только удалил ненужные присваивания и недостижимый код внутри функции, но он также удалил пролог и эпилог функции и свернул всю функцию к простому возврату, приписав имя функции к инструкции возврата основной функции. В завершение всего, компилятор удалил локальный вызов функции.

Насколько C 6.0 изощрен в уничтожении бесполезной функции, настолько же он беспомощен при удалении бесполезного дублирующегося присваивания. Наиболее важная область, за которую WATCOM C 6.0, как и Optimum-C, не смог взяться, была оптимизация циклов. Он не поддерживает вынесение инвариантного кода и удаление переменных индукции циклов.

Хотя C 6.0 не выполняет разворачивание циклов в отдельные команды, он (также как Datalight Optimum-C и Computer Innovations C86Plus) использует команду REP/STOSW процессоров 80x86 для инициализации тестового массива, благодаря чему удаляет цикл.

Прекрасная генерация кода в WATCOM, в частности, разумное использование регистров, дает ему очень важное преимущество. В тесте выполнения он победил в большинстве тестов, интенсивно использующих процессор, и при этом выполнялся для большой модели в лучшее время, чем большинство других компиляторов для малой модели. К слабым сторонам WATCOM можно отнести ввод/вывод файлов, использование getc и putc. Здесь он близок к наихудшим компиляторам.

<p>Выявленные лидеры</p>

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

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

Хотя все девять рассматриваемых компиляторов генерируют приемлемый код, три из них, - Datalight Optimum-C, Microsoft C 5.0 и WATCOM C 6.0, - выполняют оптимизацию кода более высокого уровня, чем остальные.

Компилятор Datalight Optimum-C - это быстрый и выразительный исполнитель. Он выполняет обширный анализ потоков данных и оптимизирует код, за который другие компиляторы не берутся.

Microsoft C 5.0 применяет оптимизацию циклов, которая является одной из областей с большими потенциальными возможностями улучшения кода. Применяя вынесение инвариантного кода, удаление переменных индукции циклов и очень качественное распределение переменных по регистрам, Microsoft C 5.0 вырабатывает прекрасный код.

Компилятор WATCOM C 6.0 соперничает с Microsoft C 5.0 по степени выполняемой оптимизации и генерирует наиболее быстрый код в тесте оптимизации. То, что WATCOM теряет на не самых оптимальных циклах, он более чем наверстывает в малых заголовках вызова функций. WATCOM C 6.0 хорошо использует регистры, минимизирует обращения к памяти и повышает эффективность выполнения программ.

Компиляторы Metaware High C и Computer Innovations C86Plus выполняют более-менее удовлетворительную степень оптимизации, но отступают на второй план при рассмотрении усовершенствований, сделанных в технологии компиляторов фирмами Datalight, Microsoft и WATCOM.

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

ЛИСТИНГ 1: OPTBENCH.C

/* ---------------------------------------------------------- *

¦ ¦

¦ Серия тестов PC Tech Journal ¦

¦ Тест оптимизации кода Си ¦

¦ ¦

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных