Ključna razlika – ovisno o stroju u odnosu na optimizaciju koda neovisno o stroju
Kompjuterski programi su skupovi instrukcija datih hardveru za obavljanje zadataka. Ovi programi su uglavnom napisani na jezicima visokog nivoa, a kompjuter taj jezik ne razumije. Stoga se prevodilac koristi za pretvaranje tih instrukcija u mašinski ili ciljni kod. Prolazi kroz nekoliko faza kako bi se izgradio ciljni kod. Optimizacija koda je jedna od njih. Postoje dvije tehnike optimizacije kao što su optimizacija koda zavisna od stroja i optimizacija koda neovisna o stroju. Ključna razlika između strojno zavisne i strojno neovisne optimizacije koda je u tome što se strojno zavisna optimizacija primjenjuje na objektni kod, dok se optimizacija koda neovisna o stroju primjenjuje na međukod.
Šta je optimizacija koda zavisna od mašine?
Kada konvertuje izvorni kod u objektni ili ciljni kod, kompajler prolazi kroz nekoliko faza. Prvo, izvorni kod se daje Leksičkom analizatoru koji proizvodi tokene. Zatim se izlaz daje analizatoru sintakse koji istražuje da li su generirani tokeni u logičkom redu. Taj izlaz se daje semantičkom analizatoru. Pretpostavimo da postoji dio koda kao p=q + r;
Ovdje, p, q su cijeli brojevi, ali r je float. Korišćenjem semantičkog analizatora, c celobrojna varijabla se pretvara u float. Stoga, vrši semantičku analizu. Izlaz semantičkog analizatora ide u generator srednjeg koda. Vraća srednji kod koji zatim ide u optimizator koda. Optimizacija koda je proces eliminacije nebitnih programskih izraza bez promjene značenja stvarnog izvornog koda. To nije obavezna optimizacija, ali može poboljšati vrijeme rada ciljnog koda. Izlaz optimizatora koda se daje generatoru koda i konačno se gradi ciljni kod.
Slika 01: Faze kompajlera
U mašinskoj optimizaciji koda, optimizacija se primenjuje na izvorni kod. Alokacija dovoljne količine resursa može poboljšati izvođenje programa u ovoj optimizaciji.
Šta je mašina neovisna optimizacija koda?
Kada se vrši optimizacija na međukodu, to se naziva optimizacija koda neovisna o mašini. Postoje različite tehnike za postizanje strojno neovisne optimizacije koda. Oni su opisani na sljedećim primjerima.
Pročitajte donje linije koda.
za (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
Prema gore navedenom kodu, b=x+2 se izračunava iznova i iznova u svakoj iteraciji. Jednom kada se izračuna b, ne mijenja se. Dakle, ova linija se može postaviti izvan petlje na sljedeći način.
b=x+2;
za (j=0; j< 10; j++)
{a[j]=5j;
}
Ovo se zove kretanje koda.
Pročitajte donje linije koda.
j=5;
if (j==10) {
a=b+20;
}
Prema gornjem kodu, 'if blok' se nikada neće izvršiti jer j vrijednost nikada neće biti jednaka 10. Već je inicijalizirana na vrijednost 5. Stoga, ovaj if blok se može ukloniti. Ova tehnika je eliminacija mrtvog koda.
Druga metoda je smanjenje snage. Aritmetičke operacije poput množenja zahtijevaju više memorije, vremena i CPU ciklusa. Ovi skupi izrazi se mogu zamijeniti jeftinim izrazima poput b=a2; ili se može zamijeniti sabiranjem, b=a + a;
Pogledajte kod ispod.
za (j=1; j <=5; j ++) {
vrijednost=j5;
}
Umjesto množenja, kod se može promijeniti na sljedeći način.
int temp=5;
za (j=1; j<=5; j++) {
temp=temp + 5;
vrijednost=temp;
}
Moguće je procijeniti izraze koji su konstante u vremenu izvođenja. To se zove konstantno preklapanje. Može se navesti kao što je b[j+1]=c [j+1];
Umjesto toga, može se promijeniti na sljedeći način.
n=j +1;
b[n]=c[n];
Mogu postojati petlje na sljedeći način.
za (j=0; j<5; j++) {
printf(“a\n”);
}
za (j=0; j <5; j++) {
printf(“b\n”);
}
Štampanje a i b, oba imaju isti broj iteracija. Oba se mogu kombinovati u jednu for petlju na sljedeći način.
za (j=0; j <5; j++) {
printf(“a \n”);
printf(“b\n”);
}
Još jedna važna tehnika je eliminacija zajedničkog podizraza. Zamjena identičnih izraza sa jednom promjenljivom radi izračunavanja. Pogledajte kod ispod.
a=bc + k;
d=b c + m;
Ovaj kod se može pretvoriti na sljedeći način.
temp=bc;
a=temp + k;
d=temp + m;
Nije potrebno računati bc iznova i iznova. Pomnožena vrijednost se može pohraniti u varijablu i ponovo koristiti.
Koja je sličnost između mašinski zavisne i mašinski nezavisne optimizacije koda?
Obe pripadaju kodu Optimization
Koja je razlika između mašinski zavisne i mašinski nezavisne optimizacije koda?
Ovisna o mašini vs optimizacija koda nezavisna od mašine |
|
Optimizacija koda zavisna od mašine se primenjuje na objektni kod. | Optimizacija koda neovisna o stroju primjenjuje se na srednji kod. |
Uključenost u hardver | |
Optimizacija zavisna od mašine uključuje CPU registre i apsolutne memorijske reference. | Optimizacija koda neovisna o stroju ne uključuje CPU registre ili apsolutne memorijske reference. |
Sažetak – Optimizacija koda zavisna od stroja u odnosu na optimizaciju koda neovisna o stroju
Optimizacija koda se sastoji od dvije tehnike optimizacije, odnosno, strojno zavisne i strojno neovisne optimizacije koda. Razlika između strojno zavisne i strojno neovisne optimizacije koda je u tome što se strojno zavisna optimizacija primjenjuje na objektni kod dok se strojno neovisna optimizacija koda primjenjuje na međukod.
Preuzmite PDF verziju optimizacije koda zavisne od mašine u odnosu na mašinski nezavisnu optimizaciju
Možete preuzeti PDF verziju ovog članka i koristiti ga za vanmrežne svrhe prema napomeni o citatu. Molimo preuzmite PDF verziju ovdje Razlika između strojno zavisne i strojno neovisne optimizacije koda