Hurok nyitása

A hurok megnyitása ( angolul  loop unswitching ) abból áll, hogy kivesszük a feltételt a ciklusból , és a ciklus törzsét megkettőzzük a megfelelő opciók elhelyezésével a feltétel megfelelő ágaiban. Ez javítja a teljesítményt annak a ténynek köszönhetően, hogy a modern processzorok vektorműveleteket is képesek végrehajtani (ez az optimalizáló transzformáció végrehajtható a hurok feltekercselésével együtt , és a letekercselés eredménye viszont több, egymást követő memóriaterületeken végrehajtott iterációs művelet, amelyek helyettesíthetők egy vektor, ha az architektúra lehetővé teszi; például ez megtörténik az ICC- ben). Hatékonyabbá teszi a hurok párhuzamos futtatását is.

Átalakítási példa

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

A huroktesten belüli állapot megakadályozza a párhuzamosítást. Megnyitás után a következő formában jelenik meg:

ha ( w ) { for ( i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; y [ i ] = 0 ; } } más { for ( i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; } }

A kapott ciklusok mindegyike külön-külön optimalizálható.

Irodalom