Расщепление петли - Loop splitting
Расщепление петли это оптимизация компилятора техника. Он пытается упростить петля или устраните зависимости, разбив его на несколько циклов, которые имеют одни и те же тела, но перебирают разные смежные части диапазона индекса.
Петлевой пилинг
Отслаивание цикла - это особый случай разделения цикла, при котором любые проблемные первые (или последние) несколько итераций из цикла отделяются и выполняются за пределами тела цикла.
Предположим, цикл был написан так:
int п = 10; за (int я=0; я<10; ++я) { у[я] = Икс[я] + Икс[п]; п = я; // добавляем i к переменной p }
Заметь р = 10
только для первой итерации, а для всех остальных итераций р = я - 1
. Компилятор может воспользоваться этим, раскручивание (или «отслаивание») первая итерация цикла.
После очистки первой итерации код будет выглядеть так:
у[0] = Икс[0] + Икс[10]; за (int я=1; я<10; ++я) { у[я] = Икс[я] + Икс[я-1]; }
Эта эквивалентная форма устраняет необходимость в переменной п
внутри тела цикла.
Петлевой пилинг был введен в gcc в версии 3.4. В GCC 7 было добавлено более общее разделение цикла.[1]
Краткая история термина
По-видимому, этот термин впервые использовали Каннингс, Томпсон и Сколник.[2] в своей статье 1976 года о вычислительных моделях для (человеческого) наследования. Там термин использовался для обозначения метода передачи фенотипической информации родителям. Отсюда этот термин снова использовался в их статьях, в том числе в их основополагающей статье о функциях вероятности в сложных родословных.[3]
В технологии компиляторов этот термин впервые появился в конце 1980-х годов в статьях по VLIW и суперскалярной компиляции, включая [4] и.[5]
Рекомендации
- ^ https://gcc.gnu.org/gcc-7/changes.html
- ^ Cannings, C .; Томпсон, Э. А .; Сколник, Х. Х. (1976). «Рекурсивный вывод правдоподобия по сложным родословным». Достижения в прикладной теории вероятностей. 8 (4): 622–625. Дои:10.2307/1425918.
- ^ Cannings, C .; Томпсон, Э. А .; Сколник, Х. Х. (1978). «Вероятностные функции на сложных родословных». Достижения в прикладной теории вероятностей. 10 (1): 26–61. Дои:10.2307/1426718.
- ^ Callahan, D .; Кеннеди, Кен (1988). "Компиляция программ для мультипроцессоров с распределенной памятью". Журнал суперкомпьютеров. 2 (2): 151–169. Дои:10.1007 / BF00128175.
- ^ Mahlke, S.A .; Lin, D. C .; Chen, W. Y .; Hank, R.E .; Брингман, Р. А. (1992). Эффективная поддержка компилятором для предиктивного выполнения с использованием гиперблока. 25-й ежегодный международный симпозиум по микроархитектуре. С. 45–54.
дальнейшее чтение
- Кеннеди, Кен; Аллен, Рэнди (2002). «Глава 5.7. Разделение набора индексов - Глава 5.7.2. Отслаивание петель». Оптимизация компиляторов для современных архитектур: подход, основанный на зависимостях (2011 г., цифровая печать, 1-е изд.). Академическая пресса / Издательство Morgan Kaufmann / Эльзевир. стр.211 –212. ISBN 978-1-55860-286-1. LCCN 2001092381. ISBN 1-55860-286-0.