Jump to content

Разделение цикла

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

Петлевой пилинг

[ редактировать ]

Очистка цикла — это особый случай разделения цикла, при котором любые проблемные первые (или последние) несколько итераций цикла отделяются и выполняются вне тела цикла.

Предположим, цикл был написан следующим образом:

 интервал   р   =   10  ;   для   (  int   я знак  равно  0  ;   я  <  10  ;   ++  я  )   {     y  [  я  ]   знак равно   Икс  [  я  ]   +   Икс  [  п  ];     п   =   я  ;   } 

Обратите внимание, что p = 10 только для первой итерации и для всех остальных итераций, p = i - 1. Компилятор может воспользоваться этим, раскручивая (или «очищая») первую итерацию цикла.

После очистки первой итерации код будет выглядеть так:

 у  [  0  ]   =   х  [  0  ]   +   х  [  10  ];   для   (  int   я знак  равно  1  ;   я  <  10  ;   ++  я  )   {     y  [  я  ]   знак равно   Икс  [  я  ]   +   Икс  [  я  -1  ];   } 

Эта эквивалентная форма устраняет необходимость в переменной p внутри тела цикла.

Очищение циклов было введено в gcc в версии 3.4. Более обобщенное разделение циклов было добавлено в GCC 7. [1]

Краткая история термина

[ редактировать ]

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

В технологии компиляторов этот термин впервые появился в конце 1980-х годов в статьях о VLIW и суперскалярной компиляции, в том числе [4] и. [5]

  1. ^ Серия выпусков GCC 7 — Изменения, новые функции и исправления - Проект GNU
  2. ^ Каннингс, К.; Томпсон, Э.А.; Сколник, Х.Х. (1976). «Рекурсивный вывод вероятностей по сложным родословным». Достижения в области прикладной теории вероятности . 8 (4): 622–625. дои : 10.2307/1425918 . JSTOR   1425918 .
  3. ^ Каннингс, К.; Томпсон, Э.А.; Сколник, Х.Х. (1978). «Вероятностные функции на сложных родословных». Достижения в области прикладной теории вероятности . 10 (1): 26–61. дои : 10.2307/1426718 . JSTOR   1426718 .
  4. ^ Каллахан, Д.; Кеннеди, Кен (1988). «Компиляция программ для мультипроцессоров с распределенной памятью». Журнал суперкомпьютеров . 2 (2): 151–169. дои : 10.1007/BF00128175 . S2CID   10214341 .
  5. ^ Мальке, SA; Лин, округ Колумбия; Чен, Вайоминг; Хэнк, Р.Э.; Брингман, Р.А. (1992). Эффективная поддержка компилятором предикатного выполнения с использованием гиперблока . 25-й ежегодный международный симпозиум по микроархитектуре. стр. 45–54.

Дальнейшее чтение

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6ca55cbaabe59c4b6e7d0704a1e18bdb__1717117620
URL1:https://arc.ask3.ru/arc/aa/6c/db/6ca55cbaabe59c4b6e7d0704a1e18bdb.html
Заголовок, (Title) документа по адресу, URL1:
Loop splitting - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)