Klíčový rozdíl – optimalizace kódu závislá na stroji a nezávislá na stroji
Počítačové programy jsou sady instrukcí předávaných hardwaru k provádění úkolů. Tyto programy jsou většinou napsány v jazycích vyšší úrovně a počítač tomuto jazyku nerozumí. Proto se k převodu těchto instrukcí na strojový nebo cílový kód používá kompilátor. Sestavení 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 strojově závislou a strojově nezávislou optimalizací kódu je v tom, že strojově závislá optimalizace je aplikována na objektový kód, zatímco strojově nezávislá kódová optimalizace je aplikována na přechodný kód.
Co je strojově závislá kódová optimalizace?
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ý vytváří tokeny. Poté je výstup předán syntaktickému analyzátoru, který zkoumá, zda jsou vygenerované 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;
Tady p, q jsou celá čísla, ale r je plovoucí. Pomocí sémantického analyzátoru se proměnná c integer 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í přechodný kód, který pak přejde do optimalizátoru kódu. Optimalizace kódu je proces eliminace nepodstatných příkazů programu, aniž by se změnil význam skutečného zdrojového kódu. Není to povinná optimalizace, ale může zlepšit dobu běhu 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 kódu závislé na stroji se optimalizace aplikuje na zdrojový kód. Přidělení dostatečného množství zdrojů může zlepšit provádění programu při této optimalizaci.
Co je strojově nezávislá optimalizace kódu?
Když se optimalizace provádí na mezikódu, nazývá se to strojově nezávislá optimalizace kódu. Existují různé techniky pro dosažení strojově nezávislé optimalizace kódu. Jsou popsány pomocí následujících příkladů.
Přečtěte si níže uvedené řádky kódu.
for (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. Takže tento řádek může být umístěn mimo smyčku následovně.
b=x+2;
for (j=0; j< 10; j++)
{a[j]=5j;
}
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 nebude nikdy rovna 10. Je již inicializována na hodnotu 5. Proto tento blok lze odstranit. Tato technika je odstranění mrtvého kódu.
Další metodou je redukce síly. Aritmetické operace jako násobení vyžadují více paměti, času a cyklů CPU. Tyto drahé výrazy lze nahradit levnými výrazy jako b=a2; nebo lze nahradit přidáním, b=a + a;
Odkaz na kód níže.
for (j=1; j <=5; j ++) {
value=j5;
}
Namísto násobení lze kód změnit následovně.
int temp=5;
for (j=1; j<=5; j++) {
temp=teplota + 5;
value=temp;
}
Je možné vyhodnotit výrazy, které jsou konstanty za běhu. Říká se tomu konstantní skládání. Může být uvedeno jako b[j+1]=c [j+1];
Místo toho lze změnit následovně.
n=j +1;
b[n]=c[n];
Smyčky mohou být následující.
for (j=0; j<5; j++) {
printf(“a\n”);
}
for (j=0; j <5; j++) {
printf(“b\n”);
}
Tisk a a b, oba mají stejný počet iterací. Obě lze zkombinovat do jedné smyčky for následovně.
for (j=0; j <5; j++) {
printf(“a \n”);
printf(“b\n”);
}
Další důležitou technikou je eliminace obecného podvýrazu. K provedení výpočtu je třeba nahradit identické výrazy jednou proměnnou. Podívejte se na níže uvedený kód.
a=bc + k;
d=b c + m;
Tento kód lze převést následovně.
temp=bc;
a=teplota + k;
d=teplota + m;
Není nutné znovu a znovu počítat bc. Vynásobenou hodnotu lze uložit do proměnné a znovu použít.
Jaká je podobnost mezi strojově závislou a strojově nezávislou optimalizací kódu?
Oba patří do optimalizace kódu
Jaký je rozdíl mezi strojově závislou a strojově nezávislou optimalizací kódu?
Optimalizace kódu nezávislá na stroji vs. Optimalizace kódu nezávislá na stroji |
|
Na objektový kód je použita optimalizace kódu závislá na stroji. | Na mezikód je použita optimalizace kódu nezávislá na stroji. |
Zapojení s hardwarem | |
Optimalizace závislá na stroji zahrnuje registry CPU a absolutní reference paměti. | Optimalizace kódu nezávislá na stroji nezahrnuje registry CPU ani absolutní odkazy na paměť. |
Shrnutí – Strojově závislá vs. Strojově nezávislá optimalizace kódu
Optimalizace kódu se skládá ze dvou optimalizačních technik, jmenovitě optimalizace kódu závislá na stroji a na stroji nezávislá. Rozdíl mezi strojově závislou a strojově nezávislou optimalizací kódu je v tom, že strojově závislá optimalizace je aplikována na objektový kód, zatímco strojově nezávislá optimalizace kódu je aplikována na přechodný kód.
Stáhněte si PDF verzi Optimalizace kódu závislá na počítači vs. Optimalizace kódu nezávislá na stroji
Můžete si stáhnout PDF verzi tohoto článku a použít ji pro offline účely podle citace. Stáhněte si PDF verzi zde Rozdíl mezi optimalizací kódu závislou na počítači a optimalizací kódu nezávislou na stroji