stringtranslate.com

Оптимизация цикла

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

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

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

Оптимизация с помощью последовательности циклических преобразований

Оптимизацию цикла можно рассматривать как применение последовательности конкретных преобразований цикла (перечисленных ниже или в разделе «Преобразования компилятора для высокопроизводительных вычислений» [2] ) к исходному коду или промежуточному представлению , причем каждое преобразование имеет связанный тест на законность. Преобразование (или последовательность преобразований) обычно должно сохранять временную последовательность всех зависимостей , если оно хочет сохранить результат программы (т. е. быть допустимым преобразованием). Оценка выгоды от преобразования или последовательности преобразований в рамках этого подхода может быть довольно сложной, поскольку применение одного полезного преобразования может потребовать предварительного использования одного или нескольких других преобразований, которые сами по себе приведут к снижению производительности.

Преобразования общего цикла включают в себя:

Унимодулярная структура трансформации

Подход унимодулярного преобразования [6] использует одну унимодулярную матрицу для описания совокупного результата последовательности многих из вышеупомянутых преобразований. Центральным элементом этого подхода является представление множества всех выполнений оператора в пределах n циклов как набора целочисленных точек в n -мерном пространстве, причем точки выполняются в лексикографическом порядке . Например, выполнение оператора, вложенного во внешний цикл с индексом i и внутренний цикл с индексом j, может быть связано с парами целых чисел ⁠ ⁠ . Применение унимодулярного преобразования соответствует умножению точек внутри этого пространства на матрицу. Например, обмену двумя циклами соответствует матрица .

Унимодулярное преобразование является законным, если оно сохраняет временную последовательность всех зависимостей ; измерить влияние унимодулярного преобразования на производительность сложнее. Несовершенно вложенные циклы и некоторые преобразования (например, мозаика) нелегко вписываются в эту структуру.

Многогранная структура или структура, основанная на ограничениях

Полиэдральная модель [7] обрабатывает более широкий класс программ и преобразований, чем унимодулярная модель. Набор выполнения набора операторов внутри, возможно, несовершенно вложенного набора циклов рассматривается как объединение набора многогранников, представляющих выполнение операторов. К этим многогранникам применяются аффинные преобразования , создающие описание нового порядка выполнения. Границы многогранников, зависимости данных и преобразования часто описываются с использованием систем ограничений, и этот подход часто называют подходом к оптимизации цикла, основанным на ограничениях . Например, один оператор во внешнем цикле ' for i:= 0 to n ' и внутреннем цикле ' for j := 0 to i+2 ' выполняется один раз для каждой пары (i, j) , так что 0 <= i <= n и 0 <= j <= i+2 .

Еще раз: преобразование является законным, если оно сохраняет временную последовательность всех зависимостей . Оценка преимуществ преобразования или поиск наилучшего преобразования для данного кода на данном компьютере остаются предметом продолжающихся исследований на момент написания этой статьи (2010 г.).

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

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

  1. ^ В книге «Рассуждения о преобразованиях программ» Жан-Франсуа Коллар подробно обсуждает общий вопрос представления выполнения программ, а не текста программы, в контексте статической оптимизации.
  2. ^ Дэвид Ф. Бэкон, Сьюзан Л. Грэм и Оливер Дж. Шарп. Преобразования компилятора для высокопроизводительных вычислений. Отчет № UCB/CSD 93/781, Отдел компьютерных наук-EECS, Калифорнийский университет, Беркли, Беркли, Калифорния 94720, ноябрь 1993 г. (доступен на сайте CiteSeer [1]). Представляет анализ компилятора, такой как анализ зависимости данных и межпроцедурный анализ, а также очень полный список преобразований цикла.
  3. ^ «Набор инструкций 8051» . www.win.tue.nl. ​Проверено 9 декабря 2019 г.
  4. ^ «Зона разработчиков Intel» .
  5. ^ «7.6.3.1 Strip-Mining (Sun Studio 12: Руководство по программированию на Фортране)» .
  6. ^ Стивен С. Мучник, Расширенный дизайн и реализация компилятора, 1997 Морган Кауфманн. В разделе 20.4.2 обсуждается оптимизация цикла.
  7. ^ Р. Аллен и К. Кеннеди. Оптимизация компиляторов для современных архитектур. Морган Кауфманн, 2002.