Kulcskülönbség – gépfüggő vs gépfüggetlen kódoptimalizálás
A számítógépes programok a hardvernek a feladatok végrehajtásához adott utasítások halmazai. Ezek a programok többnyire magas szintű nyelveken íródnak, és a számítógép nem érti ezt a nyelvet. Ezért fordítóprogramot használnak az utasítások gépi kódmá vagy célkóddá alakítására. A célkód felépítése több fázison megy keresztül. A kódoptimalizálás az egyik ilyen. Két optimalizálási technika létezik, például a gépfüggő és a gépfüggetlen kódoptimalizálás. A fő különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között az, hogy a gépfüggő optimalizálást az objektumkódra, míg a gépfüggetlen kódoptimalizálást a köztes kódra alkalmazzák.
Mi az a gépfüggő kódoptimalizálás?
A forráskód objektumkódra vagy célkódra konvertálásakor a fordító több fázison megy keresztül. Először is, a forráskódot a Lexical analizátor kapja, amely tokeneket állít elő. Ezután a kimenet a szintaktikai elemzőhöz kerül, amely megvizsgálja, hogy a generált tokenek logikai sorrendben vannak-e. Ezt a kimenetet a szemantikai elemző kapja meg. Tételezzük fel, hogy van egy kódrészlet p=q + r;
Itt p, q egész számok, de r lebegőpont. A szemantikai elemző segítségével a c integer változót lebegővé alakítjuk. Ezért elvégzi a szemantikai elemzést. A szemantikai elemző kimenete a köztes kódgenerátorhoz kerül. Egy köztes kódot ad vissza, amely ezután a kódoptimalizálóhoz kerül. A kódoptimalizálás az a folyamat, amely a nem lényeges programutasítások eltávolítását jelenti a tényleges forráskód jelentésének megváltoztatása nélkül. Nem kötelező optimalizálni, de javíthatja a célkód futási idejét. A kódoptimalizáló kimenetét a kódgenerátor kapja meg, és végül elkészül a célkód.
01. ábra: A fordítóprogram fázisai
A gépfüggő kódoptimalizálás során az optimalizálás a forráskódra vonatkozik. Elegendő mennyiségű erőforrás lefoglalása javíthatja a program végrehajtását ebben az optimalizálásban.
Mi az a gépi független kódoptimalizálás?
Amikor az optimalizálást a köztes kódon végzik el, azt gépfüggetlen kódoptimalizálásnak nevezik. Különféle technikák léteznek a gépfüggetlen kódoptimalizálás elérésére. Ezek leírása a következő példák segítségével történik.
Olvassa el az alábbi kódsorokat.
a (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
A fenti kód szerint b=x+2 minden iterációban újra és újra kiszámításra kerül. A b kiszámítása után nem változik. Tehát ez a sor a hurkon kívülre helyezhető a következőképpen.
b=x+2;
for (j=0; j< 10; j++)
{a[j]=5j;
}
Ezt kódmozgásnak hívják.
Olvassa el az alábbi kódsorokat.
j=5;
if (j==10) {
a=b+20;
}
A fenti kód szerint az „if blokk” soha nem fog végrehajtásra kerülni, mert j értéke soha nem lesz egyenlő 10-el. Már inicializálva van az 5-ös értékre. Ezért ez az if blokk eltávolítható. Ez a technika a holt kód kiküszöbölése.
Egy másik módszer az erőcsökkentés. Az aritmetikai műveletek, például a szorzás több memóriát, időt és CPU-ciklust igényelnek. Ezek a drága kifejezések helyettesíthetők olcsó kifejezésekkel, például b=a2; vagy összeadással helyettesíthető, b=a + a;
Lásd az alábbi kódot.
a (j=1; j <=5; j ++) {
érték=j5;
}
Szorzás helyett a kód az alábbiak szerint módosítható.
int temp=5;
a (j=1; j<=5; j++) {
hőmérséklet=hőmérséklet + 5;
érték=hőmérséklet;
}
Lehetőség van a futásidőben konstans kifejezések kiértékelésére. Állandó hajtogatásnak hívják. Megállapítható, hogy b[j+1]=c [j+1];
Ehelyett a következőképpen módosítható.
n=j +1;
b[n]=c[n];
A következő hurkok lehetnek.
for (j=0; j<5; j++) {
printf(“a\n”);
}
a (j=0; j <5; j++) {
printf(“b\n”);
}
A és b nyomtatása, mindkettőnek azonos számú iterációja van. Mindkettő a következőképpen kombinálható egy for ciklusba.
a (j=0; j <5; j++) {
printf(“a \n”);
printf(“b\n”);
}
Egy másik fontos technika a Common sub kifejezések eltávolítása. A számításhoz az azonos kifejezéseket egyetlen változóval kell helyettesíteni. Lásd az alábbi kódot.
a=bc + k;
d=b c + m;
Ez a kód a következőképpen konvertálható.
temp=bc;
a=hőmérséklet + k;
d=hőmérséklet + m;
Nem szükséges újra és újra kiszámolni a bc-t. A szorzott érték eltárolható egy változóban, és újra felhasználható.
Mi a hasonlóság a gépfüggő és a gépfüggetlen kódoptimalizálás között?
Mindkettő a kódoptimalizáláshoz tartozik
Mi a különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között?
Gépfüggő vs gépfüggetlen kódoptimalizálás |
|
Az objektumkódra gépfüggő kódoptimalizálást alkalmazunk. | Gépfüggetlen kódoptimalizálást alkalmazunk a közbenső kódra. |
Részvétel a hardverrel | |
A gépfüggő optimalizálás CPU-regisztereket és abszolút memóriahivatkozásokat foglal magában. | A gépfüggetlen kódoptimalizálás nem tartalmaz CPU-regisztereket vagy abszolút memóriahivatkozásokat. |
Összefoglaló – Gépfüggő vs gépfüggetlen kódoptimalizálás
A kódoptimalizálás két optimalizálási technikából áll, nevezetesen a gépfüggő és a gépfüggetlen kódoptimalizálásból. A gépfüggő és a gépfüggetlen kódoptimalizálás közötti különbség az, hogy a géptől függő optimalizálást az objektumkódra, míg a gépfüggetlen kódoptimalizálást a köztes kódra alkalmazzák.
A Machine Dependent vs Machine Independent Code Optimization PDF verziójának letöltése
Letöltheti ennek a cikknek a PDF-verzióját, és offline célokra használhatja az idézet jegyzetének megfelelően. Kérjük, töltse le a PDF verziót innen. Különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között