~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 7F591DD857D607A0025869D095FFB21D__1716196860 ✰
Заголовок документа оригинал.:
✰ Peephole optimization - Wikipedia ✰
Заголовок документа перевод.:
✰ Оптимизация глазка — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Peephole_optimization ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/7f/1d/7f591dd857d607a0025869d095ffb21d.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/7f/1d/7f591dd857d607a0025869d095ffb21d__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 10:37:19 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 20 May 2024, at 12:21 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Оптимизация глазка — Википедия Jump to content

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

Из Википедии, бесплатной энциклопедии

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

Например:

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

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

Замены [ править ]

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

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

Реализация [ править ]

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

Примеры [ править ]

Замена медленных инструкций более быстрыми [ править ]

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

начать 1
 начать 1
 У меня есть
 

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

нагрузка 1
 после
 много
 

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

Удаление лишнего кода [ править ]

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

а = б + с;
  д = а + е;
 

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

МОВ   б  ,   R0    ;   Скопировать b в регистр 
 ADD   c  ,   R0    ;   Добавьте c в регистр, теперь регистр b+c 
 MOV   R0  ,   a    ;   Скопируйте регистр в 
 MOV   a  ,   R0    ;   Скопировать a в регистр 
 ADD   e  ,   R0    ;   Добавьте e в регистр, теперь регистр будет a+e [(b+c)+e] 
 MOV   R0  ,   d    ;   Скопируйте реестр в d 

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

МОВ   б  ,   R0    ;   Скопировать b в регистр 
 ADD   c  ,   R0    ;   Добавьте c в регистр, который теперь равен b+c (a) 
 MOV   R0  ,   a    ;   Скопируйте регистр в 
 ADD   e  ,   R0    ;   Добавьте e в регистр, который теперь равен b+c+e [(a)+e] 
 MOV   R0  ,   d    ;   Скопируйте реестр в 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
Номер скриншота №: 7F591DD857D607A0025869D095FFB21D__1716196860
URL1:https://en.wikipedia.org/wiki/Peephole_optimization
Заголовок, (Title) документа по адресу, URL1:
Peephole optimization - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)