Ključna razlika – optimizacija kode, odvisna od stroja, v primerjavi s strojno neodvisno
Računalniški programi so nizi navodil, danih strojni opremi za izvajanje nalog. Ti programi so večinoma napisani v jezikih visoke ravni, računalnik pa tega jezika ne razume. Zato se za pretvorbo teh navodil v strojno kodo ali ciljno kodo uporablja prevajalnik. Za izdelavo ciljne kode gre skozi več faz. Optimizacija kode je ena izmed njih. Obstajata dve tehniki optimizacije, kot sta strojno odvisna in strojno neodvisna optimizacija kode. Ključna razlika med strojno odvisno in strojno neodvisno optimizacijo kode je, da se strojno odvisna optimizacija uporablja za objektno kodo, medtem ko se strojno neodvisna optimizacija kode uporablja za vmesno kodo.
Kaj je strojno odvisna optimizacija kode?
Pri pretvorbi izvorne kode v objektno kodo ali ciljno kodo gre prevajalnik skozi več faz. Najprej se izvorna koda preda leksikalnemu analizatorju, ki izdela žetone. Nato se izhod posreduje analizatorju sintakse, ki razišče, ali so ustvarjeni žetoni v logičnem vrstnem redu. Ta rezultat je dan semantičnemu analizatorju. Predpostavimo, da obstaja del kode kot p=q + r;
Tukaj sta p, q cela števila, r pa je lebdeči. Z uporabo semantičnega analizatorja se celoštevilska spremenljivka c pretvori v float. Zato izvaja semantično analizo. Izhod semantičnega analizatorja gre v generator vmesne kode. Vrne vmesno kodo, ki gre nato v optimizator kode. Optimizacija kode je postopek odstranjevanja nebistvenih programskih stavkov brez spreminjanja pomena dejanske izvorne kode. To ni obvezna optimizacija, vendar lahko izboljša čas delovanja ciljne kode. Izhod optimizatorja kode je predan generatorju kode in na koncu je zgrajena ciljna koda.
Slika 01: Faze prevajalnika
Pri strojno odvisni optimizaciji kode se optimizacija uporabi za izvorno kodo. Dodeljevanje zadostne količine sredstev lahko izboljša izvajanje programa v tej optimizaciji.
Kaj je strojno neodvisna optimizacija kode?
Ko se optimizacija izvaja na vmesni kodi, se imenuje strojno neodvisna optimizacija kode. Obstajajo različne tehnike za doseganje strojno neodvisne optimizacije kode. Opisani so z naslednjimi primeri.
Preberite spodnje vrstice kode.
za (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
V skladu z zgornjo kodo se b=x+2 vedno znova izračuna v vsaki ponovitvi. Ko je b enkrat izračunan, se ne spremeni. Torej, to vrstico lahko postavite izven zanke, kot sledi.
b=x+2;
za (j=0; j< 10; j++)
{a[j]=5j;
}
To se imenuje premikanje kode.
Preberite spodnje vrstice kode.
j=5;
if (j==10) {
a=b+20;
}
Glede na zgornjo kodo se 'if block' ne bo nikoli izvedel, ker vrednost j nikoli ne bo enaka 10. Inicializiran je že na vrednost 5. Zato je ta blok if mogoče odstraniti. Ta tehnika je odstranjevanje mrtve kode.
Druga metoda je zmanjšanje moči. Aritmetične operacije, kot je množenje, zahtevajo več pomnilnika, časa in ciklov procesorja. Te drage izraze je mogoče nadomestiti s poceni izrazi, kot je b=a2; ali se lahko nadomesti z dodatkom, b=a + a;
Glejte spodnjo kodo.
za (j=1; j <=5; j ++) {
vrednost=j5;
}
Namesto množenja lahko kodo spremenite na naslednji način.
int temp=5;
za (j=1; j<=5; j++) {
temp=temp + 5;
value=temp;
}
Možno je ovrednotiti izraze, ki so konstante med izvajanjem. Imenuje se konstantno zlaganje. Lahko se navede kot b[j+1]=c [j+1];
Namesto tega se lahko spremeni na naslednji način.
n=j +1;
b[n]=c[n];
Lahko so naslednje zanke.
za (j=0; j<5; j++) {
printf(“a\n”);
}
za (j=0; j <5; j++) {
printf(“b\n”);
}
Tiskanje a in b, oba imata enako število ponovitev. Oboje je mogoče združiti v eno zanko for, kot sledi.
za (j=0; j <5; j++) {
printf(“a \n”);
printf(“b\n”);
}
Druga pomembna tehnika je izločanje pogostih podizrazov. Gre za zamenjavo identičnih izrazov z eno samo spremenljivko za izračun. Oglejte si spodnjo kodo.
a=bc + k;
d=b c + m;
To kodo je mogoče pretvoriti na naslednji način.
temp=bc;
a=temp + k;
d=temp + m;
Ni treba znova in znova računati bc. Pomnoženo vrednost je mogoče shraniti v spremenljivko in ponovno uporabiti.
Kakšna je podobnost med strojno odvisno in strojno neodvisno optimizacijo kode?
Oboje pripada optimizaciji kode
Kakšna je razlika med strojno odvisno in strojno neodvisno optimizacijo kode?
Strojno odvisna vs strojno neodvisna optimizacija kode |
|
Strojno odvisna optimizacija kode je uporabljena za objektno kodo. | Strojno neodvisna optimizacija kode se uporablja za vmesno kodo. |
Vključenost s strojno opremo | |
Optimizacija, odvisna od stroja, vključuje registre procesorja in absolutne reference pomnilnika. | Strojno neodvisna optimizacija kode ne vključuje registrov procesorja ali absolutnih referenc pomnilnika. |
Povzetek – Optimizacija kode, ki je odvisna od stroja v primerjavi s strojno neodvisno
Optimizacija kode je sestavljena iz dveh optimizacijskih tehnik, in sicer strojno odvisne in strojno neodvisne optimizacije kode. Razlika med strojno odvisno in strojno neodvisno optimizacijo kode je v tem, da se strojno odvisna optimizacija uporablja za objektno kodo, medtem ko se strojno neodvisna optimizacija kode uporablja za vmesno kodo.
Prenesite PDF različico strojno odvisne in strojno neodvisne optimizacije kode
Lahko prenesete PDF različico tega članka in jo uporabite za namene brez povezave v skladu z opombo o citiranju. Prenesite različico PDF tukaj. Razlika med strojno odvisno in strojno neodvisno optimizacijo kode