Računalni programi su skup uputstava koja se daju hardveru za obavljanje zadataka. Ti su programi uglavnom pisani na jezicima visoke razine, a računalo taj jezik ne razumije. Stoga se prevoditelj koristi za pretvaranje tih uputa u strojni kod ili ciljni kod. Prolazi kroz nekoliko faza za izgradnju ciljanog koda. Optimizacija koda jedan je od njih. Postoje dvije tehnike optimizacije poput, strojno ovisna i strojno neovisna optimizacija koda. ključna razlika Između strojne i neovisne strojne optimizacije koda je ta strojna ovisnost optimizacija se primjenjuje na objektni kôd dok se strojno neovisna optimizacija koda primjenjuje na srednji kod.
1. Pregled i ključne razlike
2. Što je strojno ovisna optimizacija
3. Što je strojno neovisna optimizacija koda
4. Sličnosti između strojno ovisne i strojno neovisne optimizacije
5. Usporedna usporedba - Ovisno o strojevima i neovisnoj optimizaciji koda u tabličnom obliku
6. Sažetak
Pri pretvorbi izvornog koda u objektni kod ili ciljni kod, prevoditelj prolazi kroz nekoliko faza. Prvo se izvorni kod daje Leksičkom analizatoru koji proizvodi tokene. Potom se izlaz daje analizu sintakse koji istražuje jesu li generirani tokeni u logičkom redoslijedu. Taj se izlaz daje semantičkom analizatoru. Pretpostavimo da postoji djelić koda kao p = q + r;
Ovdje su p, q cjelobrojni brojevi, ali r je float. Pomoću semantičkog analizatora, cjelobrojna varijabla c se pretvara u float. Stoga to čini semantičku analizu. Izlaz semantičkog analizatora odlazi u generator intermedijera koda. Vraća međufazni kod koji zatim ide u alat za optimizaciju koda. Optimizacija koda postupak je uklanjanja nebitnih programskih izjava bez promjene značenja stvarnog izvornog koda. To nije obvezna optimizacija, ali može poboljšati trajanje ciljanog koda. Izlaz alata za optimizaciju koda daje se generatoru koda i na kraju se ugrađuje ciljni kod.
Slika 01: Faze sastavljača
U optimizaciji koda ovisnom o strojevima, optimizacija se primjenjuje na izvorni kod. Dodjela dovoljne količine resursa može poboljšati izvršenje programa u ovoj optimizaciji.
Kad se optimizacija obavi na privremenom kodu, to se zove strojno neovisna optimizacija koda. Postoje različite tehnike za postizanje neovisne strojne optimizacije koda. Oni su opisani slijedećim primjerima.
Pročitajte niže retke koda.
za (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Prema gornjem kodu, b = x + 2 izračunava se iznova i iznova u svakoj iteraciji. Jednom kada se b izračuna, ne mijenja se. Dakle, ova linija može se postaviti izvan petlje na sljedeći način.
b = x + 2;
za (j = 0; j< 10; j++)
a [j] = 5 * j;
To se naziva kretanje koda.
Pročitajte niže retke koda.
j = 5;
ako je (j == 10)
a = b + 20;
Prema gornjem kodu, 'if block' se nikada neće izvršiti, jer j vrijednost nikada neće biti jednaka 10. Već je inicijalizirana u vrijednost 5. Stoga se ovaj blok može ukloniti. Ova tehnika je uklanjanje mrtvog koda.
Druga metoda je smanjenje snage. Aritmetičke operacije poput množenja iziskuju više memorije, vremena i CPU ciklusa. Ovi skupi izrazi mogu se zamijeniti jeftinim izrazima poput b = a * 2; ili se može zamijeniti dodatkom, b = a + a;
Pogledajte donji kôd.
za (j = 1; j <= 5; j ++)
vrijednost = j * 5;
Umjesto množenja, kod se može promijeniti na sljedeći način.
int temp = 5;
za (j = 1; j<=5; j++)
temp = temp + 5;
vrijednost = temp;
Moguće je procijeniti izraze koji su konstante za vrijeme izvođenja. To se zove stalno presavijanje. Može se navesti kao b [j + 1] = c [j + 1];
Umjesto toga, može se promijeniti na sljedeći način.
n = j +1;
b [n] = c [n];
Mogu biti petlje na sljedeći način.
za (j = 0; j<5; j++)
printf ( „a \ n”);
za (j = 0; j <5; j++)
printf ( „b \ n”);
Ispis a i b, oba imaju isti broj ponavljanja. Obje se mogu kombinirati u jedan za petlju na sljedeći način.
za (j = 0; j <5; j++)
printf ("a \ n");
printf ( „b \ n”);
Druga važna tehnika je Uobičajeno uklanjanje sub izraza. To je zamjena identičnih izraza s jednom varijablom za izračun. Pogledajte sljedeći kôd.
a = b * c + k;
d = b * c + m;
Ovaj se kôd može pretvoriti na sljedeći način.
temp = b * c;
a = temp + k;
d = temp + m;
Nije potrebno izračunati b * c iznova i iznova. Pomnožena vrijednost može se pohraniti u varijablu i ponovno upotrijebiti.
Strojna ovisnost u odnosu na strojno neovisnu optimizaciju koda | |
Strojno ovisna optimizacija koda primjenjuje se na objektni kod. | Strojno neovisna optimizacija koda primjenjuje se na srednji kod. |
Sudjelovanje s hardverom | |
Strojno ovisna optimizacija uključuje CPU registre i apsolutne memorijske reference. | Strojno neovisna optimizacija koda ne uključuje CPU registre ili apsolutne reference u memoriji. |
Optimizacija koda sastoji se od dvije optimizacijske tehnike, naime, ovisne o stroju i strojno neovisne optimizacije koda. Razlika između optimizacije koda ovisnog o stroju i neovisne optimizacije koda stroja je u tome što se strojno ovisna optimizacija primjenjuje na objektni kod, dok se na srednji kod primjenjuje strojna neovisna optimizacija..
Možete preuzeti PDF verziju ovog članka i koristiti je za izvanmrežne svrhe, prema napomeni. Ovdje preuzmite PDF verziju. Razlika između strojne i neovisne optimizacije koda
1. „Dizajn sastavljača | Kodna optimizacija. " GeeksforGeeks. Dostupno ovdje
2.Point, Vodiči. "Dizajn sastavljača - optimizacija koda." Www.tutorialspoint.com, Tutorials Point, 15. kolovoza 2017. Dostupno ovdje
3.Estudies4you. "JNTUH CSE materijal za učenje." Razlika između strojno ovisne i neovisne optimizacije koda. Dostupno ovdje
1. 'Compiler' I, Surachit, (CC BY-SA 3.0) putem Commons Wikimedia