Расщепление тела цикла: различия между версиями
[непроверенная версия] | [непроверенная версия] |
MBHbot (обсуждение | вклад) м →top: замена lang-en по запросу на ВП:ЗКБВ, added underlinked tag |
MBHbot (обсуждение | вклад) м →top: орфо, replaced: путем → путём |
||
Строка 25: | Строка 25: | ||
Ключевой задачей таких оптимизаций является сокращение числа операций цикла. Здесь основным методом оптимизации является расщепление цикла на несколько циклов, для каждого из которых число команд, необходимых для упаковки тела цикла, строго меньше числа команд для исходного цикла. |
Ключевой задачей таких оптимизаций является сокращение числа операций цикла. Здесь основным методом оптимизации является расщепление цикла на несколько циклов, для каждого из которых число команд, необходимых для упаковки тела цикла, строго меньше числа команд для исходного цикла. |
||
Распределение полезно для изоляции цикловых зависимостей по данным при подготовке к векторизации цикла, для перестановок циклов или повышения локальности |
Распределение полезно для изоляции цикловых зависимостей по данным при подготовке к векторизации цикла, для перестановок циклов или повышения локальности путём уменьшения общего количества данных, на которые делаются ссылки при полном выполнении каждого цикла. |
||
== Примечания == |
== Примечания == |
Версия от 05:42, 29 апреля 2016
Этой статье нужно больше ссылок на другие статьи для интеграции в энциклопедию. |
Расщепление тела цикла (англ. Loop fission) — оптимизация компилятора, которая разбивает цикл в программе на несколько циклов, каждый из которых имеет те же индексные границы, однако содержит только часть тела исходного цикла.
Например, следующий код:
int i, a[100], b[100];
for (i = 0; i < 100; i++) {
a[i] = 1;
b[i] = 2;
}
в результате применения оптимизации преобразовывается в:
int i, a[100], b[100];
for (i = 0; i < 100; i++) {
a[i] = 1;
}
for (i = 0; i < 100; i++) {
b[i] = 2;
}
Ключевой задачей таких оптимизаций является сокращение числа операций цикла. Здесь основным методом оптимизации является расщепление цикла на несколько циклов, для каждого из которых число команд, необходимых для упаковки тела цикла, строго меньше числа команд для исходного цикла.
Распределение полезно для изоляции цикловых зависимостей по данным при подготовке к векторизации цикла, для перестановок циклов или повышения локальности путём уменьшения общего количества данных, на которые делаются ссылки при полном выполнении каждого цикла.
Примечания
См. также
Литература
- Альфред Ахо, Моника Лам, Рави Сети, Джеффри Ульман. Компиляторы: принципы, технологии и инструментарий = Compilers: Principles, Techniques, and Tools. — 2-е издание. — М.: «Вильямс», 2008. — 1184 с. — 1500 экз. — ISBN 978-5-8459-1349-4.
- Steven S. Muchnick. Advanced Compiler Design and Implementation. — 5-е издание. — San Francisco: Morgan Kaufmann Publishers, 1997. — 856 с. — ISBN 1-55860-320-4.
- Kennedy, Ken; & Allen, Randy. Optimizing Compilers for Modern Architectures: A Dependence-based Approach. — Morgan Kaufmann, 2001. — ISBN 1-55860-286-0.