I programmering er loop unwinding ( eng. loop unwinding ) eller loop unwinding ( eng. loop unrolling ) en teknik til optimering af computerprogrammer , som består i kunstigt at øge antallet af instruktioner, der udføres i løbet af én iteration af loopet . Som et resultat af at anvende denne optimering øges antallet af instruktioner, der potentielt kan udføres parallelt, og mere intensiv brug af registre , datacache og eksekveringsenheder bliver mulig.
konverteret til denne kode:
int i ; for ( i = 1 ; i < n - 3 ; i += 4 ) { a [ i ] = ( i % b [ i ]); a [ i + 1 ] = (( i + 1 ) % b [ i + 1 ]); a [ i + 2 ] = (( i + 2 ) % b [ i + 2 ]); a [ i + 3 ] = (( i + 3 ) % b [ i + 3 ]); }Denne type optimering overvejes i detaljer, for eksempel i Generalized Loop-Unrolling [1] . Det (sammen med opdelingen af loop-kroppen ) under visse betingelser (fraværet af dataafhængigheder mellem instruktioner i den nye loop) giver dig mulighed for at udføre loopen på flere processorer .
Der er også en usædvanlig måde at afvikle en sløjfe på, kaldet " Duff-enheden ", - på denne måde bruges lidt kendte og ikke-indlysende funktioner i C-sprogets syntaks .
En af ulemperne ved denne optimeringsmetode, når den bruges sammen med opsplitning af løkkelegemet til yderligere parallelisering, er, at datahentning fra hukommelsen begynder at blive udført ude af rækkefølge af dataene, hvilket kan påvirke effektiviteten af cachen negativt. En anden, mere passende form for optimering, der gør bedre brug af processorcaches, er loop parallelization .
Derudover stiger antallet af kommandoer, der udføres ved hver iteration, under afviklingen af løkken. Hvis dette tal overstiger kapaciteten af instruktionscachen, er dets betydelige fald muligt i stedet for den forventede stigning i effektiviteten af cyklusudførelsen.