Ögleöppning

Att öppna slingan ( engelsk  loop unswitching ) består i att ta villkoret ur slingan och duplicera slingans kropp med placeringen av motsvarande alternativ i motsvarande grenar av villkoret. Detta förbättrar prestandan på grund av det faktum att moderna processorer kan utföra vektoroperationer (denna optimeringstransformation kan utföras i samband med loopavlindning , och resultatet av avlindning är i sin tur flera operationer i iteration som utförs på successiva minnesområden som kan ersättas en vektor, om arkitekturen tillåter det, till exempel görs detta i ICC ). Det gör det också mer effektivt att köra slingan parallellt.

Transformationsexempel

för ( i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; om ( w ) { y [ i ] = 0 ; } }

Tillståndet inuti slingkroppen förhindrar att den parallelliseras. Efter öppning har den följande form:

om ( w ) { för ( i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; y [ i ] = 0 ; } } annan { för ( i = 0 ; i < 1000 ; i ++ ) { x [ i ] += y [ i ]; } }

Var och en av de resulterande cyklerna kan i sin tur optimeras separat.

Litteratur