Odvíjení smyčky

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 13. prosince 2019; ověření vyžaduje 1 úpravu .

V programování je odvíjení smyčky ( angl.  loop unwinding ) nebo loop unwinding ( ang.  loop unrolling ) technika pro optimalizaci počítačových programů , která spočívá v umělém zvýšení počtu instrukcí provedených během jedné iterace smyčky . V důsledku použití této optimalizace se zvyšuje počet instrukcí, které mohou být potenciálně vykonávány paralelně, a je možné intenzivnější využívání registrů , datové mezipaměti a prováděcích jednotek.

Příklad

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

převedeno na tento kód:

int i ; pro ( 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 ]); }

Tento typ optimalizace je podrobně zvažován například v Generalized Loop-Unrolling [1] . To (spolu s rozdělením těla smyčky ) za určitých podmínek (neexistence datových závislostí mezi instrukcemi v nové smyčce) umožňuje spustit smyčku na několika procesorech .

Existuje také neobvyklý způsob, jak rozvinout smyčku, nazývanou " zařízení Duff ", - tímto způsobem se používají málo známé a nezřejmé vlastnosti syntaxe jazyka C.

Nevýhody

Jednou z nevýhod této optimalizační metody při použití společně s rozdělením těla smyčky pro další paralelizaci je, že načítání dat z paměti začíná být prováděno mimo pořadí dat, což může nepříznivě ovlivnit efektivitu cache. Dalším, vhodnějším druhem optimalizace, který lépe využívá mezipaměti procesoru, je paralelizace smyček .

Kromě toho se během odvíjení smyčky zvyšuje počet příkazů provedených v každé iteraci. Pokud toto číslo překročí kapacitu instrukční cache, pak místo očekávaného zvýšení efektivity provádění cyklu je možné jeho výrazné snížení.

Poznámky

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

Odkazy

  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