Light-industry-up.ru

Экосистема промышленности

Loop unswitching

18-08-2023

Loop unswitching (размыкание цикла) состоит в вынесении условия за пределы ICC). Кроме того, это позволяет более эффективно выполнить цикл параллельно.

Пример преобразования

for (i = 0; i < 1000; i++)
{
    x[i] = x[i] + y[i];
 
    if (w)
    {
        y[i] = 0;
    }
}

Условие внутри тела цикла мешает его распараллеливанию. После размыкания оно принимает следующий вид:

if (w)
{
    for (i = 0; i < 1000; i++)
    {
        x[i] = x[i] + y[i];
        y[i] = 0;
    }
}
else
{
    for (i = 0; i < 1000; i++)
    {
        x[i] = x[i] + y[i];
    }
}

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

Данный метод оптимизации появился в [1]

См. также

  1. http://www.insidepro.com/kk/036r.shtml

Loop unswitching.

© 2014–2023 light-industry-up.ru, Россия, Краснодар, ул. Листопадная 53, +7 (861) 501-67-06