Sammanfogande cykler

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 10 januari 2017; verifiering kräver 1 redigering .

Cycle merging (loop merging, eng.  loop fusion , eng.  loop jamming ) är en kompilatoroptimering som slår samman flera cykler intill cykelträdet till en. Transformationen är möjlig om slingorna har samma antal iterationer och inte är beroende av varandra enligt . Cykelsammanslagning kan förbättra datalokaliteten [1] [2] , vilket förbättrar cacheeffektiviteten .

Sammanfogning av loopar minskar inte alltid programexekveringstiden. På vissa arkitekturer kan det vara mer fördelaktigt att köra två loopar istället för en kombinerad loop, eftersom till exempel datalokaliteten i detta fall kan vara högre. I sådana fall kan omvänd optimering tillämpas, loop decomposition , som delar upp en loop i flera.

Exempel

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

ekvivalent med:

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

Anteckningar

  1. Manjikian, N., Abdelrahman, T.S. Fusion of loops för parallellism och lokalitet
  2. Steinberg B.Ya., Steinberg O.B., Vasilenko A.A. Sammanfogande cykler för datalokalisering

Länkar