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

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

Например, следующий код:

 int i, a[100], b[100];
 for (i = 0; i < 100; i++) {
   a[i] = 1; 
   b[i] = 2;
 }

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

 int i, a[100], b[100];
 for (i = 0; i < 100; i++) {
   a[i] = 1;                     
 }
 for (i = 0; i < 100; i++) {
   b[i] = 2;
 }

Ключевой задачей таких оптимизаций является сокращение числа операций цикла. Здесь основным методом оптимизации является расщепление цикла на несколько циклов, для каждого из которых число команд, необходимых для упаковки тела цикла, строго меньше числа команд для исходного цикла.

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

ПримечанияПравить

См. такжеПравить

ЛитератураПравить