Топ питань
Часова шкала
Чат
Перспективи
Розщеплення циклу
спосіб оптимізації компілятора З Вікіпедії, вільної енциклопедії
Remove ads
Розщеплення циклу (англ. loop splitting) — оптимізація компілятора, яка намагається спростити цикл або усунути залежності в циклі, розбивши його на кілька частин, що мають одне і те саме тіло циклу і різні діапазони лічильника.
Розглянемо, наприклад, такий код:
int p = 10;
for (int i=0; i<10; ++i)
{
y[i] = x[i] + x[p];
p = i;
}
Зауважимо, що p = 10
лише для першої ітерації, а для всіх інших ітерацій p = i - 1
. Компілятор може скористатися цим, розмотавши (або «відщепивши») першу ітерацію циклу.
Після застосування оптимізації код стане таким:
y[0] = x[0] + x[10];
for (int i=1; i<10; ++i)
{
y[i] = x[i] + x[i-1];
}
Новий код рівносильний попередньому, проте усуває необхідність у змінній р всередині тіла циклу.
Вперше ця оптимізація з'явилася в GCC версії 3.4. Більш узагальнене розщеплення циклу додано в GCC 7.[1]
Remove ads
Примітки
Література
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads