Különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között

Tartalomjegyzék:

Különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között
Különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között

Videó: Különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között

Videó: Különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között
Videó: Lec-25: What is Code Optimization | Machine Dependent vs Machine Independent Techniques 2024, November
Anonim

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.

Különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között
Különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között
Különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között
Különbség a gépfüggő és a gépfüggetlen kódoptimalizálás között

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

Ajánlott: