Nøkkelforskjell – maskinavhengig vs maskinuavhengig kodeoptimalisering
Dataprogram er sett med instruksjoner gitt til maskinvare for å utføre oppgaver. Disse programmene er stort sett skrevet på høynivåspråk, og datamaskinen forstår ikke det språket. Derfor brukes en kompilator til å konvertere disse instruksjonene til maskinkode eller målkode. Den går gjennom flere faser for å bygge målkoden. Kodeoptimalisering er en av dem. Det er to optimaliseringsteknikker som maskinavhengig og maskinuavhengig kodeoptimalisering. Nøkkelforskjellen mellom maskinavhengig og maskinuavhengig kodeoptimalisering er at den maskinavhengige optimaliseringen brukes på objektkode mens maskinuavhengig kodeoptimalisering brukes på mellomkoden.
Hva er maskinavhengig kodeoptimalisering?
Når du konverterer kildekoden til objektkode eller målkode, går kompilatoren gjennom flere faser. Først blir kildekoden gitt til Lexical analysator som produserer tokens. Deretter blir utdata gitt til syntaksanalysator som undersøker om de genererte tokenene er i logisk rekkefølge. Denne utgangen blir gitt til den semantiske analysatoren. Anta at det er en kodebit som p=q + r;
Her er p, q heltall, men r er en flyte. Ved å bruke den semantiske analysatoren konverteres c heltallsvariabelen til en flyte. Derfor utfører den den semantiske analysen. Utgangen fra den semantiske analysatoren går til mellomkodegeneratoren. Den returnerer en mellomkode som deretter går til kodeoptimereren. Kodeoptimalisering er prosessen med å eliminere de ikke-essensielle programsetningene uten å endre betydningen av den faktiske kildekoden. Det er ikke en obligatorisk optimalisering, men det kan forbedre kjøretiden til målkoden. Utdataene fra kodeoptimalisatoren blir gitt til kodegeneratoren, og til slutt bygges målkoden.
Figur 01: Faser av kompilatoren
I maskinavhengig kodeoptimalisering brukes optimalisering på kildekoden. Tildeling av tilstrekkelig mengde ressurser kan forbedre gjennomføringen av programmet i denne optimaliseringen.
Hva er maskinuavhengig kodeoptimalisering?
Når optimalisering gjøres på mellomkoden, kalles det maskinuavhengig kodeoptimalisering. Det finnes forskjellige teknikker for å oppnå maskinuavhengig kodeoptimalisering. De er beskrevet ved hjelp av følgende eksempler.
Les nedenfor kodelinjer.
for (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
I henhold til koden ovenfor, beregnes b=x+2 igjen og igjen i hver iterasjon. Når b først er beregnet, endres den ikke. Så denne linjen kan plasseres utenfor sløyfen som følger.
b=x+2;
for (j=0; j< 10; j++)
{a[j]=5j;
}
Dette kalles kodebevegelse.
Les nedenfor kodelinjer.
j=5;
if (j==10) {
a=b+20;
}
I følge koden ovenfor, vil 'if block' aldri utføres fordi j-verdien aldri vil være lik 10. Den er allerede initialisert til verdien 5. Derfor kan denne if-blokken fjernes. Denne teknikken er eliminering av død kode.
En annen metode er styrkereduksjon. Aritmetiske operasjoner som multiplikasjon krever mer minne, tid og CPU-sykluser. Disse dyre uttrykkene kan erstattes av billige uttrykk som b=a2; eller kan erstattes med addisjon, b=a + a;
Se koden nedenfor.
for (j=1; j <=5; j ++) {
value=j5;
}
I stedet for multiplikasjon kan koden endres som følger.
int temp=5;
for (j=1; j<=5; j++) {
temp=temp + 5;
value=temp;
}
Det er mulig å evaluere uttrykkene som er konstanter under kjøring. Det kalles konstant folding. Det kan oppgis som b[j+1]=c [j+1];
I stedet kan det endres som følger.
n=j +1;
b[n]=c[n];
Det kan være løkker som følger.
for (j=0; j<5; j++) {
printf(“a\n”);
}
for (j=0; j <5; j++) {
printf(“b\n”);
}
Skriver ut a og b, begge har samme antall iterasjoner. Begge kan kombineres til én for loop som følger.
for (j=0; j <5; j++) {
printf(“a \n”);
printf(“b\n”);
}
En annen viktig teknikk er eliminering av felles underuttrykk. Det er å erstatte de identiske uttrykkene med en enkelt variabel for å gjøre beregningen. Se koden nedenfor.
a=bc + k;
d=b c + m;
Denne koden kan konverteres som følger.
temp=bc;
a=temp + k;
d=temp + m;
Det er ikke nødvendig å beregne bc igjen og igjen. Den multipliserte verdien kan lagres i en variabel og gjenbrukes.
Hva er likheten mellom maskinavhengig og maskinuavhengig kodeoptimalisering?
Begge disse tilhører kodeoptimalisering
Hva er forskjellen mellom maskinavhengig og maskinuavhengig kodeoptimalisering?
Maskinavhengig vs maskinuavhengig kodeoptimalisering |
|
Maskinavhengig kodeoptimalisering brukes på objektkode. | Maskinuavhengig kodeoptimalisering brukes på mellomkode. |
Involvering med maskinvare | |
Maskinavhengig optimalisering involverer CPU-registre og absolutte minnereferanser. | Maskinuavhengig kodeoptimalisering involverer ikke CPU-registre eller absolutte minnereferanser. |
Sammendrag – maskinavhengig vs maskinuavhengig kodeoptimalisering
Kodeoptimalisering består av to optimaliseringsteknikker, nemlig maskinavhengig og maskinuavhengig kodeoptimalisering. Forskjellen mellom maskinavhengig og maskinuavhengig kodeoptimalisering er at den maskinavhengige optimaliseringen brukes på objektkode, mens den maskinuavhengige kodeoptimeringen brukes på mellomkode.
Last ned PDF-versjonen av maskinavhengig vs maskinuavhengig kodeoptimalisering
Du kan laste ned PDF-versjonen av denne artikkelen og bruke den til offline-formål i henhold til sitat. Last ned PDF-versjon her Forskjellen mellom maskinavhengig og maskinuavhengig kodeoptimalisering