Jump to content

Оптимизация глазка

(Перенаправлено из оптимизатора «Глазок» )

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

Например:

  • Вместо того, чтобы помещать регистр в стек, а затем немедленно возвращать значение обратно в регистр, удалите обе инструкции.
  • Вместо умножения x на 2 выполните x + x
  • Вместо умножения регистра с плавающей запятой на 8 прибавьте 3 к показателю степени регистра с плавающей запятой.

Термин «оптимизация глазка» был введен Уильямом Маршаллом Маккиманом в 1965 году. [ 2 ]

Замены оптимизации глазка включают, помимо прочего: [ 3 ]

  • Нулевые последовательности – удаление ненужных операций.
  • Объединение операций – замена нескольких операций одним эквивалентом.
  • Алгебраические законы. Используйте алгебраические законы для упрощения или изменения порядка инструкций.
  • Инструкции для особых случаев. Используйте инструкции, предназначенные для особых случаев операндов.
  • Операции в режиме адреса. Используйте режимы адреса для упрощения кода.

Выполнение

[ редактировать ]

Современные компиляторы часто реализуют оптимизацию «глазок» с помощью сопоставления с образцом алгоритма . [ 4 ]

Замена медленных инструкций более быстрыми

[ редактировать ]

Следующий байт-код Java :

aload 1
aload 1
mul

можно заменить следующим, которое выполняется быстрее:

aload 1
dup
mul

Что касается большинства оптимизаций «глазка», то они основаны на относительной эффективности различных инструкций. В этом случае, dup (который дублирует и перемещает вершину стека ) , как известно/считается более эффективным, чем aload (который загружает локальную переменную и помещает ее в стек).

Удаление лишнего кода

[ редактировать ]

Следующий исходный код :

 a = b + c;
 d = a + e;

напрямую компилируется в:

MOV b, R0  ; Copy b to the register
ADD c, R0  ; Add  c to the register, the register is now b+c
MOV R0, a  ; Copy the register to a
MOV a, R0  ; Copy a to the register
ADD e, R0  ; Add  e to the register, the register is now a+e [(b+c)+e]
MOV R0, d  ; Copy the register to d

но может быть оптимизирован для:

MOV b, R0  ; Copy b to the register
ADD c, R0  ; Add c to the register, which is now b+c (a)
MOV R0, a  ; Copy the register to a
ADD e, R0  ; Add e to the register, which is now b+c+e [(a)+e]
MOV R0, d  ; Copy the register to d

Удаление избыточных инструкций стека

[ редактировать ]

Если компилятор сохраняет регистры в стеке перед вызовом подпрограммы и восстанавливает их при возврате, последовательные вызовы подпрограмм могут иметь избыточные инструкции стека.

Предположим, что компилятор генерирует следующие инструкции Z80 для каждого вызова процедуры:

 PUSH AF
 PUSH BC
 PUSH DE
 PUSH HL
 CALL _ADDR
 POP HL
 POP DE
 POP BC
 POP AF

Если бы было два последовательных вызова подпрограммы, они бы выглядели так:

 PUSH AF
 PUSH BC
 PUSH DE
 PUSH HL
 CALL _ADDR1
 POP HL
 POP DE
 POP BC
 POP AF
 PUSH AF
 PUSH BC
 PUSH DE
 PUSH HL
 CALL _ADDR2
 POP HL
 POP DE
 POP BC
 POP AF

Последовательность регистров POP, за которой следует PUSH для тех же регистров, обычно избыточна. В случаях, когда это избыточно, оптимизация глазка удалит эти инструкции. В данном примере это приведет к появлению в глазке еще одной резервной пары POP/PUSH, которая будет поочередно удалена. Предполагая, что подпрограмма _ADDR2 не зависит от предыдущих значений регистра, удаление всего избыточного кода в приведенном выше примере в конечном итоге оставит следующий код:

 PUSH AF
 PUSH BC
 PUSH DE
 PUSH HL
 CALL _ADDR1
 CALL _ADDR2
 POP HL
 POP DE
 POP BC
 POP AF

См. также

[ редактировать ]
  1. ^ Мучник, Стивен Стэнли (15 августа 1997 г.). Расширенное проектирование и реализация компилятора . Академическая пресса / Морган Кауфманн . ISBN  978-1-55860-320-2 .
  2. ^ Маккиман, Уильям Маршалл (июль 1965 г.). «Оптимизация глазка» . Коммуникации АКМ . 8 (7): 443–444. дои : 10.1145/364995.365000 . S2CID   9529633 .
  3. ^ Фишер, Чарльз Н.; Сайтрон, Рон К.; ЛеБлан-младший, Ричард Дж. (2010). Создание компилятора (PDF) . Аддисон-Уэсли . ISBN  978-0-13-606705-4 . Архивировано из оригинала (PDF) 3 июля 2018 г. Проверено 2 июля 2018 г.
  4. ^ Ахо, Альфред Вайно ; Лам, Моника Син-Линг ; Сетхи, Рави ; Уллман, Джеффри Дэвид (2007). «Глава 8.9.2 Генерация кода путем разбиения входного дерева». Составители - принципы, методы и инструменты (PDF) (2-е изд.). Образование Пирсона . п. 540. Архивировано (PDF) из оригинала 10 июня 2018 г. Проверено 2 июля 2018 г.
[ редактировать ]

Словарное определение оптимизации глазка в Викисловаре

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2d5eae11a6376fc243e2cbac2e8c7e4d__1716196860
URL1:https://arc.ask3.ru/arc/aa/2d/4d/2d5eae11a6376fc243e2cbac2e8c7e4d.html
Заголовок, (Title) документа по адресу, URL1:
Peephole optimization - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)