1 / 21

C valodas koda optimizācija

C valodas koda optimizācija. Dmitrijs Rutko. Saturs. Vēsture Attīstība Uzdevumi Optimizācijas līmeņi un stadijas Optimizācijas metodes. Attīstības virzieni. C standarti Kompilācijas laiks Koda pārnesamība Optimizācija. Kompilatoru uzdevumi. Koda translācija Optimizācija Izmērs

alban
Download Presentation

C valodas koda optimizācija

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C valodas koda optimizācija Dmitrijs Rutko

  2. Saturs • Vēsture • Attīstība • Uzdevumi • Optimizācijas līmeņi un stadijas • Optimizācijas metodes

  3. Attīstības virzieni • C standarti • Kompilācijas laiks • Koda pārnesamība • Optimizācija

  4. Kompilatoru uzdevumi • Koda translācija • Optimizācija • Izmērs • Ātrdarbība • Algoritma izvēle paliek galvenā

  5. Optimizācija līmeņi • Operators • Bloks • Cikls • Procedūra • Programma

  6. Optimizācijas stadijas • Izejas teksts -> starpforma • Platformas neatkarīga optimizācija • Platformas atkarīga optimizācija

  7. x = y; if(a < x && b < x) c = x; x = y; if(a < y && b < y) c = y; “Konstanšu / kopiju vairošana” x = 2; if( a < x && b < x) c = x; x = 2; if(a < 2 && b < 2) c = 2;

  8. x = y + 0; x = y * 0; x = y / 1.0; x = y / 0; // Kļūda “Konstantu savēršana” #define TWO 2 a = 1 + TWO; a = 3;

  9. Kopējas izteiksmes if( a[y*3] < 0 || b[y*3] > 10) a[y*3] = 0; T1 = y*3; A1 = &a[T1]; A2 = &b[T1]; if( *A1 < 0 || *A2 > 10) *A1 = 0;

  10. Kopējas izteiksmes (turp.) if(a == 0) a = y * 3; else b = y * 3; T1 = y * 3; if(a == 0) a = T1; else b = T1;

  11. Kopējas izteiksmes (turp.) if((h3 + k3) < 0 ||(h3 + k3) > 5)printf(“...”); mov AX,h3mov AX,h3 add AX,k3add AX,k3 jl @18js L0187 mov AX,h3cmp AX,5 add AX,k3jle L0193 cmp AX,5L0187: jle @17mov AX,01.0000 @18:push AX mov AX,offset s@call printf push AXadd SP,2 call printfL0193: mov SP,BP @17:

  12. Citas metodes • Stipruma samazināšana • Reizināšanas un dalīšanas aizvietošana ar nobīdes operāciju • Nesasniedzama koda izslēgšana #define DEBUG 0 if(DEBUG)printf("Debug Function\n"); • Lieku piešķiršanu izslēgšana a = 5; b = 0; a = b;

  13. a = i + 2; b = a + 3; mov AX,I add AX,2 mov a,AX mov AX,a // Lieks add AX,3 mov b,AX Mainīgo sadalījums reģistros

  14. unsigned char i,j,k,v,x; for (i = 0; i < v; i++) x = i * (j+k); T1 = j + k; for(i = 0; i < v; i++) x = i * T1; Invarianta koda iznešana

  15. T1 = j + k; for(i = 0; i < v; i++) x = i * T1; T1 = j + k; for(x = 0; x< T1 * v; x += T1) ; i = v; Invarianta koda iznešana (turp.)

  16. for(i=0;i<100;i++)ivector[i*2+3]=5; Cikla indukcijas mainīga izslēgšana mov AX,0 mov i,AX cmp AX,100 jge L134 L11B: mov BX,i shl BX,1 shl BX,1 mov ivector+6[BX],5 inc i cmp i,100 jl L11B L134: mov i,100 mov SI,OFFSET ivector+6 $L20006: mov [SI],5 add SI,4 cmp SI,OFFSET ivector+406 jb $L20006

  17. for(i = 0; i < 10; i++)a = b + c; for(i = 0; i < 10; i++)d = e + f; for(i = 0; i < 10; i++) { a = b + c; d = e + f; } “Ciklu saplūšana”

  18. int a[3]; for(int i = 0; i < 3; i++) a[i] = 0; “Ciklu izjaukšana” mov i,0 LOOP: mov BX,I shl BX,1 mov a[BX],0 inc i cmp i,3 jl LOOP mov a,0 mov a+2,0 mov a+4,0

  19. int a[10000]; for(int i = 0; i < 10000; i++) a[i] = 0; mov CX,10000 mov i,CX sub AX,AX mov DI,offset a push DS pop ES cld rep stosw “Ciklu izjaukšana” (turp.)

  20. Funkciju izsaukšanas optimizācija • Enter un Leave instrukcijas • Parametru nodošana reģistros • Inline direktīvas

  21. Negatīvas puses • Kompilācijas laika palielināšana • “Atkļūdošanas” procesa sarežģīšanās • Potenciāls kļūdu avots

More Related