Peamine erinevus – masinast sõltuv vs masinast sõltumatu koodi optimeerimine
Arvutiprogrammid on riistvarale ülesannete täitmiseks antud juhiste komplektid. Need programmid on enamasti kirjutatud kõrgetasemelistes keeltes ja arvuti ei saa sellest keelest aru. Seetõttu kasutatakse nende juhiste masinkoodiks või sihtkoodiks teisendamiseks kompilaatorit. Sihtkoodi loomiseks läbib see mitu etappi. Koodi optimeerimine on üks neist. On kaks optimeerimistehnikat, näiteks masinast sõltuv ja masinast sõltumatu koodi optimeerimine. Peamine erinevus masinast sõltuva ja masinast sõltumatu koodi optimeerimise vahel on see, et masinast sõltuvat optimeerimist rakendatakse objektikoodile, samas kui masinast sõltumatut koodi optimeerimist rakendatakse vahekoodile.
Mis on masinast sõltuv koodi optimeerimine?
Lähtekoodi objektikoodiks või sihtkoodiks teisendamisel läbib kompilaator mitu etappi. Esiteks antakse lähtekood Lexical analüsaatorile, mis toodab märke. Seejärel antakse väljund süntaksianalüsaatorile, mis uurib, kas genereeritud märgid on loogilises järjekorras. See väljund antakse semantilisele analüsaatorile. Oletame, et on olemas koodilõik p=q + r;
Siin on p, q täisarvud, aga r on ujuki. Semantilise analüsaatori abil teisendatakse täisarvuline muutuja c ujukiks. Seetõttu teostab see semantilist analüüsi. Semantilise analüsaatori väljund läheb vahekoodi generaatorisse. See tagastab vahepealse koodi, mis läheb seejärel koodi optimeerijasse. Koodi optimeerimine on ebaoluliste programmilausete kõrvaldamise protsess, muutmata tegeliku lähtekoodi tähendust. See ei ole kohustuslik optimeerimine, kuid see võib parandada sihtkoodi tööaega. Koodi optimeerija väljund antakse koodigeneraatorile ja lõpuks koostatakse sihtkood.
Joonis 01: Kompilaatori faasid
Masinast sõltuva koodi optimeerimise korral rakendatakse optimeerimist lähtekoodile. Piisava hulga ressursside eraldamine võib selle optimeerimise korral programmi täitmist parandada.
Mis on masinast sõltumatu koodi optimeerimine?
Kui optimeeritakse vahepealset koodi, nimetatakse seda masinast sõltumatuks koodi optimeerimiseks. Masinast sõltumatu koodi optimeerimise saavutamiseks on erinevaid tehnikaid. Neid kirjeldatakse järgmiste näidete abil.
Lugege allolevaid koodiridu.
jaoks (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
Vastav alt ül altoodud koodile arvutatakse igas iteratsioonis ikka ja jälle b=x+2. Kui b on arvutatud, siis see ei muutu. Seega saab selle rea paigutada tsüklist väljapoole järgmiselt.
b=x+2;
jaoks (j=0; j< 10; j++)
{a[j]=5j;
}
Seda nimetatakse koodi liikumiseks.
Lugege allolevaid koodiridu.
j=5;
if (j==10) {
a=b+20;
}
Vastav alt ül altoodud koodile, 'if block' ei käivitu kunagi, kuna j väärtus ei ole kunagi võrdne 10-ga. See on juba lähtestatud väärtuseks 5. Seetõttu saab selle if-ploki eemaldada. See tehnika on surnud koodi kõrvaldamine.
Teine meetod on tugevuse vähendamine. Aritmeetilised toimingud, nagu korrutamine, nõuavad rohkem mälu, aega ja protsessoritsükleid. Need kallid avaldised saab asendada odavate avaldistega nagu b=a2; või võib asendada liitmisega, b=a + a;
Vaadake allolevat koodi.
jaoks (j=1; j <=5; j ++) {
väärtus=j5;
}
Koodi saab korrutamise asemel muuta järgmiselt.
int temp=5;
ees (j=1; j<=5; j++) {
temp=temp + 5;
väärtus=temp;
}
On võimalik hinnata avaldisi, mis on käitusajal konstandid. Seda nimetatakse pidevaks voltimiseks. Võib öelda näiteks b[j+1]=c [j+1];
Selle asemel saab seda muuta järgmiselt.
n=j +1;
b[n]=c[n];
Silmused võivad olla järgmised.
ees (j=0; j<5; j++) {
printf(“a\n”);
}
jaoks (j=0; j <5; j++) {
printf(“b\n”);
}
A ja b printimisel on mõlemal sama arv kordusi. Mõlemat saab ühendada üheks tsükliks järgmiselt.
jaoks (j=0; j <5; j++) {
printf(“a \n”);
printf(“b\n”);
}
Teine oluline tehnika on ühise alamavaldise elimineerimine. Arvutamiseks asendatakse identsed avaldised ühe muutujaga. Vaadake allolevat koodi.
a=bc + k;
d=b c + m;
Seda koodi saab teisendada järgmiselt.
temp=bc;
a=temp + k;
d=temp + m;
Ei ole vaja arvutada bc ikka ja jälle. Korrutatud väärtuse saab salvestada muutujasse ja seda uuesti kasutada.
Mis on masinast sõltuva ja masinast sõltumatu koodi optimeerimise sarnasus?
Mõlemad kuuluvad koodi optimeerimisse
Mis vahe on masinast sõltuval ja masinast sõltumatul koodioptimeerimisel?
Masinsõltuv vs masinast sõltumatu koodi optimeerimine |
|
Objekti koodile rakendatakse masinast sõltuvat koodi optimeerimist. | Masinast sõltumatut koodi optimeerimist rakendatakse vahepealsele koodile. |
Kaasamine riistvaraga | |
Masinast sõltuv optimeerimine hõlmab CPU registreid ja absoluutmälu viiteid. | Masinist sõltumatu koodi optimeerimine ei hõlma CPU registreid ega absoluutmälu viiteid. |
Kokkuvõte – masinast sõltuv vs masinast sõltumatu koodi optimeerimine
Koodi optimeerimine koosneb kahest optimeerimistehnikast, nimelt masinast sõltuvast ja masinast sõltumatust koodi optimeerimisest. Masinast sõltuva ja masinast sõltumatu koodi optimeerimise erinevus seisneb selles, et masinast sõltuvat optimeerimist rakendatakse objektikoodile, samas kui masinast sõltumatut koodi optimeerimist rakendatakse vahekoodile.
Laadi alla PDF-versioon Masinast sõltuva vs masinast sõltumatu koodi optimeerimise kohta
Saate alla laadida selle artikli PDF-versiooni ja kasutada seda võrguühenduseta kasutamiseks vastav alt tsitaadi märkusele. Palun laadige PDF-versioon alla siit Masinast sõltuva ja masinast sõltumatu koodi optimeerimise erinevus