Loop Unrolling
Silmukan purkaminen on silmukan muunnostekniikka, joka auttaa optimoimaan ohjelman suoritusajan. Pohjimmiltaan poistamme tai vähennämme iteraatioita. Silmukan purkaminen lisää ohjelman nopeutta poistamalla silmukan ohjauskäskyt ja silmukkatestiohjeet. Ohjelma 1: CPP
// This program does not uses loop unrolling. #include int main ( void ) { for ( int i = 0 ; i < 5 ; i ++ ) printf ( 'Hello n ' ); //print hello 5 times return 0 ; }
Ohjelma 2: CPP // This program uses loop unrolling. #include int main ( void ) { // unrolled the for loop in program 1 printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); printf ( 'Hello n ' ); return 0 ; }
Output: Hello Hello Hello Hello HelloKuva: Ohjelma 2 on tehokkaampi kuin ohjelma 1, koska ohjelmassa 1 on tarve tarkistaa i:n arvo ja kasvattaa i:n arvoa joka kerta silmukan ympäri. Joten tällaiset pienet silmukat tai silmukat, joissa on kiinteä määrä iteraatioita, voidaan rullata kokonaan auki silmukan ylikuormituksen vähentämiseksi.
Edut:
- Lisää ohjelman tehokkuutta.
- Vähentää silmukan ylärajaa.
- Jos silmukan lauseet eivät ole riippuvaisia toisistaan, ne voidaan suorittaa rinnakkain.
Haitat:
- Suurentunut ohjelmakoodin koko, mikä voi olla ei-toivottua.
- Mahdollista lisääntynyt rekisterin käyttö yhdessä iteraatiossa tilapäisten muuttujien tallentamiseen, mikä saattaa heikentää suorituskykyä.
- Hyvin pieniä ja yksinkertaisia koodeja lukuun ottamatta haaroja sisältävät auki rullatut silmukat ovat jopa hitaampia kuin rekursiot.