Ero koneriippuvaisen ja koneriippumattoman koodioptimoinnin välillä

Sisällysluettelo:

Ero koneriippuvaisen ja koneriippumattoman koodioptimoinnin välillä
Ero koneriippuvaisen ja koneriippumattoman koodioptimoinnin välillä

Video: Ero koneriippuvaisen ja koneriippumattoman koodioptimoinnin välillä

Video: Ero koneriippuvaisen ja koneriippumattoman koodioptimoinnin välillä
Video: Ero 2024, Joulukuu
Anonim

Avainero – koneriippuvainen vs. koneriippumaton koodioptimointi

Tietokoneohjelmat ovat laitteistolle tehtävien suorittamista varten annettuja ohjeita. Nämä ohjelmat on useimmiten kirjoitettu korkean tason kielillä, eikä tietokone ymmärrä tätä kieltä. Siksi kääntäjää käytetään muuttamaan nämä ohjeet konekoodiksi tai kohdekoodiksi. Se käy läpi useita vaiheita kohdekoodin rakentamiseksi. Koodin optimointi on yksi niistä. On olemassa kaksi optimointitekniikkaa, kuten koneriippuvainen ja koneesta riippumaton koodioptimointi. Keskeinen ero koneriippuvaisen ja koneriippumattoman koodin optimoinnin välillä on, että koneriippuvaista optimointia sovelletaan objektikoodiin, kun taas koneriippumatonta koodin optimointia sovelletaan välikoodiin.

Mitä on koneriippuvainen koodioptimointi?

Kun lähdekoodi muunnetaan objektikoodiksi tai kohdekoodiksi, kääntäjä käy läpi useita vaiheita. Ensinnäkin lähdekoodi annetaan Lexical-analysaattorille, joka tuottaa tokeneja. Sitten tulos annetaan syntaksianalysaattorille, joka tutkii, ovatko luodut tunnukset loogisessa järjestyksessä. Tuo tulos annetaan semanttiselle analysaattorille. Oletetaan, että on olemassa koodinpätkä p=q + r;

Tässä p, q ovat kokonaislukuja, mutta r on float. Semanttisen analysaattorin avulla kokonaislukumuuttuja c muunnetaan floatiksi. Siksi se suorittaa semanttisen analyysin. Semanttisen analysaattorin lähtö menee välikoodigeneraattoriin. Se palauttaa välikoodin, joka menee sitten koodin optimoijaan. Koodin optimointi on prosessi, jossa poistetaan tarpeettomat ohjelmalausekkeet muuttamatta todellisen lähdekoodin merkitystä. Se ei ole pakollinen optimointi, mutta se voi parantaa kohdekoodin ajoaikaa. Koodin optimoijan tulos annetaan koodigeneraattorille ja lopuksi rakennetaan kohdekoodi.

Ero koneriippuvaisen ja koneriippumattoman koodioptimoinnin välillä
Ero koneriippuvaisen ja koneriippumattoman koodioptimoinnin välillä
Ero koneriippuvaisen ja koneriippumattoman koodioptimoinnin välillä
Ero koneriippuvaisen ja koneriippumattoman koodioptimoinnin välillä

Kuva 01: Kääntäjän vaiheet

Koneriippuvaisessa koodin optimoinnissa optimointia sovelletaan lähdekoodiin. Riittävän määrän resursseja allokoimalla voidaan parantaa ohjelman suoritusta tässä optimoinnissa.

Mitä on koneista riippumaton koodioptimointi?

Kun optimointi tehdään välikoodille, sitä kutsutaan koneriippumattomaksi koodioptimoinniksi. Koneesta riippumattoman koodin optimoinnin saavuttamiseksi on erilaisia tekniikoita. Ne on kuvattu seuraavilla esimerkeillä.

Lue alla olevat koodirivit.

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

b=x+2;

a[j]=5 j;

}

Yllä olevan koodin mukaan b=x+2 lasketaan uudestaan ja uudestaan jokaisessa iteraatiossa. Kun b on laskettu, se ei muutu. Joten tämä rivi voidaan sijoittaa silmukan ulkopuolelle seuraavasti.

