Počítačové programy jsou sady instrukcí daných hardwaru, k plnění úkolů. Tyto programy jsou většinou psány v jazycích vysoké úrovně a počítač tomuto jazyku nerozumí. Proto se kompilátor používá k převodu těchto pokynů na strojový nebo cílový kód. Vytvoření cílového kódu prochází několika fázemi. Optimalizace kódu je jedním z nich. Existují dvě optimalizační techniky, jako je strojově závislá a strojově nezávislá optimalizace kódu. klíčový rozdíl mezi strojem závislou a strojově nezávislou optimalizací kódu je to optimalizace závislá na stroji se použije na objektový kód, zatímco optimalizace kódu nezávislého na stroji se použije na přechodný kód.
1. Přehled a klíčový rozdíl
2. Co je to optimalizace kódu závislá na stroji
3. Co je to strojově nezávislá optimalizace kódu
4. Podobnosti mezi závislostí na stroji a optimalizací kódu nezávislého na stroji
5. Porovnání bok po boku - optimalizace kódu závislá na stroji a na stroji nezávislá v podobě tabulky
6. Shrnutí
Při převodu zdrojového kódu na kód objektu nebo cílový kód kompilátor prochází několika fázemi. Nejprve je zdrojový kód dán analyzátoru Lexical, který vytváří tokeny. Výstupem je poté syntaktický analyzátor, který zkoumá, zda jsou vygenerované tokeny v logickém pořadí. Tento výstup je dán sémantickému analyzátoru. Předpokládejme, že existuje část kódu jako p = q + r;
Zde jsou p, q celá čísla, ale r je plovák. Pomocí sémantického analyzátoru se proměnná c integer převede na float. Proto provádí sémantické analýzy. Výstup sémantického analyzátoru jde do generátoru Intermediate code. Vrací přechodný kód, který poté přejde do optimalizátoru kódu. Optimalizace kódu je proces eliminace nepodstatných programových příkazů bez změny významu skutečného zdrojového kódu. Není to povinná optimalizace, ale může to zlepšit dobu běhu cílového kódu. Výstup optimalizátoru kódu je dán generátoru kódu a nakonec je vytvořen cílový kód.
Obrázek 01: Fáze kompilátoru
Při optimalizaci kódu závislého na stroji se na zdrojový kód použije optimalizace. Přiřazení dostatečného množství zdrojů může zlepšit provádění programu při této optimalizaci.
Když je optimalizace prováděna na přechodném kódu, nazývá se to optimalizace kódu nezávislá na stroji. Existují různé techniky pro dosažení optimalizace strojově nezávislého kódu. Jsou popsány pomocí následujících příkladů.
Přečtěte si níže uvedené řádky kódu.
pro (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Podle výše uvedeného kódu se b = x + 2 počítá znovu a znovu v každé iteraci. Jakmile je b vypočteno, nezmění se. Tato čára tedy může být umístěna mimo smyčku následujícím způsobem.
b = x + 2;
pro (j = 0; j< 10; j++)
a [j] = 5 * j;
Tomu se říká pohyb kódu.
Přečtěte si níže uvedené řádky kódu.
j = 5;
if (j == 10)
a = b + 20;
Podle výše uvedeného kódu se „if block“ nikdy nespustí, protože hodnota j se nikdy nebude rovnat 10. Je již inicializována na hodnotu 5. Proto je možné tento blok odstranit. Tato technika je eliminace mrtvého kódu.
Další metodou je snížení pevnosti. Aritmetické operace, jako je násobení, vyžadují více paměti, času a cyklů CPU. Tyto drahé výrazy mohou být nahrazeny levnými výrazy jako b = a * 2; nebo mohou být nahrazeny sčítáním, b = a + a;
Viz níže uvedený kód.
pro (j = 1; j <= 5; j ++)
hodnota = j * 5;
Místo násobení lze kód změnit následovně.
int temp = 5;
pro (j = 1; j<=5; j++)
temp = temp + 5;
value = temp;
Je možné vyhodnotit výrazy, které jsou za běhu konstanty. To se nazývá konstantní skládání. Lze uvést například b [j + 1] = c [j + 1];
Místo toho ji lze změnit následovně.
n = j +1;
b [n] = c [n];
Mohou existovat následující smyčky.
pro (j = 0; j<5; j++)
printf („a \ n“);
pro (j = 0; j <5; j++)
printf („b \ n“);
Při tisku aab mají stejný počet iterací. Oba mohou být kombinovány do jednoho pro smyčku následujícím způsobem.
pro (j = 0; j <5; j++)
printf („a \ n“);
printf („b \ n“);
Další důležitou technikou je Eliminace běžných výrazů. Pro výpočet je třeba nahradit stejné výrazy jedinou proměnnou. Viz níže uvedený kód.
a = b * c + k;
d = b * c + m;
Tento kód lze převést následujícím způsobem.
temp = b * c;
a = temp + k;
d = temp + m;
Není nutné počítat b * c znovu a znovu. Vynásobená hodnota může být uložena v proměnné a znovu použita.
Optimalizace kódu nezávislá na stroji a nezávislá na stroji | |
Optimalizace kódu závislého na stroji se použije na kód objektu. | Optimalizace kódu nezávislého na stroji se použije na přechodný kód. |
Zapojení do hardwaru | |
Optimalizace závislá na stroji zahrnuje registry CPU a odkazy na absolutní paměť. | Optimalizace kódu nezávislého na stroji nezahrnuje registry CPU ani odkazy na absolutní paměť. |
Optimalizace kódu se skládá ze dvou optimalizačních technik, a to optimalizace kódu závislého na stroji a nezávislé na stroji. Rozdíl mezi optimalizací stroje závislou na stroji a nezávislou na stroji spočívá v tom, že optimalizace závislá na stroji je aplikována na kód objektu, zatímco optimalizace kódu nezávislá na stroji je aplikována na přechodný kód.
Můžete si stáhnout PDF verzi tohoto článku a použít ji pro účely offline podle citace. Stáhněte si verzi PDF zde Rozdíl mezi závislostí na stroji a optimalizací kódu nezávislého na stroji
1. „Návrh kompilátoru | Optimalizace kódu. “ GeeksforGeeks. K dispozici zde
2.Point, Návody. "Návrh kompilátoru - optimalizace kódu." Www.tutorialspoint.com, Point of Tutorials, 15. 8. 2017. K dispozici zde
3.Estudies4you. "Studijní materiál JNTUH CSE." Rozdíl mezi závislostí na stroji a nezávislou optimalizací kódu. K dispozici zde
1.'Compiler 'I, Surachit, (CC BY-SA 3.0) přes Commons Wikimedia