Лучшие вопросы
Таймлайн
Чат
Перспективы

Расщепление цикла

оптимизация компилятора Из Википедии, свободной энциклопедии

Remove ads

Расщепление цикла (англ. loop splitting) — оптимизация компилятора, которая пытается упростить цикл или устранить зависимости в цикле, разбив его на несколько частей, имеющих одно и то же тело исходного цикла и различные диапазоны счётчика.

Отслаивание цикла

Отслаивание цикла (разгрузка цикла, от англ. loop peeling) является частным случаем расщепления цикла, при котором из основного цикла выносятся одна или несколько зависимых итераций.

Пример

Например, следующий код на языке Си:

int p = 10;
for (int i = 0; i < 10; ++i)
{
    y[i] = x[i] + x[p];
    p = i;
}

в результате применения оптимизации преобразовывается в:

y[0] = x[0] + x[10];
for (int i = 1; i < 10; ++i)
{
    y[i] = x[i] + x[i-1];
}

Таким образом, компилятор выносит первую итерацию, при которой p = 10, и изменяет цикл, ведь в остальных итерациях p = i-1.

Новый код равносилен предыдущему, однако устраняет необходимость в переменной р внутри тела цикла.

Впервые данная оптимизация появилась в GCC версии 3.4, и улучшилась в версии 7[1].

Remove ads

Примечания

Литература

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads