Основная часть.
Целью оптимизирующих преобразований является повышение
производительности программ при сохранении их корректности. Чаще они
реализуются методами оптимизирующих преобразований. Преобразования − это
операции, которые изменяют способ работы написанной исходной программы без
изменения ее функциональности. Они широко используются (не только) в создании
оптимизаторов. Преобразования могут быть реализованы на различных формах
представления программы, таких как исходный код, промежуточные IR
формы/программы и машинный код (двоичный код) [1].
138
Концепция преобразований.
В оптимизации программного обеспечения
преобразования используются для преобразования программ с сохранением их
семантики (смысла) путём трансформации. Трансформацию можно описать как
модификацию (изменение) программы, которая изменяет способ работы программы
без изменения ее функциональности. Преобразования можно разделить на разные
категории в зависимости от объема и типа формы приложения, над которой они
работают [1, 2].
Локальные преобразования изменяют небольшую часть программы, а
глобальные преобразования изменяют всю программу. Термины «Преобразования
на исходном уровне» и «Преобразования на уровне IR» относятся к двум различным
типам преобразований, каждое из которых работает с другой формой программы.
Преобразования на уровне исходного кода работают с с удобочитаемым текстом,
написанным программистом. Эти преобразования изменяют поведение программы,
изменяя структуру или содержимое исходного кода, например, перестраивая
операторы, заменяя выражения или удаляя мертвый код. Преобразования уровня IR
работают с представлением, которое представляет собой машиночитаемую форму,
используемую во время компиляции. Преобразования на уровне IR изменяют
поведение программы, изменяя саму IR, а не исходный код.
Преобразования циклов
используются для оптимизации циклов в программах. Эти
преобразования включают их развертывание, разделение, обмен и распределение.
Они могут повысить производительность программ за счет сокращения накладных
расходов на инструкции управления циклом и улучшения методов доступа к памяти.
Они относятся к набору методов, используемых для оптимизации циклов.
Преобразования циклов включают в себя различные методы, такие как
развертывание цикла, слияние циклов, обмен циклами и распределение циклов.
Преобразования потока данных
используются для оптимизации зависимостей
данных в программах. Эти преобразования включают устранение общего
подвыражения, распространение констант, устранение мертвого кода и
распространение копирования.
Преобразования потока управления
используются
для оптимизации управляющих структур в программах. Эти преобразования
включают преобразование if, преобразование switch и устранение ветвления. «if-
преобразование», «переключение-преобразование» и «удаление ветвей» — это
методы, используемые для оптимизации структур потока управления в
компьютерных программах. Это может быть полезно в случаях, когда условие
известно заранее. «Переключение-преобразование» − это аналогичный метод,
который заменяет операторы переключения, используемые для проверки
переменной на диапазон значений, эквивалентным кодом, который не использует
операторы переключения. «Устранение веток» − это метод, удаляющий ненужные
ветки
из
кода.
Преобразования
потока
управления
могут
повысить
производительность программ за счет сокращения накладных расходов на
управляющие структуры и повышения точности прогнозов сети.
Преобразования
переупорядочения кода.
Преобразования переупорядочения кода используются для
оптимизации порядка кода в программах. Эти преобразования включают
перемещение кода, репликацию кода и планирование инструкций. Преобразования
по переупорядочению кода могут, например, повысить производительность
программ за счет повышения эффективности конвейеров инструкций. В частности,
«Планирование инструкций»
− это метод, который включает переупорядочивание
инструкций в программе для повышения эффективности конвейеров инструкций.
Это важно в современных компьютерных архитектурах, использующих конвейерные
процессоры [1-3].
|