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