b=x+2;

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

{a[j]=5j;

}

Tätä kutsutaan koodiliikkeeksi.

Lue alla olevat koodirivit.

j=5;

if (j==10) {

a=b+20;

}

Yllä olevan koodin mukaan 'if block' ei koskaan suoriteta, koska j-arvo ei koskaan ole yhtä suuri kuin 10. Se on jo alustettu arvoon 5. Siksi tämä if-lohko voidaan poistaa. Tämä tekniikka on kuolleen koodin eliminointia.

Toinen menetelmä on lujuuden vähentäminen. Aritmeettiset operaatiot, kuten kertolasku, vaativat enemmän muistia, aikaa ja prosessorijaksoja. Nämä kalliit lausekkeet voidaan korvata halvoilla lausekkeilla, kuten b=a2; tai se voidaan korvata summalla, b=a + a;

Katso alla oleva koodi.

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

arvo=j5;

}

Koodia voidaan muuttaa kertolaskujen sijaan seuraavasti.

int temp=5;

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

lämpö=lämpötila + 5;

arvo=lämpötila;

}

On mahdollista arvioida lausekkeet, jotka ovat vakioita ajon aikana. Sitä kutsutaan jatkuvaksi taittoksi. Voidaan sanoa, kuten b[j+1]=c [j+1];

Sen sijaan sitä voidaan muuttaa seuraavasti.

n=j +1;

b[n]=c[n];

Silmukoita voi olla seuraavasti.

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

printf("a\n");

}

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

printf("b\n");

}

Tulostamalla a ja b, molemmilla on sama määrä iteraatioita. Molemmat voidaan yhdistää yhdeksi for-silmukaksi seuraavasti.

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

printf("a \n");

printf("b\n");

}

Toinen tärkeä tekniikka on yhteisen alilausekkeen eliminointi. Se on korvata identtiset lausekkeet yhdellä muuttujalla laskennan suorittamiseksi. Katso alla oleva koodi.

a=bc + k;

d=b c + m;

Tämä koodi voidaan muuntaa seuraavasti.

temp=bc;

a=lämpötila + k;

d=lämpötila + m;

Bc:tä ei tarvitse laskea uudestaan ja uudestaan. Kerrottu arvo voidaan tallentaa muuttujaan ja käyttää uudelleen.

Mikä on koneriippuvaisen ja koneriippumattoman koodioptimoinnin samank altaisuus?

Molemmat kuuluvat koodin optimointiin

Mitä eroa on koneriippuvaisella ja koneriippumattomalla koodioptimoinnilla?

koneriippuvainen vs. koneriippumaton koodioptimointi

Koneriippuvaista koodin optimointia sovelletaan objektikoodiin. Koneriippumatonta koodin optimointia sovelletaan välikoodiin.
Osallistuminen laitteistoon
Koneriippuvainen optimointi sisältää CPU-rekistereitä ja absoluuttisia muistiviittauksia. Koneriippumaton koodin optimointi ei sisällä CPU-rekistereitä tai absoluuttisia muistiviittauksia.

Yhteenveto – koneriippuvainen vs. koneesta riippumaton koodioptimointi

Koodioptimointi koostuu kahdesta optimointitekniikasta, nimittäin koneesta riippuvasta ja koneesta riippumattomasta koodioptimoinnista. Ero koneriippuvaisen ja koneriippumattoman koodin optimoinnin välillä on, että koneriippuvaista optimointia sovelletaan objektikoodiin, kun taas koneriippumatonta koodin optimointia sovelletaan välikoodiin.

Lataa PDF-versio Machine Dependent vs Machine Independent Code Optimization -sovelluksesta

Voit ladata tämän artikkelin PDF-version ja käyttää sitä offline-tarkoituksiin lainaushuomautuksen mukaisesti. Lataa PDF-versio tästä Koneriippuvaisen ja koneriippumattoman koodioptimoinnin ero

Suositeltava: