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