Løkkeafvikling

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 13. december 2019; verifikation kræver 1 redigering .

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.

Eksempel

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

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 .

Ulemper

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.

Noter

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

Links

  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