Deschiderea buclei

Deschiderea buclei ( English  loop unswitching ) constă în scoaterea condiției din buclă și duplicarea corpului buclei cu plasarea opțiunilor corespunzătoare în ramurile corespunzătoare ale condiției. Acest lucru îmbunătățește performanța datorită faptului că procesoarele moderne pot efectua operații vectoriale (această transformare de optimizare poate fi realizată în combinație cu derularea buclei , iar rezultatul derulării, la rândul său, este mai multe operații în iterație efectuate pe zone succesive de memorie care pot fi înlocuite un vector, dacă arhitectura permite acest lucru; de exemplu, acest lucru se face în ICC ). De asemenea, face mai eficientă rularea buclei în paralel.

Exemplu de transformare

pentru ( i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; dacă ( w ) { y [ i ] = 0 ; } }

Starea din interiorul corpului buclei împiedică paralelizarea acestuia. După deschidere, acesta ia următoarea formă:

dacă ( w ) { pentru ( i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; y [ i ] = 0 ; } } altfel { pentru ( i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; } }

Fiecare dintre ciclurile rezultate poate fi, la rândul său, optimizat separat.

Literatură