Топ питань
Часова шкала
Чат
Перспективи

Розщеплення циклу

спосіб оптимізації компілятора З Вікіпедії, вільної енциклопедії

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

Примітки

Література

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads