Супероптимизация


Супероптимизация — это процесс автоматического поиска оптимальной последовательности кода для одной последовательности инструкций без циклов. Это выполняется с помощью компьютерного программного обеспечения , называемого компилятором . Компиляторы реального мира, как правило, не могут создавать действительно оптимальный код. В то время как большинство стандартных оптимизаций компилятора лишь частично улучшают код, цель супероптимизатора — найти оптимальную последовательность, каноническую форму . Супероптимизаторы можно использовать для улучшения обычных оптимизаторов, выделяя упущенные возможности, чтобы человек мог написать дополнительные правила.

Термин «супероптимизация» был впервые введен Алексией Массалин в статье 1987 года « Супероптимизатор: взгляд на самую маленькую программу» . [1] В 1992 году был разработан GNU Superoptimizer (GSO) для интеграции в коллекцию компиляторов GNU (GCC). [2] [3] Более поздние работы развили и расширили эти идеи.

Как правило, супероптимизация выполняется путем полного перебора в пространстве допустимых последовательностей команд. Это дорогостоящий метод, поэтому он нецелесообразен для компиляторов общего назначения. Тем не менее, было показано, что он полезен для оптимизации критически важных для производительности внутренних циклов. Также можно использовать решатель SMT для решения проблемы.

В 2001 году целевая супероптимизация была продемонстрирована в проекте Denali, проведенном исследованием Compaq. [4] В 2006 году декларативное программирование набора ответов использовалось для супероптимизации в проекте «Полная оптимизация с использованием технологии набора ответов» (TOAST) в Университете Бата . [5] [6]