Forskel mellem maskinafhængig og maskineafhængig kodeoptimering

Nøgleforskel - maskine Afhængig vs Maskine Uafhængig kodeoptimering
 

Computerprogrammer er sæt instruktioner, der gives til hardware til udførelse af 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, maskineafhængig og maskineafhængig kodeoptimering. Det vigtigste forskel mellem maskineafhængig og maskineafhængig kodeoptimering er, at maskinafhængig optimering anvendes til objektkode, mens maskinuafhængig kodeoptimering anvendes til den mellemliggende kode.

INDHOLD

1. Oversigt og nøgleforskel
2. Hvad er maskineafhængig kodeoptimering
3. Hvad er maskineafhængig kodeoptimering
4. Ligheder mellem maskinafhængig og maskineafhængig kodeoptimering
5. Sammenligning side ved side - Maskinafhængig vs Maskins uafhængig kodeoptimering i tabelform
6. Resume

Hvad er maskineafhængig kodeoptimering?

Når konvertering af kildekoden til objektkode eller målkode, gennemgår kompilatoren flere faser. Først gives kildekoden til Lexical analysator, der producerer tokens. Derefter gives output til syntaksanalysator, der 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 flyder. Ved hjælp af den semantiske analysator konverteres c-heltalvariablen til en flyder. Derfor gør den semantisk analyse. Outputet fra den semantiske analysator går til den mellemliggende kodegenerator. Det returnerer en mellemkode, der derefter går til kodeoptimeringsværktøj. Kodeoptimering er processen med at fjerne de ikke-væsentlige programangivelser uden at ændre betydningen af ​​den faktiske kildekode. Det er ikke en obligatorisk optimering, men det kan forbedre drifttiden for målkoden. Outputet fra kodeoptimeringsværktøjet gives til kodegeneratoren, og til sidst bygges målkoden.

Figur 01: Compilerens faser

Ved maskineafhængig kodeoptimering anvendes optimering på kildekoden. Tildeling af tilstrækkelig mængde ressourcer kan forbedre udførelsen af ​​programmet i denne optimering.

Hvad er maskineafhængig kodeoptimering?

Når optimering udføres på mellemkoden, kaldes den maskinuafhængig kodeoptimering. Der er forskellige teknikker til opnåelse af maskinuafhængig kodeoptimering. De beskrives ved hjælp af følgende eksempler.

Læs rullelinjer med kode.

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 rullelinjer med kode.

j = 5;

hvis (j == 10)

a = b + 20;

I henhold til 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 blok 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 multiplikationen 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 på runtime. Det kaldes konstant foldning. Der kan nævnes 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 sløjfer som følger.

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

printf ( ”\ n”);

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

printf ( ”b \ n”);

Udskrivning af 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 Almindelig eliminering af underudtryk. Det er at erstatte de identiske udtryk med en enkelt variabel for at udføre beregningen. Se bællekoden.

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 kræves ikke at beregne b * c igen og igen. Den multiplicerede værdi kan gemmes i en variabel og genbruges.

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

  • Begge disse hører til kodeoptimering

Hvad er forskellen mellem maskineafhængig og maskineafhængig kodeoptimering?

Maskinafhængig vs maskineafhængig kodeoptimering 

Maskineafhængig kodeoptimering anvendes til objektkode. Maskineuafhængig kodeoptimering anvendes til mellemkode.
Involvering med hardware
Maskineafhængig optimering involverer CPU-registre og absolutte hukommelsesreferencer.  Maskinens uafhængig kodeoptimering involverer ikke CPU-registre eller absolutte hukommelsesreferencer.

Resume - maskine Afhængig vs maskine uafhængig kode optimering 

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

Download PDF-versionen af ​​Machine Dependent vs Machine Independent Code Optimization

Du kan downloade PDF-version af denne artikel og bruge den til offline-formål som pr. Citatnotat. Download PDF-version her Forskel mellem maskineafhængig og maskineafhængig kodeoptimering

Reference:

1. “Compiler Design | Kodeoptimering. ” GeeksforGeeks. Tilgængelig her
2.Point, selvstudier. "Compiler Design - Kodeoptimering." Www.tutorialspoint.com, Tutorials Point, 15. august 2017. Findes her  
3.Estudies4you. “JNTUH CSE-studiemateriale.” Forskel mellem maskineafhængig og uafhængig kodeoptimering. Tilgængelig her  

Billede høflighed:

1. 'Compiler' af I, Surachit, (CC BY-SA 3.0) via Commons Wikimedia