Forskellen Mellem Maskinafhængig Og Maskinuafhængig Kodeoptimering

Indholdsfortegnelse:

Forskellen Mellem Maskinafhængig Og Maskinuafhængig Kodeoptimering
Forskellen Mellem Maskinafhængig Og Maskinuafhængig Kodeoptimering

Video: Forskellen Mellem Maskinafhængig Og Maskinuafhængig Kodeoptimering

Video: Forskellen Mellem Maskinafhængig Og Maskinuafhængig Kodeoptimering
Video: Реклама подобрана на основе следующей информации: 2024, Kan
Anonim

Nøgleforskel - Maskinafhængig vs maskineuafhængig kodeoptimering

Computerprogrammer er sæt instruktioner, der gives til hardware, til at udføre opgaver. Disse programmer er for det meste skrevet på sprog på højt niveau, og computeren forstår ikke dette sprog. Derfor bruges en compiler til at konvertere disse instruktioner til maskinkode eller målkode. Det går gennem flere faser for at oprette målkoden. Kodeoptimering er en af dem. Der er to optimeringsteknikker som maskinafhængig og maskinuafhængig kodeoptimering. Hovedforskellen mellem maskinafhængig og maskinuafhængig kodeoptimering er, at den maskinafhængige optimering anvendes på objektkode, mens maskinuafhængig kodeoptimering anvendes på den mellemliggende kode.

INDHOLD

1. Oversigt og nøgleforskel

2. Hvad er maskinafhængig kodeoptimering

3. Hvad er maskineuafhængig kodeoptimering

4. Ligheder mellem maskineafhængig og maskineafhængig kodeoptimering

5. Sammenligning side om side - maskinafhængig vs maskineuafhængig kodeoptimering i tabelform

6. Resume

Hvad er maskinafhængig kodeoptimering?

Ved konvertering af kildekoden til objektkode eller målkode går compileren gennem flere faser. For det første gives kildekoden til Lexical analysator, der producerer tokens. Derefter gives output til syntaksanalysator, som undersøger, om de genererede tokens er i logisk rækkefølge. Denne output gives til den semantiske analysator. Antag at der er et stykke kode som p = q + r;

Her er p, q heltal, men r er en float. Ved hjælp af den semantiske analysator konverteres c-heltalsvariablen til en float. Derfor analyserer den semantisk. Outputtet fra den semantiske analysator går til den mellemliggende kodegenerator. Det returnerer en mellemkode, som derefter går til kodeoptimering. Kodeoptimering er processen med at fjerne de ikke-væsentlige programudtalelser uden at ændre betydningen af den faktiske kildekode. Det er ikke en obligatorisk optimering, men det kan forbedre kørselstiden for målkoden. Output fra kodeoptimeringsværktøjet gives til kodegeneratoren, og endelig bygges målkoden.

Forskellen mellem maskinafhængig og maskinuafhængig kodeoptimering
Forskellen mellem maskinafhængig og maskinuafhængig kodeoptimering

Figur 01: Compilerens faser

I maskinafhængig kodeoptimering anvendes optimering til kildekoden. Tildeling af tilstrækkelig mængde ressourcer kan forbedre gennemførelsen af programmet i denne optimering.

Hvad er maskinuafhængig kodeoptimering?

Når optimering udføres på den mellemliggende kode, kaldes den maskineuafhængig kodeoptimering. Der er forskellige teknikker til at opnå maskinuafhængig kodeoptimering. De er beskrevet ved hjælp af følgende eksempler.

Læs nedenstående kodelinjer.

for (j = 0; j <10; j ++) {

b = x + 2;

a [j] = 5 * j;

}

I henhold til ovenstående kode beregnes b = x + 2 igen og igen i hver iteration. Når b er beregnet, ændres det ikke. Så denne linje kan placeres uden for løkken som følger.

b = x + 2;

for (j = 0; j <10; j ++)

{a [j] = 5 * j;

}

Dette kaldes kodebevægelse.

Læs nedenstående kodelinjer.

j = 5;

hvis (j == 10) {

a = b + 20;

}

Ifølge ovenstående kode udføres 'hvis blok' aldrig, fordi j-værdien aldrig vil være lig med 10. Den er allerede initialiseret til værdien 5. Derfor kan denne, hvis blokken kan fjernes. Denne teknik er eliminering af død kode.

En anden metode er styrkereduktion. Aritmetiske operationer som multiplikation kræver mere hukommelse, tid og CPU-cyklusser. Disse dyre udtryk kan erstattes af billige udtryk som b = a * 2; eller kan erstattes af tilføjelse, b = a + a;

Se nedenstående kode.

for (j = 1; j <= 5; j ++) {

værdi = j * 5;

}

I stedet for multiplikation kan koden ændres som følger.

int temp = 5;

for (j = 1; j <= 5; j ++) {

temp = temp + 5;

værdi = temp;

}

Det er muligt at evaluere de udtryk, der er konstanter ved kørselstid. Det kaldes konstant foldning. Der kan angives som b [j + 1] = c [j + 1];

I stedet kan det ændres som følger.

n = j +1;

b [n] = c [n];

Der 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”);

}

Udskrivning a og b har begge det samme antal iterationer. Begge kan kombineres til en for loop som følger.

for (j = 0; j <5; j ++) {

printf (“a / n”);

printf (“b / n”);

}

En anden vigtig teknik er Common sub expression eliminering. Det er at erstatte de identiske udtryk med en enkelt variabel for at udføre beregningen. Se nedenstående kode.

a = b * c + k;

d = b * c + m;

Denne kode kan konverteres som følger.

temp = b * c;

a = temp + k;

d = temp + m;

Det er ikke nødvendigt at beregne b * c igen og igen. Den gangede værdi kan gemmes i en variabel og genbruges.

Hvad er ligheden mellem maskinafhængig og maskineuafhængig kodeoptimering?

Begge disse hører til kodeoptimering

Hvad er forskellen mellem maskinafhængig og maskineuafhængig kodeoptimering?

Diff artikel midt foran bordet

Maskinafhængig vs maskineuafhængig kodeoptimering

Maskinafhængig kodeoptimering anvendes til objektkode. Maskinuafhængig kodeoptimering anvendes til mellemkode.
Involvering med hardware
Maskinafhængig optimering involverer CPU-registre og absolut hukommelsesreferencer. Maskinuafhængig kodeoptimering involverer ikke CPU-registre eller absolutte hukommelsesreferencer.

Resumé - Maskinafhængig vs Maskinuafhængig kodeoptimering

Kodeoptimering består af to optimeringsteknikker, nemlig maskinafhængig og maskinuafhængig kodeoptimering. Forskellen mellem maskinafhængig og maskinuafhængig kodeoptimering er, at den maskinafhængige optimering anvendes på objektkode, mens den maskinuafhængige kodeoptimering anvendes på mellemkode.

Download PDF-versionen af maskinafhængig vs maskineuafhængig kodeoptimering

Du kan downloade PDF-version af denne artikel og bruge den til offlineformål som pr. Citatnote. Download venligst PDF-version her Forskellen mellem maskinafhængig og maskineuafhængig kodeoptimering

Anbefalet: