Введение
Увеличение скорости выполнения и уменьшение накладных расходов, связанных с циклами. Оптимизация компилятора для циклов.
compiler optimization for loops
In compiler theory, loop optimization is the process of increasing execution speed and reducing the overheads associated with loops. It plays an important role in improving cache performance and making effective use of parallel processing capabilities. Most execution time of a scientific program is spent on loops; as such, many compiler optimization techniques have been developed to make them faster.
В теории компиляторов оптимизация циклов — это процесс повышения скорости выполнения и снижения накладных расходов, связанных с циклами. Она играет важную роль в улучшении производительности кэша и эффективном использовании возможностей параллельной обработки. Большая часть времени выполнения научной программы тратится на циклы, поэтому было разработано множество методов оптимизации компилятора для их ускорения.
compiler optimization for loops
In compiler theory, loop optimization is the process of increasing execution speed and reducing the overheads associated with loops. It plays an important role in improving cache performance and making effective use of parallel processing capabilities. Most execution time of a scientific program is spent on loops; as such, many compiler optimization techniques have been developed to make them faster.
Представление вычислений и преобразований
Поскольку инструкции внутри циклов могут выполняться многократно, часто невозможно установить верхнюю границу для количества исполнений инструкций, на которые повлияет оптимизация цикла. Это создает трудности при анализе корректности и выгод оптимизации цикла, особенно в отношении представления вычислений, подлежащих оптимизации, и самих выполняемых оптимизаций.
Одномодульная система преобразования
При унимодульном преобразовании используется одна унимодульная матрица для описания объединенного результата последовательности множества вышеуказанных преобразований. Ключевым в этом подходе является рассмотрение множества всех выполнений оператора внутри n циклов как множества целочисленных точек в n-мерном пространстве, причем точки выполняются в лексикографическом порядке. Например, выполнения оператора, вложенного во внешний цикл с индексом i и внутренний цикл с индексом j, можно сопоставить парам целых чисел (i, j). Применение унимодульного преобразования соответствует умножению точек в этом пространстве на матрицу. Например, перестановка двух циклов соответствует матрице. Унимодульное преобразование считается допустимым, если оно сохраняет временную последовательность всех зависимостей; оценка влияния унимодульного преобразования на производительность – более сложная задача. Неполностью вложенные циклы и некоторые преобразования (например, разбиение на блоки) нелегко укладываются в данную структуру.
A unimodular transformation is legal if it preserves the temporal sequence of all dependencies; measuring the performance impact of a unimodular transformation is more difficult. Imperfectly nested loops and some transformations (such as tiling) do not fit easily into this framework.
Полиэдрическая или основанная на ограничениях структура
Полиэдрическая модель обрабатывает более широкий класс программ и преобразований, чем унимодульная структура. Множество выполнений набора операторов внутри, возможно, неидеально вложенного набора циклов рассматривается как объединение множества политопов, представляющих выполнения этих операторов. Аффинные преобразования применяются к этим политопам, формируя описание нового порядка выполнения. Границы политопов, зависимости данных и сами преобразования часто описываются с помощью систем ограничений, и такой подход часто называют подходом к оптимизации циклов, основанным на ограничениях. Например, отдельный оператор внутри внешней петли '' и внутренней петли '' выполняется один раз для каждой пары, удовлетворяющей условию. Вновь, преобразование считается допустимым, если оно сохраняет временную последовательность всех зависимостей. Оценка выгод от преобразования или поиск оптимального преобразования для заданного кода на конкретном компьютере остаются предметом текущих исследований на момент написания этой статьи (2010).
Once again, a transformation is legal if it preserves the temporal sequence of all dependencies. Estimating the benefits of a transformation, or finding the best transformation for a given code on a given computer, remain the subject of ongoing research as of the time of this writing (2010).