c valodas koda optimizācija
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/1.jpg)
C valodas koda optimizācija
Dmitrijs Rutko
![Page 2: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/2.jpg)
Saturs Vēsture Attīstība Uzdevumi Optimizācijas līmeņi un stadijas Optimizācijas metodes
![Page 3: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/3.jpg)
Attīstības virzieni C standarti Kompilācijas laiks Koda pārnesamība Optimizācija
![Page 4: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/4.jpg)
Kompilatoru uzdevumi Koda translācija Optimizācija
Izmērs Ātrdarbība
Algoritma izvēle paliek galvenā
![Page 5: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/5.jpg)
Optimizācija līmeņi Operators Bloks Cikls Procedūra Programma
![Page 6: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/6.jpg)
Optimizācijas stadijas Izejas teksts -> starpforma Platformas neatkarīga optimizācija Platformas atkarīga optimizācija
![Page 7: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/7.jpg)
“Konstanšu / kopiju vairošana”
x = y;if(a < x && b < x) c
= x;
x = y;if(a < y && b < y) c
= y;
x = 2;if( a < x && b < x) c
= x;
x = 2;if(a < 2 && b < 2) c
= 2;
![Page 8: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/8.jpg)
“Konstantu savēršana”
x = y + 0;x = y * 0;x = y / 1.0;x = y / 0; // Kļūda
#define TWO 2 a = 1 + TWO;
a = 3;
![Page 9: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/9.jpg)
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;
![Page 10: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/10.jpg)
Kopējas izteiksmes (turp.)
if(a == 0)a = y * 3;
elseb = y * 3;
T1 = y * 3;if(a == 0)
a = T1;else
b = T1;
![Page 11: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/11.jpg)
Kopējas izteiksmes (turp.)if((h3 + k3) < 0 || (h3 + k3) > 5) printf(“...”);
mov AX,h3 mov AX,h3 add AX,k3 add AX,k3 jl @18 js L0187 mov AX,h3 cmp AX,5 add AX,k3 jle L0193 cmp AX,5 L0187: jle @17 mov AX,01.0000
@18: push AX mov AX,offset s@ call printf push AX add SP,2 call printf L0193: mov SP,BP
@17:
![Page 12: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/12.jpg)
Citas metodes Stipruma samazināšana
Reizināšanas un dalīšanas aizvietošana ar nobīdes operāciju
Nesasniedzama koda izslēgšana#define DEBUG 0if(DEBUG) printf("Debug Function\n");
Lieku piešķiršanu izslēgšanaa = 5; b = 0; a = b;
![Page 13: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/13.jpg)
Mainīgo sadalījums reģistros
a = i + 2;
b = a + 3; mov AX,Iadd AX,2mov a,AXmov AX,a // Lieksadd AX,3mov b,AX
![Page 14: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/14.jpg)
Invarianta koda iznešana
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;
![Page 15: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/15.jpg)
Invarianta koda iznešana (turp.)
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;
![Page 16: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/16.jpg)
Cikla indukcijas mainīga izslēgšana
for(i=0;i<100;i++) ivector[i*2+3]=5;
mov i,100
mov SI,OFFSET ivector+6
$L20006:
mov [SI],5
add SI,4
cmp SI,OFFSET ivector+406
jb $L20006
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:
![Page 17: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/17.jpg)
“Ciklu saplūšana”
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; }
![Page 18: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/18.jpg)
“Ciklu izjaukšana”
int a[3];for(int i = 0; i < 3; i++) a[i] = 0;
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
![Page 19: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/19.jpg)
“Ciklu izjaukšana” (turp.)
int a[10000];for(int i = 0; i < 10000; i++)
a[i] = 0;
mov CX,10000mov i,CXsub AX,AXmov DI,offset apush DSpop EScldrep stosw
![Page 20: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/20.jpg)
Funkciju izsaukšanas optimizācija Enter un Leave instrukcijas Parametru nodošana reģistros Inline direktīvas
![Page 21: C valodas koda optimizācija](https://reader035.vdocuments.pub/reader035/viewer/2022081513/568140e4550346895dacb0b4/html5/thumbnails/21.jpg)
Negatīvas puses Kompilācijas laika palielināšana “Atkļūdošanas” procesa
sarežģīšanās Potenciāls kļūdu avots