Оптимизация компилятора
Материал из Википедии — свободной энциклопедии
Оптимизация программного кода — это модификация программ, выполняемая оптимизирующим компилятором или интерпретатором с целью улучшения их характеристик, таких как производительности или компактности, — без изменения функциональности.
Оптимизация — не обязательный, но важный этап компиляции. В принципе, она может происходить неявно во время трансляции программы, но, как правило, оптимизацию программы выделяют как отдельный этап функционирования компиляторов. Компоновщики так же могут выполнять часть оптимизаций, таких как удаление неиспользуемых подпрограмм или переупорядочевание подпроргамм.
Различают низко- и высокоуровневую оптимизацию. Низкоуровневая оптимизация преобразовывает программу на уровне элементарных команд, например, инструкций процессоров архитектуры x86. Высокоуровневая оптимизация осуществляется на уровне структурных элементов программы, таких как ветвления и циклы.
Содержание |
[править] Низкоуровневая оптимизация
Включает такие техники, как:
- Оптимальный выбор (замена, объединение, разделение) инструкций
- Переупорядочевание инструкций
- Распределение регистров
- Удаление цепочек переходов
- Векторизация
- Понижение силы операций
[править] Объединение и разделение инструкций
Данный метод оптимизации состоит в замене одной или нескольких инструкций другим, но функционально эквивалентным набором, дающим выигрыш для целевой архитектуры. Так, для конвейерной архитектуры разделение сложных инструкций на более простые может давать выигрыш в быстродействии, если несколько инструкций могут быть паралленьно выполнены на конвейере. Так, например, процессор Intel Pentium MMX быстрее выполнит набор инструкций
dec ecx jnz метка
чем эквивалентную ему инструкцию loop метка
, для ранних процессоров архитектуры x86, от 8086 до 286, всё иначе, так как они выполняют инструкции неконвейеризированно, вследствие этого, команда loop метка
создаёт более экономичный и быстрый код для этих процессоров.
[править] Высокоуровневая оптимизация
Включает такие техники, как:
- Удаление недосягаемого («мёртвого») кода и неиспользуемых присвоений
- Подгонка, обращение циклов
- Оптимизация множественных ветвлений
- Развёртка, свёртка, объединение и разделение циклов
- Вычисление инвариантов циклов, вынесение общих подвыражений и кода в ветвлениях, вынесение ветвлений из циклов
- Переключение, объединение и разделение ветвлений
- Предвыборка данных
- Переупорядочевание функций
- Встраивание и извлечение функций
[править] Локальность оптимизации
Многие оптимизирующие компиляторы ограничивают любые действия по оптимизации подпрограммы её телом, т.е. не производят межпроцедурной или полнопрограммной оптимизации.
[править] Литература
- Касьянов В.Н. Оптимизирующие преобразования программ. - М.: Наука , 1988. - 336 С.
Эту статью следует викифицировать.
Пожалуйста, оформите её согласно правилам оформления статей.
|