Выключение петли
Отключение цикла — это оптимизация компилятора . Он перемещает условное выражение внутри цикла за его пределы, дублируя тело цикла и помещая его версию внутри каждого из предложений if и else условного оператора. [1] Это может улучшить распараллеливание цикла. Поскольку современные процессоры могут быстро работать с векторами, это улучшение увеличивает скорость работы программы.
Вот простой пример. Предположим, мы хотим добавить два массива x и y , а также сделать что-то в зависимости от переменной w . У нас есть следующий код C :
int i, w, x[1000], y[1000];
for (i = 0; i < 1000; i++) {
x[i] += y[i];
if (w)
y[i] = 0;
}
Условие внутри этого цикла затрудняет безопасное распараллеливание этого цикла. Когда мы отключаем цикл, это становится:
int i, w, x[1000], y[1000];
if (w) {
for (i = 0; i < 1000; i++) {
x[i] += y[i];
y[i] = 0;
}
} else {
for (i = 0; i < 1000; i++) {
x[i] += y[i];
}
}
Хотя отключение цикла может удвоить объем написанного кода, каждый из этих новых циклов теперь можно оптимизировать отдельно.
Отключение цикла было введено в gcc в версии 3.4. [2]
Ссылки
[ редактировать ]- ^ Купер, Кейт; Торчон, Линда (2004). Разработка компилятора . ISBN 9781558606982 .
- ^ «Серия выпусков GCC 3.4 — изменения, новые функции и исправления — проект GNU» .