Оптимизатор объектного кода - Object code optimizer

Бинарный оптимизатор берет существующий вывод от компилятора и создает лучший исполняемый файл с той же функциональностью.

An оптимизатор объектного кода, иногда также известный как оптимизатор после прохода или, для небольших участков кода, оптимизатор глазка, берет выходные данные с этапа компиляции исходного языка - объектный код или двоичный файл - и пытается заменить идентифицируемые части кода кодом замены, который больше алгоритмически эффективный (обычно повышенная скорость).

Примеры

  • "IBM Автоматический двоичный оптимизатор для z / OS[1]"(ABO) была представлена ​​в 2015 году как передовая технология, призванная оптимизировать производительность КОБОЛ приложения на IBM Z[2] мэйнфреймы без необходимости перекомпиляции исходного кода. Он использует передовую технологию оптимизации, включенную в последнюю версию Enterprise COBOL.[3]. ABO оптимизирует скомпилированный двоичные файлы не влияя на логику программы. В результате приложение работает быстрее, но поведение остается неизменным, поэтому усилия по тестированию могут быть сокращены. Клиенты обычно не перекомпилировать 100 процентов их кода при обновлении до нового уровня компилятора или оборудования IBM Z, поэтому код, который не перекомпилирован, не сможет воспользоваться преимуществами функций нового оборудования IBM Z. Теперь с ABO у клиентов есть еще одна возможность уменьшить ЦПУ затраты на использование и эксплуатационные расходы критически важных для бизнеса приложений COBOL. Вы можете попробовать ABO с улучшенной, простой в использовании облачной службой ABO Trial Cloud. [4] без установки ABO в вашу систему.
  • Самый ранний "Оптимизатор COBOL" был разработан Capex Corporation в середине 1970-х для КОБОЛ. Этот тип оптимизатора зависел в данном случае от знания «слабых мест» стандартного компилятора IBM COBOL и фактически заменил (или залатанный ) разделы объектного кода с более эффективным кодом. Код замены может заменить линейный поиск в таблице с бинарный поиск например, а иногда просто заменить относительно медленную инструкцию известной более быстрой, которая в остальном функционально эквивалентна в своем контексте. Этот метод теперь известен как снижение силы. Например, на IBM / 360 аппаратное обеспечение CLI инструкция была, в зависимости от конкретной модели, в два-пять раз быстрее, чем CLC инструкция для однобайтовых сравнений.[5][6]

Преимущества

Основным преимуществом повторной оптимизации существующих программ было то, что запас уже скомпилированных клиентских программ (объектный код ) можно было улучшить почти мгновенно с минимальными усилиями, уменьшив ЦПУ ресурсы по фиксированной стоимости (цена проприетарное программное обеспечение ). Недостатком было то, что новые выпуски COBOL, например, потребовали (платного) обслуживания оптимизатора, чтобы учесть возможные изменения внутренних алгоритмов COBOL. Однако, поскольку новые выпуски компиляторов COBOL часто совпадают с аппаратное обеспечение обновления, более быстрое оборудование обычно более чем компенсирует возврат прикладных программ к их предварительно оптимизированным версиям (до тех пор, пока не будет выпущен поддерживающий оптимизатор).

Другие оптимизаторы

Некоторые бинарные оптимизаторы делают исполняемое сжатие, что снижает размер двоичных файлов с использованием общих Сжатие данных методы, уменьшающие требования к хранилищу и время передачи и загрузки, но не улучшающие производительность во время выполнения. Фактическое объединение дублирующих библиотечных модулей также снизит требования к памяти.

Некоторые бинарные оптимизаторы используют время выполнения метрики (профилирование ) для интроспективного повышения производительности с помощью методов, аналогичных JIT компиляторы.

Последние достижения

Совсем недавно были разработаны «бинарные оптимизаторы» для различных платформ, некоторые утверждали, что новизна но, тем не менее, с использованием тех же (или аналогичных) методов, описанных выше, включают:

Смотрите также

Рекомендации

  1. ^ https://www.ibm.com/products/automatic-binary-optimizer-zos
  2. ^ https://www.ibm.com/it-infrastructure/z
  3. ^ https://www.ibm.com/us-en/marketplace/ibm-cobol
  4. ^ https://optimizer.ibm.com
  5. ^ http://www.bitsavers.org/pdf/ibm/360/A22_6825-1_360instrTiming.pdf
  6. ^ http://portal.acm.org/citation.cfm?id=358732&dl=GUIDE&dl=ACM
  7. ^ https://www.ibm.com/products/automatic-binary-optimizer-zos
  8. ^ https://optimizer.ibm.com
  9. ^ http://developers.sun.com/solaris/articles/binopt.html
  10. ^ Дюстервальд, Э. (2005). «Дизайн и разработка динамического двоичного оптимизатора». Труды IEEE. 93 (2): 436–448. Дои:10.1109 / JPROC.2004.840302.
  11. ^ http://portal.acm.org/citation.cfm?id=1254810.1254831
  12. ^ http://www.eecs.berkeley.edu/Pubs/TechRpts/1994/CSD-94-792.pdf
  13. ^ Ким, Джинпио; Сюй, Вэй-Чун; Ю, Пен-Чунг (2007). «КОБРА: Адаптивная среда двоичной оптимизации для многопоточных приложений». 2007 Международная конференция по параллельной обработке (ICPP 2007). п. 25. Дои:10.1109 / ICPP.2007.23. ISBN  978-0-7695-2933-2.
  14. ^ http://www.cesr.ncsu.edu/fddo4/papers/spike_fddo4.pdf