Datorprogrammas ir instrukciju kopas, kas aparatūrai tiek dotas uzdevumu veikšanai. Šīs programmas lielākoties tiek rakstītas augsta līmeņa valodās, un dators šo valodu nesaprot. Tāpēc, lai pārveidotu šīs instrukcijas mašīnu kodā vai mērķa kodā, tiek izmantots kompilators. Mērķa koda izveidei ir vairākas fāzes. Kodu optimizācija ir viena no tām. Ir divas optimizācijas metodes, piemēram, no mašīnas atkarīga un no mašīnas neatkarīga koda optimizācija. galvenā atšķirība starp mašīnatkarīgu un no mašīnas neatkarīgu koda optimizāciju ir tas, ka Objekta kodam tiek piemērota mašīnatkarīga optimizācija, bet starpposma kodam - mašīnu neatkarīga koda optimizācija.
1. Pārskats un galvenās atšķirības
2. Kas ir no mašīnas atkarīgs koda optimizācija
3. Kas ir no mašīnas neatkarīga koda optimizācija
4. Līdzības starp mašīnatkarīgo un mašīnatkarīgo koda optimizāciju
5. Salīdzinājums blakus - no mašīnas atkarīgs un no mašīnas neatkarīgs koda optimizācija tabulas formā
6. Kopsavilkums
Pārveidojot avota kodu objekta kodā vai mērķa kodā, kompilators iziet vairākas fāzes. Pirmkārt, avota kods tiek piešķirts Lexical analizatoram, kas ražo marķierus. Pēc tam izvade tiek piešķirta sintakse analizatoram, kas pēta, vai ģenerētie marķieri ir loģiskā secībā. Šī izvade tiek dota semantiskajam analizatoram. Pieņemsim, ka ir kāds koda gabals kā p = q + r;
Šeit p, q ir veseli skaitļi, bet r ir mainīgais. Izmantojot semantisko analizatoru, c skaitļa mainīgo lielumu pārveido par pludiņu. Tāpēc tā veic semantisko analīzi. Semantiskā analizatora izeja nonāk pie starpposma koda ģeneratora. Tas atgriež starpposma kodu, kas pēc tam nonāk koda optimizētājā. Koda optimizācija ir nebūtisku programmas paziņojumu novēršanas process, nemainot faktiskā avota koda nozīmi. Tā nav obligāta optimizācija, bet tā var uzlabot mērķa koda darbības laiku. Kodu optimizētāja izvade tiek piešķirta koda ģeneratoram, un visbeidzot tiek izveidots mērķa kods.
01. attēls. Kompilatora fāzes
Mašīnatkarīgā koda optimizācijā avota kodam tiek piemērota optimizācija. Pietiekama resursu daudzuma piešķiršana var uzlabot programmas izpildi šajā optimizācijā.
Kad starpposma koda optimizācija tiek veikta, to sauc par no mašīnas neatkarīgu koda optimizāciju. Ir dažādas metodes, kā panākt mašīnu neatkarīgu koda optimizāciju. Tie ir aprakstīti, izmantojot šādus piemērus.
Lasiet zemākas koda rindiņas.
par (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Saskaņā ar iepriekš minēto kodu, b = x + 2 tiek aprēķināts atkal un atkal katrā atkārtojumā. Kad b ir aprēķināts, tas nemainās. Tātad šo līniju var izvietot ārpus cilpas šādi.
b = x + 2;
par (j = 0; j< 10; j++)
a [j] = 5 * j;
To sauc par koda kustību.
Lasiet zemākas koda rindiņas.
j = 5;
ja (j == 10)
a = b + 20;
Saskaņā ar iepriekš minēto kodu 'if block' nekad neizpildīsies, jo j vērtība nekad nebūs vienāda ar 10. Tas jau ir inicializēts līdz vērtībai 5. Tāpēc šo, ja bloku var noņemt. Šis paņēmiens ir miris kods.
Vēl viena metode ir spēka samazināšana. Aritmētiskās operācijas, piemēram, reizināšana, prasa vairāk atmiņas, laika un CPU ciklu. Šīs dārgās izteiksmes var aizstāt ar lētām izteiksmēm, piemēram, b = a * 2; vai var aizstāt ar pievienošanu, b = a + a;
Skatiet zemāk esošo kodu.
par (j = 1; j <= 5; j ++)
vērtība = j * 5;
Reizināšanas vietā kodu var mainīt šādi.
int temp = 5;
par (j = 1; j<=5; j++)
temp = temp + 5;
vērtība = temp;
Ir iespējams novērtēt izteiksmes, kas ir konstantes izpildlaikā. To sauc par pastāvīga locīšana. Var teikt, piemēram, b [j + 1] = c [j + 1];
Tā vietā to var mainīt šādi.
n = j +1;
b [n] = c [n];
Var būt šādas cilpas:.
par (j = 0; j<5; j++)
printf (“a \ n”);
par (j = 0; j <5; j++)
printf (“b \ n”);
Drukājot a un b, abiem ir vienāds atkārtojumu skaits. Abus var apvienot vienā cilpā šādi.
par (j = 0; j <5; j++)
printf (“a \ n”);
printf (“b \ n”);
Vēl viens svarīgs paņēmiens ir Parastās apakšizteiksmes novēršana. Aprēķins ir jāaizstāj identiskas izteiksmes ar vienu mainīgu lielumu. Skatiet zemāk redzamo kodu.
a = b * c + k;
d = b * c + m;
Šo kodu var pārveidot šādi.
temp = b * c;
a = temp + k;
d = temp + m;
Atkal un atkal nav jāaprēķina b * c. Reizināto vērtību var saglabāt mainīgā lielumā un izmantot atkārtoti.
Mašīnas atkarīga vs mašīna neatkarīga koda optimizācija | |
Objekta kodam tiek piemērota no mašīnas atkarīga koda optimizācija. | Starpposma kodam tiek piemērota no mašīnām neatkarīga koda optimizācija. |
Iesaistīšanās aparatūrā | |
No mašīnām atkarīga optimizācija ietver CPU reģistrus un absolūtās atmiņas atsauces. | Mašīnas neatkarīga koda optimizācija neietver CPU reģistrus vai absolūtās atmiņas atsauces. |
Koda optimizācija sastāv no divām optimizācijas metodēm, proti, no mašīnas atkarīgas un no mašīnas neatkarīgas koda optimizēšanas. Atšķirība starp mašīnatkarīgo un mašīnatkarīgo koda optimizāciju ir tāda, ka objekta kodam tiek piemērota mašīnatkarīga optimizācija, turpretim starpposmam tiek piemērota mašīnu neatkarīga koda optimizācija..
Varat lejupielādēt šī raksta PDF versiju un izmantot to bezsaistes vajadzībām, kā norādīts citēšanas piezīmē. Lūdzu, lejupielādējiet šeit PDF versiju. Atšķirība starp mašīnatkarīgo un mašīnatkarīgo koda optimizāciju
1. “Kompilatora dizains | Koda optimizācija. ” GeeksforGeeks. Pieejams šeit
2.Punkts, konsultācijas. “Kompilatora dizains - koda optimizācija.” Www.tutorialspoint.com, konsultāciju punkts, 2017. gada 15. augusts. Pieejams šeit
3.Estudies4you. “JNTUH CSE mācību materiāls.” Atšķirība starp mašīnatkarīgo un neatkarīgo koda optimizāciju. Pieejams šeit
1. “Kompilators” Autors: I, Surachit (CC BY-SA 3.0), izmantojot Commons Wikimedia