Введение

Увеличение скорости выполнения и уменьшение накладных расходов, связанных с циклами. Оптимизация компилятора для циклов.

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

Представление вычислений и преобразований

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

Одномодульная система преобразования

При унимодульном преобразовании используется одна унимодульная матрица для описания объединенного результата последовательности множества вышеуказанных преобразований. Ключевым в этом подходе является рассмотрение множества всех выполнений оператора внутри n циклов как множества целочисленных точек в n-мерном пространстве, причем точки выполняются в лексикографическом порядке. Например, выполнения оператора, вложенного во внешний цикл с индексом i и внутренний цикл с индексом j, можно сопоставить парам целых чисел (i, j). Применение унимодульного преобразования соответствует умножению точек в этом пространстве на матрицу. Например, перестановка двух циклов соответствует матрице. Унимодульное преобразование считается допустимым, если оно сохраняет временную последовательность всех зависимостей; оценка влияния унимодульного преобразования на производительность – более сложная задача. Неполностью вложенные циклы и некоторые преобразования (например, разбиение на блоки) нелегко укладываются в данную структуру.

Полиэдрическая или основанная на ограничениях структура

Полиэдрическая модель обрабатывает более широкий класс программ и преобразований, чем унимодульная структура. Множество выполнений набора операторов внутри, возможно, неидеально вложенного набора циклов рассматривается как объединение множества политопов, представляющих выполнения этих операторов. Аффинные преобразования применяются к этим политопам, формируя описание нового порядка выполнения. Границы политопов, зависимости данных и сами преобразования часто описываются с помощью систем ограничений, и такой подход часто называют подходом к оптимизации циклов, основанным на ограничениях. Например, отдельный оператор внутри внешней петли '' и внутренней петли '' выполняется один раз для каждой пары, удовлетворяющей условию. Вновь, преобразование считается допустимым, если оно сохраняет временную последовательность всех зависимостей. Оценка выгод от преобразования или поиск оптимального преобразования для заданного кода на конкретном компьютере остаются предметом текущих исследований на момент написания этой статьи (2010).