Оптимизатор объектного кода
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Оптимизатор объектного кода , иногда также известный как оптимизатор пост-прохода или, для небольших участков кода, оптимизатор глазка , является частью программного компилятора . Он берет выходные данные этапа компиляции исходного языка — объектный код или двоичный файл — и пытается заменить идентифицируемые разделы кода замещающим кодом, который является более алгоритмически эффективным (обычно с повышенной скоростью).
Примеры
[ редактировать ]- Самый ранний «Оптимизатор COBOL» был разработан Capex Corporation в середине 1970-х годов для COBOL . В данном случае этот тип оптимизатора зависел от знания «слабостей» стандартного компилятора IBM COBOL и фактически заменял (или исправлял ) участки объектного кода более эффективным кодом. Код замены может заменить, например, линейный поиск по таблице бинарным поиском или иногда просто заменить относительно медленную инструкцию на заведомо более быструю, которая в остальном функционально эквивалентна в своем контексте. Этот метод теперь известен как снижение силы . Например, на IBM/360 оборудовании
CLI
инструкция была, в зависимости от конкретной модели, в два-пять раз быстрее, чемCLC
инструкция для однобайтового сравнения. [1] [2]
Преимущества
[ редактировать ]Основным преимуществом повторной оптимизации существующих программ было то, что запас уже скомпилированных клиентских программ ( объектный код ) можно было улучшить практически мгновенно с минимальными усилиями, сократив ресурсы ЦП при фиксированных затратах (цене проприетарного программного обеспечения ). Недостаток заключался в том, что новые выпуски COBOL, например, требовали (взимали плату) за обслуживание оптимизатора для удовлетворения возможных изменений внутренних алгоритмов COBOL. Однако, поскольку новые выпуски компиляторов COBOL часто совпадали с оборудования обновлением , более быстрое оборудование обычно более чем компенсировало возврат прикладных программ к их предварительно оптимизированным версиям (до тех пор, пока не был выпущен поддерживающий оптимизатор).
Другие оптимизаторы
[ редактировать ]Некоторые двоичные оптимизаторы выполняют сжатие исполняемых файлов , которое уменьшает размер двоичных файлов с использованием общих методов сжатия данных , сокращая требования к хранению, а также время передачи и загрузки, но не улучшая производительность во время выполнения. Фактическая консолидация дублирующихся библиотечных модулей также позволит снизить требования к памяти.
Некоторые двоичные оптимизаторы используют метрики времени выполнения ( профилирование ) для интроспективного улучшения производительности, используя методы, аналогичные JIT- компиляторам.
Последние события
[ редактировать ]Недавно разработанные «бинарные оптимизаторы» для различных платформ, некоторые из которых заявляют о своей новизне , но, тем не менее, по существу используют те же (или подобные) методы, описанные выше, включают:
- Автоматический двоичный оптимизатор IBM для z/OS (ABO) (2015 г.) [3]
- IBM для z/OS (ABO) (2020 г.) Пробная облачная служба автоматического двоичного оптимизатора [4]
- Оптимизатор двоичного кода Sun Studio [5] - что требует профиля предварительной фазы
- Проектирование и разработка динамического двоичного оптимизатора — от IBM TJ Watson Res. Центр (февраль 2005 г.) [6] [7]
- QuaC: двоичная оптимизация для быстрой генерации кода во время выполнения на C [8] — (который, похоже, включает в себя некоторые элементы JIT)
- ДинамоРИО
- COBRA: адаптивная платформа двоичной оптимизации во время выполнения для многопоточных приложений [9]
- Оптимизатор исполняемых файлов Spike (ядро Unix) [10]
- Оптимизация программного обеспечения «SOLAR» во время компоновки и во время выполнения [11]
- Dynimize: виртуализация производительности процессора [12]
- BOLT: оптимизатор пост-ссылок, построенный на базе LLVM . Используя профилирование на основе выборки, BOLT повышает производительность реальных приложений даже для высокооптимизированных двоичных файлов, созданных с использованием как оптимизации с обратной связью , так и оптимизации времени соединения . Для компиляторов GCC и Clang BOLT ускоряет их двоичные файлы до 20,4% по сравнению с FDO и LTO и до 52,1%, если двоичные файлы собраны без FDO и LTO. [13]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Архивная копия» (PDF) . Архивировано из оригинала (PDF) 11 июля 2010 г. Проверено 7 января 2010 г.
{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка ) - ^ Эванс, Майкл (1 декабря 1982 г.). «Программная инженерия для среды Cobol» . Коммуникации АКМ . 25 (12): 874–882. дои : 10.1145/358728.358732 . S2CID 17268690 . Архивировано из оригинала 27 октября 2021 г. Проверено 27 октября 2021 г.
- ^ «Автоматический двоичный оптимизатор IBM для z/OS — обзор» . www.ibm.com . 2015. Архивировано из оригинала 18 октября 2020 г. Проверено 15 мая 2020 г.
- ^ «Автоматический двоичный оптимизатор IBM для пробной облачной службы z/OS» . оптимизатор.ibm.com . 2020. Архивировано из оригинала 19 января 2021 г. Проверено 27 октября 2021 г.
- ^ «Оптимизатор двоичного кода» . Архивировано из оригинала 22 июля 2010 г. Проверено 7 января 2010 г.
- ^ Дустервальд, Э. (2005). «Проектирование и разработка динамического бинарного оптимизатора». Труды IEEE . 93 (2): 436–448. дои : 10.1109/JPROC.2004.840302 . S2CID 2217101 .
- ^ Сюй, Чаохао; Ли, Цзяньхуэй; Бао, Дао; Ван, Юн; Хуан, Бо (13 июня 2007 г.). «Оптимизация памяти на основе метаданных в динамическом двоичном трансляторе» . Материалы 3-й международной конференции по виртуальным средам исполнения - VEE '07 . Ассоциация вычислительной техники. стр. 148–157. дои : 10.1145/1254810.1254831 . ISBN 978-1-59593630-1 . S2CID 15234434 . Архивировано из оригинала 27 октября 2021 г. Проверено 27 октября 2021 г. - из цифровой библиотеки ACM.
- ^ «Архивная копия» (PDF) . Архивировано (PDF) из оригинала 19 апреля 2009 г. Проверено 7 января 2010 г.
{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка ) - ^ Ким, Джинпё; Сюй, Вэй-Чунг; Ю, Пен-Чунг (2007). «COBRA: Адаптивная среда двоичной оптимизации времени выполнения для многопоточных приложений». 2007 Международная конференция по параллельной обработке (ICPP 2007) . п. 25. дои : 10.1109/ICPP.2007.23 . ISBN 978-0-7695-2933-2 . S2CID 15079211 .
- ^ «Архивная копия» (PDF) . Архивировано из оригинала (PDF) 11 сентября 2010 г. Проверено 7 января 2010 г.
{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка ) - ^ « Оптимизация программного обеспечения «SOLAR» во время компоновки и во время выполнения» . Архивировано из оригинала 14 февраля 2016 г.
- ^ «Обзор продукта Dynimize» . dynimize.com . Архивировано из оригинала 25 октября 2021 г. Проверено 26 апреля 2021 г.
- ^ Панченко Максим; Аулер, Рафаэль; Нелл, Билл; Оттони, Гильерме (16 февраля 2019 г.). «BOLT: Практический двоичный оптимизатор для центров обработки данных и за его пределами». Международный симпозиум IEEE/ACM по генерации и оптимизации кода (CGO) 2019 . стр. 2–14. arXiv : 1807.06735 . дои : 10.1109/CGO.2019.8661201 . ISBN 978-1-7281-1436-1 . S2CID 49869552 .