Kľúčový rozdiel - strojovo závislá vs strojovo nezávislá optimalizácia kódu
Počítačové programy sú súbory pokynov poskytovaných hardvéru na vykonávanie úloh. Tieto programy sú väčšinou písané v jazykoch vyššej úrovne a počítač tomuto jazyku nerozumie. Preto sa prekladač používa na prevod týchto pokynov do strojového kódu alebo cieľového kódu. Na vytvorenie cieľového kódu prechádza niekoľkými fázami. Jednou z nich je optimalizácia kódu. Existujú dve optimalizačné techniky ako, strojovo závislá a strojovo nezávislá optimalizácia kódu. Kľúčový rozdiel medzi optimalizáciou kódu závislou od stroja a strojom nezávislým kódom je v tom, že optimalizácia závislá od stroja sa aplikuje na objektový kód, zatiaľ čo optimalizácia kódu nezávislého od stroja sa aplikuje na sprostredkujúci kód.
OBSAH
1. Prehľad a kľúčový rozdiel
2. Čo je to optimalizácia kódu závislá od stroja
3. Čo je to strojovo nezávislá optimalizácia kódu
4. Podobnosti medzi strojovo závislou a strojovo nezávislou optimalizáciou kódu
5. Porovnanie vedľa seba - strojovo závislá vs strojovo nezávislá optimalizácia kódu v tabuľkovej podobe
6. Zhrnutie
Čo je to optimalizácia kódu závislá od stroja?
Pri konverzii zdrojového kódu na objektový alebo cieľový kód prechádza kompilátor niekoľkými fázami. Najskôr sa zdrojový kód dostane do Lexikálneho analyzátora, ktorý produkuje tokeny. Potom sa výstup dostane do syntaxového analyzátora, ktorý zisťuje, či sú generované tokeny v logickom poradí. Tento výstup sa odovzdá sémantickému analyzátoru. Predpokladajme, že existuje časť kódu ako p = q + r;
Tu sú p, q celé čísla, ale r je float. Pomocou sémantického analyzátora sa celočíselná premenná c prevedie na float. Preto robí sémantickú analýzu. Výstup sémantického analyzátora smeruje do generátora sprostredkujúceho kódu. Vráti prostredný kód, ktorý potom prejde do optimalizátora kódu. Optimalizácia kódu je proces eliminácie nepodstatných programových príkazov bez zmeny významu skutočného zdrojového kódu. Nie je to povinná optimalizácia, ale môže zlepšiť prevádzkový čas cieľového kódu. Výstup optimalizátora kódu je daný generátoru kódu a nakoniec je zostavený cieľový kód.
Obrázok 01: Fázy prekladača
Pri optimalizácii strojovo závislého kódu sa optimalizácia použije na zdrojový kód. Pridelenie dostatočného množstva zdrojov môže zlepšiť vykonávanie programu v rámci tejto optimalizácie.
Čo je to strojovo nezávislá optimalizácia kódu?
Keď sa optimalizácia vykoná na prechodnom kóde, nazýva sa to strojovo nezávislá optimalizácia kódu. Existujú rôzne techniky na dosiahnutie optimalizácie kódu nezávislého od stroja. Sú opísané pomocou nasledujúcich príkladov.
Prečítajte si nižšie uvedené riadky kódu.
pre (j = 0; j <10; j ++) {
b = x + 2;
a [j] = 5 * j;
}
Podľa vyššie uvedeného kódu sa b = x + 2 počíta znova a znova v každej iterácii. Akonáhle je b vypočítané, nezmení sa. Takže tento riadok môže byť umiestnený mimo slučky nasledovne.
b = x + 2;
pre (j = 0; j <10; j ++)
{a [j] = 5 * j;
}
Toto sa nazýva pohyb kódu.
Prečítajte si nižšie uvedené riadky kódu.
j = 5;
if (j == 10) {
a = b + 20;
}
Podľa vyššie uvedeného kódu sa reťazec „if block“nikdy nespustí, pretože hodnota j sa nikdy nebude rovnať 10. Je už inicializovaná na hodnotu 5. Preto je možné blok if odstrániť. Táto technika je eliminácia mŕtveho kódu.
Ďalšou metódou je zníženie pevnosti. Aritmetické operácie ako násobenie vyžadujú viac pamäte, času a cyklov CPU. Tieto drahé výrazy je možné nahradiť lacnými výrazmi ako b = a * 2; alebo je možné ich nahradiť prídavkom, b = a + a;
Pozrite si nižšie uvedený kód.
pre (j = 1; j <= 5; j ++) {
hodnota = j * 5;
}
Namiesto násobenia je možné kód zmeniť nasledovne.
int teplota = 5;
pre (j = 1; j <= 5; j ++) {
teplota = teplota + 5;
hodnota = teplota;
}
Je možné vyhodnotiť výrazy, ktoré sú konštantami za behu. Nazýva sa to neustále skladanie. Môžu byť uvedené napríklad b [j + 1] = c [j + 1];
Namiesto toho sa dá zmeniť nasledujúcim spôsobom.
n = j +1;
b [n] = c [n];
Môžu existovať slučky nasledovne.
pre (j = 0; j <5; j ++) {
printf („a / n“);
}
pre (j = 0; j <5; j ++) {
printf („b / n“);
}
Tlač aab majú obe rovnaký počet iterácií. Oba je možné kombinovať do jedného cyklu loop nasledujúcim spôsobom.
pre (j = 0; j <5; j ++) {
printf („a / n“);
printf („b / n“);
}
Ďalšou dôležitou technikou je eliminácia spoločného podvýrazu. Jedná sa o nahradenie rovnakých výrazov jedinou premennou na vykonanie výpočtu. Pozrite si nižšie uvedený kód.
a = b * c + k;
d = b * c + m;
Tento kód je možné previesť nasledujúcim spôsobom.
teplota = b * c;
a = teplota + k;
d = teplota + m;
Nie je potrebné počítať b * c znova a znova. Vynásobená hodnota môže byť uložená v premennej a znovu použitá.
Aká je podobnosť medzi strojovo nezávislou a strojovo nezávislou optimalizáciou kódu?
Oba tieto patria do optimalizácie kódu
Aký je rozdiel medzi strojovo nezávislou a strojovo nezávislou optimalizáciou kódu?
Rozdielny článok v strede pred tabuľkou
Strojovo závislá vs strojovo nezávislá optimalizácia kódu |
|
Na objektový kód sa použije strojovo závislá optimalizácia kódu. | Na prechodný kód sa použije strojovo nezávislá optimalizácia kódu. |
Účasť na hardvéri | |
Optimalizácia závislá od stroja zahŕňa registre CPU a referencie absolútnej pamäte. | Optimalizácia kódu nezávislého od stroja nezahŕňa registre CPU ani absolútne odkazy na pamäť. |
Zhrnutie - strojovo závislá vs strojovo nezávislá optimalizácia kódu
Optimalizácia kódu pozostáva z dvoch optimalizačných techník, a to strojovo závislej a strojovo nezávislej optimalizácie kódu. Rozdiel medzi optimalizáciou kódu závislou od stroja a strojovo nezávislým kódom je v tom, že optimalizácia závislá od stroja sa aplikuje na objektový kód, zatiaľ čo optimalizácia kódu nezávislého od stroja sa aplikuje na sprostredkujúci kód.
Stiahnite si PDF verziu Machine Dependent vs Machine Independent Code Optimization
Môžete si stiahnuť verziu tohto článku vo formáte PDF a použiť ho na offline účely podľa citačnej poznámky. Tu si stiahnite verziu PDF. Rozdiel medzi optimalizáciou kódu závislou na stroji a na stroji nezávislou