Peamine erinevus - masinasõltuv vs masinast sõltumatu koodi optimeerimine
Arvutiprogrammid on riistvarale ülesannete täitmiseks antud juhiste kogumid. Need programmid on enamasti kirjutatud kõrgetasemelistes keeltes ja arvuti ei saa sellest keelest aru. Seetõttu kasutatakse nende käskude teisendamiseks masinakoodiks või sihtkoodiks kompilaatorit. Sihtkoodi koostamiseks kulub mitu etappi. Koodide optimeerimine on üks neist. On kahte optimeerimismeetodit, 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 masinakohast koodi optimeerimist rakendatakse vahekoodile.
SISU
1. Ülevaade ja peamine erinevus
2. Mis on masinast 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 - masinasõltuv vs masinast sõltumatu koodi optimeerimine tabelina
6. Kokkuvõte
Mis on masinast sõltuva koodi optimeerimine?
Lähtekoodi teisendamisel objektkoodiks või sihtkoodiks läbib kompilaator mitu faasi. Esiteks antakse lähtekood leksikaalsele 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 koodijupp on p = q + r;
Siin on p, q täisarvud, kuid r on ujuk. Semantilise analüsaatori abil teisendatakse c täisarvu muutuja ujukiks. Seetõttu teeb see semantilist analüüsi. Semantilise analüsaatori väljund läheb keskkoodigeneraatorisse. See tagastab vahekoodi, mis seejärel läheb koodi optimeerijale. Koodi optimeerimine on protsess, mis kõrvaldab programmi vähemolulised väited, 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 ehitatakse üles sihtkood.
Joonis 01: Koostaja faasid
Masinast sõltuva koodi optimeerimisel rakendatakse lähtekoodile optimeerimist. Piisava hulga ressursside eraldamine võib selles optimeerimises programmi täitmist parandada.
Mis on masinast sõltumatu koodi optimeerimine?
Kui optimeerimine toimub vahekoodil, nimetatakse seda masinast sõltumatuks koodi optimeerimiseks. Masinast sõltumatu koodi optimeerimise saavutamiseks on erinevaid tehnikaid. Neid kirjeldatakse järgmiste näidete abil.
Lugege paljusid koodiridu.
jaoks (j = 0; j <10; j ++) {
b = x + 2;
a [j] = 5 * j;
}
Vastavalt ülaltoodud koodile arvutatakse igas iteratsioonis ikka ja jälle b = x + 2. Kui b on arvutatud, ei muutu see. Niisiis, selle joone saab asetada väljaspool silmust järgmiselt.
b = x + 2;
jaoks (j = 0; j <10; j ++)
{a [j] = 5 * j;
}
Seda nimetatakse koodi liikumiseks.
Lugege paljusid koodiridu.
j = 5;
kui (j == 10) {
a = b + 20;
}
Vastavalt ülaltoodud koodile ei käivitu 'if block' kunagi, sest j väärtus ei ole kunagi võrdne 10-ga. See on juba initsialiseeritud väärtuseks 5. Seega saab selle juhul, kui 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 protsessori tsükleid. Need kallid väljendid saab asendada odavate väljenditega nagu b = a * 2; või on asendatav liitmisega, 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;
}
On võimalik hinnata väljendeid, mis on tööajal 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];
Silmuseid võib olla järgmiselt.
jaoks (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 silmuse jaoks ühendada järgmiselt.
jaoks (j = 0; j <5; j ++) {
printf (“a / n”);
printf (“b / n”);
}
Teine oluline tehnika on ühise alaväljenduse kõrvaldamine. Arvutamiseks tuleb identsed avaldised asendada ühe muutujaga. Vaadake allpool olevat koodi.
a = b * c + k;
d = b * c + m;
Seda koodi saab teisendada järgmiselt.
temp = b * c;
a = temp + k;
d = temp + m;
Ei ole vaja arvutada b * c uuesti ja uuesti. Korrutatud väärtuse saab muutujasse salvestada ja uuesti kasutada.
Milline on masinasõltuva ja masinast sõltumatu koodi optimeerimise sarnasus?
Mõlemad kuuluvad koodi optimeerimisse
Mis vahe on masinasõltuva ja masinast sõltumatu koodi optimeerimise vahel?
Erinev artikkel keskel enne tabelit
Masinast sõltuv vs masinast sõltumatu koodi optimeerimine |
|
Objektikoodile rakendatakse masinast sõltuvat koodi optimeerimist. | Vahekoodile rakendatakse masinast sõltumatut koodi optimeerimist. |
Riistvaraga kaasamine | |
Masinast sõltuv optimeerimine hõlmab protsessori registreid ja absoluutseid mäluviiteid. | Masinast sõltumatu koodi optimeerimine ei hõlma protsessori registreid ega absoluutseid mäluviiteid. |
Kokkuvõte - masinasõltuv vs masinasõltumatu koodi optimeerimine
Koodi optimeerimine koosneb kahest optimeerimistehnikast, nimelt masinast sõltuvast ja masinast sõltumatust koodi optimeerimisest. Erinevus masinast sõltuva ja masinast sõltumatu koodi optimeerimise vahel on see, et masinast sõltuvat optimeerimist rakendatakse objektikoodile, samas kui masinist sõltumatut koodi optimeerimist rakendatakse vahekoodile.
Laadige alla masinast sõltuva vs masinast sõltumatu koodi optimeerimise PDF-versioon
Selle artikli PDF-versiooni saate alla laadida ja kasutada võrguühenduseta eesmärkidel, nagu tsiteeritud. Laadige siit alla PDF-versioon. Erinevus masinasõltuva ja masinast sõltumatu koodi optimeerimise vahel