Cicluri de îmbinare

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 10 ianuarie 2017; verificarea necesită 1 editare .

Fuziunea ciclului (loop merging, eng.  loop fusion , eng.  loop jamming ) este o optimizare a compilatorului care îmbină mai multe cicluri adiacente în arborele ciclului într-unul singur. Transformarea este posibilă dacă buclele au același număr de iterații și nu depind unele de altele conform . Îmbinarea ciclului poate îmbunătăți localitatea datelor [1] [2] , ceea ce îmbunătățește eficiența cache-ului .

Fuzionarea buclelor nu reduce întotdeauna timpul de execuție a programului. Pe unele arhitecturi , poate fi mai benefic să executați două bucle în loc de o buclă combinată, deoarece, de exemplu, localitatea datelor în acest caz poate fi mai mare. În astfel de cazuri, se poate aplica optimizarea inversă, descompunerea buclei , care împarte o buclă în mai multe.

Exemple

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

echivalentă cu:

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

Note

  1. Manjikian, N., Abdelrahman, T.S. Fuziunea buclelor pentru paralelism și localitate
  2. Steinberg B.Ya., Steinberg O.B., Vasilenko A.A. Cicluri de îmbinare pentru localizarea datelor

Link -uri