Arvutiprogrammid on juhiste kogumid, mis antakse riistvarale ülesannete täitmiseks. Need programmid on enamasti kirjutatud kõrgetasemelistes keeltes ja arvuti ei saa sellest keelest aru. Seetõttu kasutatakse kompilaatorit nende juhiste teisendamiseks masinkoodiks või sihtkoodiks. Sihtkoodi loomine läbib mitu etappi. Koodi optimeerimine on üks neist. On kaks optimeerimise tehnikat, nagu masinist sõltuv ja masinast sõltumatu koodi optimeerimine. võtme erinevus masinast sõltuva ja masinast sõltumatu koodi optimeerimise vahel on see, et Objektikoodile rakendatakse masinist sõltuvat optimeerimist, samas kui vahekoodile rakendatakse masinist sõltumatut optimeerimist.
1. Ülevaade ja peamised erinevused
2. Mis on masinist sõltuv koodi optimeerimine
3. Mis on masinast sõltumatu koodi optimeerimine
4. Masinast sõltuva ja masinast sõltumatu koodi optimeerimise sarnasused
5. Kõrvuti võrdlus - masinist sõltuv vs masinast sõltumatu koodi optimeerimine tabelina
6. Kokkuvõte
Lähtekoodi teisendamisel objektkoodiks või sihtkoodiks läbib kompilaator mitu faasi. Esiteks antakse lähtekood Lexical analüsaatorile, mis toodab märke. Seejärel antakse väljund süntaksianalüsaatorile, mis uurib, kas genereeritud žetoonid on loogilises järjekorras. See väljund antakse semantilisele analüsaatorile. Oletame, et leidub mingi kooditükk nagu p = q + r;
Siin on p, q täisarvud, kuid r on ujuk. Semantilise analüsaatori abil teisendatakse täisarv muutujaks ujukiks. Seetõttu teeb ta semantilist analüüsi. Semantilise analüsaatori väljund läheb vahekoodigeneraatorisse. See tagastab vahekoodi, mis seejärel läheb koodi optimeerijale. Koodi optimeerimine on vähemoluliste programmi avalduste elimineerimine ilma tegeliku lähtekoodi tähendust muutmata. See ei ole kohustuslik optimeerimine, kuid see võib sihtkoodi tööaega parandada. Koodide optimeerija väljund antakse koodigeneraatorile ja lõpuks ehitatakse sihtkood.
Joonis 01: Kompilaatori faasid
Masinast sõltuva koodi optimeerimisel rakendatakse optimeerimist lähtekoodile. Piisava hulga ressursside eraldamine võib programmi optimeerimisel täiustada.
Kui vahekoodi optimeerimine toimub, nimetatakse seda masinasõltumatuks koodi optimeerimiseks. Masinast sõltumatu koodi optimeerimise saavutamiseks on erinevaid tehnikaid. Neid kirjeldatakse järgmiste näidete abil.
Loe allpool koodiridu.
jaoks (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Vastavalt ülaltoodud koodile arvutatakse b = x + 2 iga iteratsiooni korral uuesti ja uuesti. Kui b on arvutatud, siis see ei muutu. Niisiis saab selle joone väljaspool silmust paigutada järgmiselt.
b = x + 2;
jaoks (j = 0; j< 10; j++)
a [j] = 5 * j;
Seda nimetatakse koodiliikumiseks.
Loe allpool koodiridu.
j = 5;
if (j == 10)
a = b + 20;
Ülaltoodud koodi kohaselt ei täida 'if block' kunagi, kuna j väärtus ei ole kunagi võrdne 10. See on juba lähtestatud väärtuseks 5. Seetõttu saab selle ploki eemaldada. See tehnika on surnud koodi kõrvaldamine.
Teine meetod on tugevuse vähendamine. Aritmeetilised toimingud, näiteks korrutamine, vajavad rohkem mälu, aega ja protsessori tsüklit. Need kallid avaldised saab asendada odavate avaldistega, näiteks b = a * 2; või asendada lisamisega, b = a + a;
Vaadake allolevat koodi.
jaoks (j = 1; j <= 5; j ++)
väärtus = j * 5;
Korrutamise asemel saab koodi muuta järgmiselt.
int temp = 5;
jaoks (j = 1; j<=5; j++)
temp = temp + 5;
väärtus = temp;
Runtides on konstantseid avaldisi võimalik hinnata. Seda nimetatakse pidev voltimine. Võib öelda, et näiteks b [j + 1] = c [j + 1];
Selle asemel saab seda muuta järgmiselt.
n = j +1;
b [n] = c [n];
Silmuseid võib olla järgmiselt.
jaoks (j = 0; j<5; j++)
printf (“a \ n”);
jaoks (j = 0; j <5; j++)
printf (“b \ n”);
Trükkimisel a ja b on mõlemal sama arv iteratsioone. Mõlemaid saab silmuse jaoks ühendada järgmiselt.
jaoks (j = 0; j <5; j++)
printf (“a \ n”);
printf (“b \ n”);
Teine oluline meetod on Üldine alamlause elimineerimine. Arvutamisel tuleb identsed avaldised asendada ühe muutujaga. Vaadake lõõtsa koodi.
a = b * c + k;
d = b * c + m;
Seda koodi saab teisendada järgmiselt.
temp = b * c;
a = temp + k;
d = temp + m;
B * c arvutamist ei ole vaja uuesti ja uuesti. Korrutatud väärtuse saab muutujasse salvestada ja uuesti kasutada.
Masinist sõltuv vs masinast sõltumatu koodi optimeerimine | |
Objektikoodile rakendatakse masinist sõltuvat koodi optimeerimist. | Vahekoodile rakendatakse masinast sõltumatut koodi optimeerimist. |
Kaasamine riistvaraga | |
Masinast sõltuv optimeerimine hõlmab protsessori registreid ja absoluutmälu viiteid. | Masinasõltumatu koodi optimeerimine ei hõlma protsessori registreid ega absoluutmälu viiteid. |
Koodi optimeerimine koosneb kahest optimeerimise tehnikast, nimelt masinist sõltuv ja masinast sõltumatu koodi optimeerimine. Masinast sõltuva ja masinast sõltumatu koodi optimeerimise erinevus seisneb selles, et objektikoodile rakendatakse masinist sõltuvat optimeerimist, samas kui masinkindlatut koodi optimeerimist rakendatakse vahekoodile.
Selle artikli PDF-versiooni saate alla laadida ja seda võrguühenduseta otstarbel kasutada tsitaatide märkuse kohaselt. Laadige siit alla PDF-versioon. Erinevus masinist sõltuva ja masinast sõltumatu koodi optimeerimise vahel
1. “Kompilaatori kujundus | Koodi optimeerimine. ” GeeksforGeeks. Saadaval siin
2.Punkt, juhendid. “Kompilaatori disain - koodi optimeerimine.” Www.tutorialspoint.com, Tutorials Point, 15. august 2017. Saadaval siin
3.Estudies4you. “JNTUH CSE õppematerjal.” Erinevus masinist sõltuva ja sõltumatu koodi optimeerimise vahel. Saadaval siin
1. 'Kompilaator' autor I, Surachit (CC BY-SA 3.0) Commons Wikimedia kaudu