Inom programmering är loop unwinding ( eng. loop unwinding ) eller loop unwinding ( eng. loop unrolling ) en teknik för att optimera datorprogram , som består i att på konstgjord väg öka antalet instruktioner som exekveras under en iteration av loopen . Som ett resultat av att tillämpa denna optimering ökar antalet instruktioner som potentiellt kan exekveras parallellt, och mer intensiv användning av register , datacache och exekveringsenheter blir möjlig.
konverterat till denna kod:
int i ; för ( 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 ]); }Denna typ av optimering övervägs i detalj, till exempel i Generalized Loop-Unrolling [1] . Det (tillsammans med uppdelningen av loopkroppen ) under vissa förhållanden (avsaknaden av databeroende mellan instruktioner i den nya loopen) tillåter dig att exekvera loopen på flera processorer .
Det finns också ett ovanligt sätt att varva ner en loop, kallad " Duff-enheten ", - på detta sätt används föga kända och icke-uppenbara funktioner i syntaxen för C-språket .
En av nackdelarna med denna optimeringsmetod, när den används tillsammans med att dela slingkroppen för ytterligare parallellisering, är att datahämtning från minnet börjar utföras i ur ordning med data, vilket kan påverka cachens effektivitet negativt. En annan, mer lämplig typ av optimering som bättre utnyttjar processorcacher är loopparallellisering .
Dessutom, under avvecklingen av slingan, ökar antalet kommandon som exekveras vid varje iteration. Om detta antal överstiger kapaciteten för instruktionscachen, är dess betydande minskning möjlig istället för den förväntade ökningen av effektiviteten av cykelexekveringen.