Sammenlægning af cyklusser

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 10. januar 2017; verifikation kræver 1 redigering .

Cycle merging (loop merging, eng.  loop fusion , eng.  loop jamming ) er en compiler-optimering , der slår flere cykler ved siden af ​​i cyklustræet sammen til én. Transformationen er mulig, hvis sløjferne har det samme antal iterationer og ikke er afhængige af hinanden ifølge . Cyklusfletning kan forbedre datalokaliteten [1] [2] , hvilket forbedrer cacheeffektiviteten .

Sammenlægning af loops reducerer ikke altid programudførelsestiden. På nogle arkitekturer kan det være mere fordelagtigt at udføre to loops i stedet for én kombineret loop, da f.eks. datalokaliteten i dette tilfælde kan være højere. I sådanne tilfælde kan der anvendes omvendt optimering, loop decomposition , som deler en loop i flere.

Eksempler

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

svarende til:

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

Noter

  1. Manjikian, N., Abdelrahman, T.S. Fusion of loops for parallelism and locality
  2. Steinberg B.Ya., Steinberg O.B., Vasilenko A.A. Fletningscyklusser for datalokalisering

Links