Light-industry-up.ru

Экосистема промышленности

Оптимизация компилятора

17-08-2023

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

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

Различают низко- и высокоуровневую оптимизацию. Низкоуровневая оптимизация преобразовывает программу на уровне элементарных команд, например, инструкций процессоров архитектуры x86. Высокоуровневая оптимизация осуществляется на уровне структурных элементов программы, таких как модули, функции, ветвления, циклы.

Содержание

Низкоуровневая оптимизация

Включает такие техники, как:

Объединение и разделение инструкций

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

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

  dec ecx
  jnz метка

чем эквивалентную ему инструкцию loop метка; для ранних процессоров архитектуры x86, от 8086 до 80286, всё иначе, так как они выполняют инструкции неконвейеризированно, вследствие чего команда loop метка создаёт более экономичный и быстрый код для этих процессоров.

Высокоуровневая оптимизация

Включает такие техники, как:

  • Удаление недосягаемого («мёртвого») кода и неиспользуемых присвоений
  • Подгонка, обращение циклов
  • Оптимизация множественных ветвлений
  • Развёртка, свёртка, объединение и разделение циклов
  • Вычисление инвариантов циклов, вынесение общих подвыражений и кода в ветвлениях, вынесение ветвлений из циклов
  • Переключение, объединение и разделение ветвлений
  • Предвыборка данных
  • Переупорядочивание функций
  • Встраивание и извлечение функций

Локальность оптимизации

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

Литература

  • Касьянов В. Н. Оптимизирующие преобразования программ. — М.: Наука, 1988. — 336 с.


Оптимизация компилятора.

© 2014–2023 light-industry-up.ru, Россия, Краснодар, ул. Листопадная 53, +7 (861) 501-67-06