Slinga avveckning

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 13 december 2019; verifiering kräver 1 redigering .

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.

Exempel

int i ; för ( i = 1 ; i < n ; i ++ ) { a [ i ] = ( i % b [ i ]); }

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 .

Nackdelar

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.

Anteckningar

  1. ↑ JC Huang , T. Leng, Generalized Loop-Unrolling: a Method for Program Speed-Up, 1998 

Länkar

  1. https://web.archive.org/web/20070422143153/http://www.insidepro.com/kk/036r.shtml
  2. https://web.archive.org/web/20090301182759/http://www.intel.com/cd/software/products/asmo-na/eng/compilers/277618.htm#hlo