Dataprogrammer er sett med instruksjoner gitt til maskinvare, for å utføre oppgaver. Disse programmene er for det meste skrevet på høyt språk, og datamaskinen forstår ikke språket. Derfor brukes en kompilator til å konvertere disse instruksjonene til maskinkode eller målkode. Det går gjennom flere faser for å bygge målkoden. Kodeoptimalisering er en av dem. Det er to optimaliseringsteknikker som maskinavhengig og maskinavhengig kodeoptimalisering. De nøkkelforskjell mellom maskinavhengig og maskinavhengig kodeoptimalisering er at Maskinavhengig optimalisering brukes på objektkoden mens maskinavhengig kodeoptimalisering brukes på mellomkoden.
1. Oversikt og nøkkelforskjell
2. Hva er Maskinavhengige Kodeoptimalisering
3. Hva er optimalisering av maskin uavhengig kode
4. Likheter mellom Machine Dependent og Machine Independent Code Optimization
5. Side ved side-sammenligning - Machine Dependent vs Machine Independent Code Optimization i tabellform
6. Sammendrag
Når du konverterer kildekoden til objektkode eller målkode, går kompilatoren gjennom flere faser. For det første er kildekoden gitt til Lexical analysator som produserer tokens. Da blir utgangen gitt til syntaksanalysator som undersøker om de genererte tokens er i logisk rekkefølge. Den utgangen er gitt til semantisk analysator. Anta at det er et stykke kode som p = q + r;
Her er p, q heltall, men r er en flyte. Ved hjelp av semantisk analysator blir c-integervariabelen omgjort til en flyte. Derfor gjør det den semantiske analysen. Utgangen fra den semantiske analysatoren går til mellomkodgeneratoren. Den returnerer en mellomkode som deretter går til kodeoptimereren. Kodeoptimalisering er prosessen med å eliminere de ikke-essensielle programoppgavene uten å endre betydningen av den faktiske kildekoden. Det er ikke en obligatorisk optimalisering, men det kan forbedre kjøretiden til målkoden. Utgangen av kodeoptimereren er gitt til kodegeneratoren, og til slutt er målkoden bygget.
Figur 01: Faser av kompilatoren
I maskinavhengig kodeoptimalisering blir optimalisering brukt på kildekoden. Fordeling av tilstrekkelig mengde ressurser kan forbedre utførelsen av programmet i denne optimaliseringen.
Når optimalisering er gjort på mellomkoden, kalles den maskin-uavhengig kodeoptimalisering. Det finnes forskjellige teknikker for å oppnå maskinavhengig kodeoptimalisering. De er beskrevet ved hjelp av følgende eksempler.
Les bunnlinjer med kode.
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 er beregnet, endres det ikke. Så, denne linjen kan plasseres utenfor løkken som følger.
b = x + 2;
for (j = 0; j< 10; j++)
a [j] = 5 * j;
Dette kalles kodebevegelse.
Les bunnlinjer med kode.
j = 5;
hvis (j == 10)
a = b + 20;
I følge koden ovenfor vil "hvis blokk" aldri utføres fordi j-verdien aldri vil være lik 10. Den er allerede initialisert til verdien 5. Derfor kan dette hvis blokk fjernes. Denne teknikken er død kode eliminering.
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 = a * 2; eller kan erstattes med tillegg, b = a + a;
Se under koden nedenfor.
for (j = 1; j <= 5; j ++)
verdi = j * 5;
I stedet for multiplikasjonen kan koden endres som følger.
int temp = 5;
for (j = 1; j<=5; j++)
temp = temp + 5;
verdi = temp;
Det er mulig å vurdere uttrykkene som er konstanter ved kjøring. Det kalles konstant folding. Det kan angis som b [j + 1] = c [j + 1];
I stedet kan den 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 ( “\ n”);
for (j = 0; j <5; j++)
printf ( “b \ n”);
Utskrift a og b, begge har samme antall iterasjoner. Begge kan kombineres til en for sløyfe som følger.
for (j = 0; j <5; j++)
printf ("a \ n");
printf ( “b \ n”);
En annen viktig teknikk er Vanlig subekspresjon eliminering. Det er å erstatte de samme uttrykkene med en enkelt variabel for å gjøre beregningen. Se underkoden.
a = b * c + k;
d = b * c + m;
Denne koden kan konverteres som følger.
temp = b * c;
a = temp + k;
d = temp + m;
Det er ikke nødvendig å beregne b * c igjen og igjen. Den multipliserte verdien kan lagres i en variabel og gjenbrukes.
Machine Dependent vs Machine Independent Code Optimization | |
Maskinavhengig kodeoptimalisering brukes til objektkode. | Maskinuavhengig kodeoptimalisering brukes på mellomkoden. |
Engasjement med maskinvare | |
Maskinavhengig optimalisering innebærer CPU-registre og absolutt minne referanser. | Maskin uavhengig kodeoptimalisering involverer ikke CPU-registre eller absolutt minne referanser. |
Kodeoptimalisering består av to optimaliseringsteknikker nemlig maskinavhengig og maskinavhengig kodeoptimalisering. Forskjellen mellom maskinavhengig og maskinavhengig kodeoptimalisering er at den maskinavhengige optimaliseringen blir brukt på objektkoden, mens den maskin-uavhengige kodeoptimalisering blir brukt på mellomkoden.
Du kan laste ned PDF-versjonen av denne artikkelen og bruke den til off-line formål som per sitatnotat. Vennligst last ned PDF-versjon her Forskjellen mellom maskinavhengig og maskinfri kodeoptimalisering
1. "Compiler Design | Kodeoptimalisering. "GeeksforGeeks. Tilgjengelig her
2.Point, opplæringsprogrammer. "Compiler Design - Kodeoptimalisering." Www.tutorialspoint.com, Tutorials Point, 15. august 2017. Tilgjengelig her
3.Estudies4you. "JNTUH CSE Study Material." Forskjellen mellom maskinavhengig og uavhengig kodeoptimalisering. Tilgjengelig her
1.'Compiler 'Av jeg, Surachit, (CC BY-SA 3.0) via Commons Wikimedia