Оптимизации циклов Loop Interchange – перестановка циклов for ( i = 0; i < N; i++ ) for ( j = 0; j < M; j++ ) c [j] [i] = a [j] [i] * k; Применимость: 1)Гнездо циклов плотное (для любого 1
Оптимизации циклов Loop Fusion – слияние циклов for ( i = 0; i < N; i ++ ) a [i] = a [i] + m; for ( i = 0; i < N; i ++ ) b [i] = b [i] * k; Применимость: 1)Циклы смежные 2)Циклы с одним выходом 3)Отсутствуют перекрестные зависимости 4)Циклы не содержат CALL
Оптимизации циклов Runtime Memory Disambiguation – динамический разрыв зависимостей for ( i = …, j = … ; i < … j < ; i += …, j += … ) a [i] = …; … … = … + a [j] …; for ( i = …, j = … ; i < … j < ; i += …, j += … ) if ( i == j ) … = … + a [j] …; … a [i] = …;
Оптимизации циклов Loop Peeling – вынос итераций из цикла while ( cond )if ( cond ) expr; while ( cond ) expr; Full Loop Peeling (Loop To Scalar) – раскрутка цикла for ( i = 0; i < 2; i++ )i = 0; expr; expr;i = 1; expr; i = 2;
Оптимизации циклов Loop Nesting– слияние циклов for ( i = 0; i < N; i++ ) if ( cond ) expr; i = 0; label1: for ( ; i < N; i++ ) if ( cond ) goto label2; goto end; label2: expr; goto label1; end: ;
Оптимизации циклов Loop Unswitching – раскоммутация циклов for ( i = 0; i < N; i++ ) if ( cond ) a [i] = 0; else b [i] = 0; if ( cond ) for ( i = 0; i < N; i++ ) a [i] = a [i] + m; else for ( i = 0; i < N; i++ ) b [i] = b [i] * k; Применимость: Внутри цикла есть инвариантные условия
Оптимизации циклов Loop Collapsing – слияние циклов for ( i = 0; i
Оптимизации циклов Loop Unroll – раскрутка циклов for ( i = 2; i
Оптимизации циклов Loop Under Condition– постановка цикла под условие for ( i = 0; i < N; i++ ) x = x + y; if ( cond ) a = x; if ( cond ) for ( i = 0; i < N; i++ ) x = x + y; a = x;