Računalniški programi so sklopi navodil strojne opreme za izvajanje nalog. Ti programi so večinoma napisani v jezikih na visoki ravni, računalnik pa tega jezika ne razume. Zato se uporablja prevajalnik za pretvorbo teh navodil v strojno kodo ali ciljno kodo. Skozi več faz sestavi ciljno kodo. Optimizacija kod je ena izmed njih. Obstajata dve tehniki optimizacije, kot sta strojno odvisna in strojno neodvisna kodna optimizacija. The ključna razlika med strojno in neodvisno optimizacijo kode je, da je strojna odvisna optimizacija se uporablja za objektno kodo, medtem ko se za vmesno kodo uporabi strojna neodvisna optimizacija.
1. Pregled in ključne razlike
2. Kaj je strojno odvisna optimizacija kod
3. Kaj je strojno neodvisna optimizacija kode
4. Podobnosti med strojno odvisnimi in strojno neodvisnimi optimizacijami
5. Primerjava ob strani - optimizacija šifre stroja odvisno od stroja in v obliki tabele
6. Povzetek
Pri pretvorbi izvorne kode v objektno kodo ali ciljno kodo prevajalnik preide skozi več faz. Najprej je izvorna koda dana Lexical analizatorju, ki proizvaja žetone. Nato se izhod poda analizatorju sintakse, ki preuči, ali so ustvarjeni žetoni v logičnem zaporedju. Izhod je dan pomenskemu analizatorju. Predpostavimo, da obstaja del kode kot p = q + r;
Tu so p, q cela števila, r pa je plovec. S pomenskim analizatorjem spremenljivko c celo število pretvorimo v plovec. Zato to počne semantična analiza. Izhod semantičnega analizatorja gre v generator vmesnih kod. Vrne vmesno kodo, ki nato preide v orodje za optimizacijo kod. Optimizacija kode je postopek odstranjevanja nebistvenih programskih stavkov brez spreminjanja pomena dejanske izvorne kode. Ni obvezna optimizacija, vendar lahko izboljša čas delovanja ciljne kode. Izhod orodja za optimizacijo kod je dodeljen generatorju kode in na koncu je zgrajena ciljna koda.
Slika 01: Faze prevajalnika
Pri strojno odvisni optimizaciji kode se optimizacija uporabi za izvorno kodo. Z dodelitvijo zadostne količine virov lahko izboljšate izvajanje programa v tej optimizaciji.
Ko se optimizacija izvede na vmesni kodi, se imenuje strojno neodvisna optimizacija kode. Obstajajo različne tehnike za doseganje strojne neodvisne optimizacije kode. Opisani so z naslednjimi primeri.
Preberite spodnje vrstice kode.
za (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Glede na zgornjo kodo se b = x + 2 izračuna znova in znova v vsaki ponovitvi. Ko je b izračunan, se ne spremeni. Torej, to vrstico lahko postavite zunaj zanke, kot sledi.
b = x + 2;
za (j = 0; j< 10; j++)
a [j] = 5 * j;
Temu pravimo gibanje kode.
Preberite spodnje vrstice kode.
j = 5;
če (j == 10)
a = b + 20;
Glede na zgornjo kodo 'if block' ne bo nikoli izveden, ker vrednost j nikoli ne bo enaka 10. To je že inicializirano na vrednost 5. Zato lahko to, če blok odstranimo. Ta tehnika je odprava mrtve kode.
Druga metoda je zmanjšanje moči. Aritmetične operacije, kot je množenje, zahtevajo več pomnilnika, časa in ciklov CPU-ja. Te drage izraze lahko nadomestimo s poceni izrazi, kot je b = a * 2; ali ga lahko nadomestimo z dodatkom, b = a + a;
Glej spodnjo kodo.
za (j = 1; j <= 5; j ++)
vrednost = j * 5;
Namesto množenja lahko kodo spremenimo na naslednji način.
int temp = 5;
za (j = 1; j<=5; j++)
temp = temp + 5;
vrednost = temp;
Možno je oceniti izraze, ki so konstante med izvajanjem. Se imenuje nenehno zlaganje. Lahko je navedeno, kot je b [j + 1] = c [j + 1];
Namesto tega se lahko spremeni na naslednji način.
n = j +1;
b [n] = c [n];
Obstajajo lahko zanke, kot sledi.
za (j = 0; j<5; j++)
printf ("a \ n");
za (j = 0; j <5; j++)
printf ("b \ n");
Tiskanje a in b imata enako število ponovitev. Obe lahko združite v eno za zanko, kot sledi.
za (j = 0; j <5; j++)
printf ("a \ n");
printf ("b \ n");
Druga pomembna tehnika je Pogosta odstranitev pod izrazom. Za izračun je treba zamenjati identične izraze z eno samo spremenljivko. Glej spodnjo kodo.
a = b * c + k;
d = b * c + m;
To kodo lahko pretvorite na naslednji način.
temp = b * c;
a = temp + k;
d = temp + m;
Ni treba izračunati b * c znova in znova. Pomnožena vrednost se lahko shrani v spremenljivko in ponovno uporabi.
Strojno odvisna od strojne neodvisne optimizacije kod | |
Strojno odvisna optimizacija kode se uporablja za objektno kodo. | Strojno neodvisna optimizacija kode se uporablja za vmesno kodo. |
Sodelovanje s strojno opremo | |
Strojno odvisna optimizacija vključuje registre CPU in absolutne reference pomnilnika. | Strojno neodvisna kode optimizacija ne vključuje registrov CPU ali absolutnih referenc pomnilnika. |
Optimizacija kode je sestavljena iz dveh tehnik optimizacije, in sicer od strojno odvisne in strojno neodvisne kodne optimizacije. Razlika med avtomatizirano in strojno neodvisno optimizacijo kode je, da se za objektno kodo uporablja strojno odvisna optimizacija, medtem ko se za vmesno kodo uporablja strojna neodvisna optimizacija kode..
Lahko prenesete PDF različico tega članka in jo uporabljate za namene brez povezave, kot je navedeno v navodilu. Prosimo, da tukaj prenesete PDF različico. Razlika med strojno in neodvisno optimizacijo kode
1. „Oblikovalec prevajalnika | Optimizacija kod. " GeeksforGeeks. Na voljo tukaj
2.Point, Vadnice. "Oblikovalec prevajalnikov - optimizacija kod." Www.tutorialspoint.com, Tutorials Point, 15. avgust 2017. Na voljo tukaj
3.Estudies4you. "Študijsko gradivo JNTUH CSE." Razlika med strojno in neodvisno optimizacijo koda. Na voljo tukaj
1. "Compiler" avtor I, Surachit, (CC BY-SA 3.0) prek Commons Wikimedia