Ciklusok összevonása

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2017. január 10-én felülvizsgált verziótól ; az ellenőrzéshez 1 szerkesztés szükséges .

A ciklusösszevonás (loop merging, eng.  loop fusion , eng.  loop jamming ) egy olyan fordítóoptimalizálás , amely a ciklusfában több szomszédos ciklust egyesít egybe . A transzformáció akkor lehetséges, ha a hurkok azonos számú iterációval rendelkeznek, és nem függenek egymástól az szerint . A ciklusos összevonás javíthatja az adatlokalitást [1] [2] , ami javítja a gyorsítótár hatékonyságát .

A hurkok összevonása nem mindig csökkenti a program végrehajtási idejét. Egyes architektúrákon előnyösebb lehet két hurok végrehajtása egy kombinált hurok helyett, mivel például ebben az esetben az adatlokalitás magasabb lehet. Ilyen esetekben alkalmazható a fordított optimalizálás, a ciklusbontás , amely egy hurkot több részre bont.

Példák

int i , a [ 100 ], b [ 100 ]; for ( i = 0 ; i < 100 ; i ++ ) a [ i ] = 1 ; for ( i = 0 ; i < 100 ; i ++ ) b [ i ] = 2 ;

egyenértékű:

int i , a [ 100 ], b [ 100 ]; for ( i = 0 ; i < 100 ; i ++ ) { a [ i ] = 1 ; b [ i ] = 2 ; }

Jegyzetek

  1. Manjikian, N., Abdelrahman, T. S. Hurok fúziója párhuzamosság és lokalitás érdekében
  2. Steinberg B.Ya., Steinberg O.B., Vasilenko A.A. Ciklusok összevonása az adatok lokalizálásához

Linkek