Klíčový rozdíl - strojově závislá vs strojově nezávislá optimalizace kódu
Počítačové programy jsou soubory pokynů k hardwaru k provádění úkolů. Tyto programy jsou většinou psány v jazycích vyšší úrovně a počítač tomuto jazyku nerozumí. Proto se kompilátor používá k převodu těchto pokynů do strojového kódu nebo cílového kódu. Prochází několika fázemi k vytvoření cílového kódu. Jednou z nich je optimalizace kódu. Existují dvě optimalizační techniky, jako je strojově závislá a strojově nezávislá optimalizace kódu. Klíčovým rozdílem mezi strojově závislou a strojově nezávislou optimalizací kódu je to, že strojově závislá optimalizace se aplikuje na objektový kód, zatímco strojově nezávislá kódová optimalizace se aplikuje na mezilehlý kód.
OBSAH
1. Přehled a klíčový rozdíl
2. Co je optimalizace kódu závislá na stroji
3. Co je optimalizace kódu nezávislá na stroji
4. Podobnosti mezi strojově závislou a strojově nezávislou optimalizací kódu
5. Porovnání vedle sebe - strojově závislá vs strojově nezávislá optimalizace kódu v tabulkové formě
6. Shrnutí
Co je optimalizace kódu závislého na stroji?
Při převodu zdrojového kódu na objektový nebo cílový kód prochází kompilátor několika fázemi. Nejprve je zdrojový kód předán Lexikálnímu analyzátoru, který produkuje tokeny. Potom je výstup předán analyzátoru syntaxe, který zkoumá, zda jsou generované tokeny v logickém pořadí. Tento výstup je předá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 celočíselná proměnná c převede na float. Proto provádí sémantickou analýzu. Výstup sémantického analyzátoru jde do generátoru mezilehlého kódu. Vrátí mezilehlý kód, který poté přejde do optimalizátoru kódu. Optimalizace kódu je proces eliminace nepodstatných programových příkazů beze změny významu skutečného zdrojového kódu. Není to povinná optimalizace, ale může zlepšit provozní dobu cílového kódu. Výstup optimalizátoru kódu je předán generátoru kódu a nakonec je vytvořen cílový kód.
Obrázek 01: Fáze kompilátoru
Při optimalizaci strojově závislého kódu se optimalizace použije na zdrojový kód. Přidělení dostatečného množství zdrojů může zlepšit provádění programu v této optimalizaci.
Co je strojově nezávislá optimalizace kódu?
Když se optimalizace provádí na zprostředkujícím kódu, nazývá se to optimalizace kódu nezávislá na stroji. Existují různé techniky pro dosažení optimalizace kódu nezávislého na stroji. 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 vypočítáno b, nemění se. Tento řádek lze tedy umístit 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 j hodnota se nikdy nebude rovnat 10. Je již inicializována na hodnotu 5. Proto je možné tento if block odstranit. Tato technika je odstranění mrtvého kódu.
Další metodou je redukce pevnosti. Aritmetické operace, jako je násobení, vyžadují více paměti, času a cyklů CPU. Tyto drahé výrazy lze nahradit 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ásledujícím způsobem.
int temp = 5;
pro (j = 1; j <= 5; j ++) {
teplota = teplota + 5;
hodnota = teplota;
}
Je možné vyhodnotit výrazy, které jsou konstantami za běhu. Říká se tomu konstantní skládání. Lze uvést například b [j + 1] = c [j + 1];
Místo toho jej lze změnit následujícím způsobem.
n = j +1;
b [n] = c [n];
Mohou existovat smyčky následovně.
pro (j = 0; j <5; j ++) {
printf („a / n“);
}
pro (j = 0; j <5; j ++) {
printf („b / n“);
}
Tisk aab mají oba stejný počet iterací. Oba lze kombinovat do jedné smyčky for 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 společného podvýrazu. Jedná se o nahrazení stejných výrazů jedinou proměnnou pro provedení výpočtu. 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.
teplota = b * c;
a = teplota + k;
d = teplota + m;
Není nutné znovu a znovu počítat b * c. Násobená hodnota může být uložena v proměnné a znovu použita.
Jaká je podobnost mezi strojově závislou a strojově nezávislou optimalizací kódu?
Oba tyto patří do optimalizace kódu
Jaký je rozdíl mezi strojově závislou a strojově nezávislou optimalizací kódu?
Rozdílný článek uprostřed před tabulkou
Strojově závislá vs strojově nezávislá optimalizace kódu |
|
Na objektový kód se použije optimalizace kódu závislá na stroji. | Optimalizace kódu nezávislá na stroji se použije na přechodný kód. |
Zapojení s hardwarem | |
Optimalizace závislá na stroji zahrnuje registry CPU a absolutní odkazy na paměť. | Optimalizace kódu nezávislá na stroji nezahrnuje registry CPU ani absolutní odkazy na paměť. |
Shrnutí - Machine Dependent vs Machine Independent Code Optimization
Optimalizace kódu se skládá ze dvou optimalizačních technik, a to optimalizace kódu závislá na stroji a nezávislá na stroji. Rozdíl mezi strojově závislou a strojově nezávislou optimalizací kódu je v tom, že strojově závislá optimalizace se aplikuje na objektový kód, zatímco strojově nezávislá optimalizace kódu se aplikuje na mezilehlý kód.
Stáhněte si PDF verzi Machine Dependent vs Machine Independent Code Optimization
Můžete si stáhnout verzi tohoto článku ve formátu PDF a použít jej pro offline účely podle citace. Stáhněte si zde verzi PDF Rozdíl mezi optimalizací kódu závislou na stroji a nezávislou na stroji