I programmi per computer sono serie di istruzioni fornite all'hardware, per eseguire attività. Questi programmi sono scritti principalmente in linguaggi di alto livello e il computer non capisce quella lingua. Pertanto, un compilatore viene utilizzato per convertire tali istruzioni in codice macchina o codice di destinazione. Passa attraverso diverse fasi per costruire il codice di destinazione. L'ottimizzazione del codice è uno di questi. Esistono due tecniche di ottimizzazione come l'ottimizzazione del codice dipendente dalla macchina e quella indipendente dalla macchina. Il differenza fondamentale tra l'ottimizzazione della macchina e l'ottimizzazione del codice indipendente dalla macchina è che l'ottimizzazione dipendente dalla macchina viene applicata al codice oggetto mentre l'ottimizzazione del codice indipendente dalla macchina viene applicata al codice intermedio.
1. Panoramica e differenza chiave
2. Che cosa è l'ottimizzazione del codice dipendente dalla macchina
3. Cos'è l'ottimizzazione del codice indipendente dalla macchina
4. Somiglianze tra l'ottimizzazione della macchina e l'ottimizzazione del codice indipendente dalla macchina
5. Confronto affiancato - Ottimizzazione del codice dipendente dalla macchina rispetto alla macchina in forma tabulare
6. Sommario
Quando si converte il codice sorgente in codice oggetto o codice obiettivo, il compilatore passa attraverso diverse fasi. Innanzitutto, il codice sorgente viene fornito all'analizzatore Lexical che produce token. Quindi, l'output viene fornito all'analizzatore di sintassi che verifica se i token generati sono nell'ordine logico. Questo output è dato all'analizzatore semantico. Supponiamo che ci sia un pezzo di codice come p = q + r;
Qui, p, q sono interi, ma r è un float. Usando l'analizzatore semantico, la variabile intera c viene convertita in float. Pertanto, fa l'analisi semantica. L'output dell'analizzatore semantico passa al generatore di codice intermedio. Restituisce un codice intermedio che poi va a code optimizer. L'ottimizzazione del codice è il processo di eliminazione delle istruzioni di programma non essenziali senza modificare il significato del codice sorgente effettivo. Non è un ottimizzazione obbligatoria ma, può migliorare il tempo di esecuzione del codice di destinazione. L'output del programma di ottimizzazione del codice viene fornito al generatore di codice e, infine, viene creato il codice di destinazione.
Figura 01: Fasi del compilatore
Nell'ottimizzazione del codice dipendente dalla macchina, l'ottimizzazione viene applicata al codice sorgente. L'allocazione di una quantità sufficiente di risorse può migliorare l'esecuzione del programma in questa ottimizzazione.
Quando l'ottimizzazione viene eseguita sul codice intermedio, si chiama ottimizzazione del codice indipendente dalla macchina. Esistono diverse tecniche per ottenere l'ottimizzazione del codice indipendente dalla macchina. Sono descritti usando i seguenti esempi.
Leggi le linee del codice qui sotto.
per (j = 0; j<10; j ++)
b = x + 2;
a [j] = 5 * j;
Secondo il codice precedente, b = x + 2 viene calcolato ancora e ancora in ogni iterazione. Una volta calcolato b, non cambia. Quindi, questa linea può essere posizionata all'esterno del loop come segue.
b = x + 2;
per (j = 0; j< 10; j++)
a [j] = 5 * j;
Questo è chiamato movimento del codice.
Leggi le linee del codice qui sotto.
j = 5;
se (j == 10)
a = b + 20;
Secondo il codice precedente, "se il blocco" non verrà mai eseguito perché il valore j non sarà mai uguale a 10. È già inizializzato sul valore 5. Pertanto, questo se il blocco può essere rimosso. Questa tecnica è l'eliminazione del codice morto.
Un altro metodo è la riduzione della forza. Le operazioni aritmetiche come la moltiplicazione richiedono più memoria, tempo e cicli della CPU. Queste espressioni costose possono essere sostituite da espressioni economiche come b = a * 2; o può essere sostituito da addizione, b = a + a;
Fare riferimento al codice seguente.
per (j = 1; j <= 5; j ++)
valore = j * 5;
Invece della moltiplicazione, il codice può essere modificato come segue.
int temp = 5;
per (j = 1; j<=5; j++)
temp = temp + 5;
valore = temp;
È possibile valutare le espressioni che sono costanti in fase di esecuzione. È chiamato piegatura costante. Ci può essere dichiarato come b [j + 1] = c [j + 1];
Invece, può essere cambiato come segue.
n = j +1;
b [n] = c [n];
Ci possono essere loop come segue.
per (j = 0; j<5; j++)
printf ( “\ n”);
per (j = 0; j <5; j++)
printf ( “b \ n”);
Stampando aeb, entrambi hanno lo stesso numero di iterazioni. Entrambi possono essere combinati con un ciclo for come segue.
per (j = 0; j <5; j++)
printf ("a \ n");
printf ( “b \ n”);
Un'altra tecnica importante è la Eliminazione comune dell'espressione secondaria. Sostituire le espressioni identiche con una singola variabile per eseguire il calcolo. Fare riferimento al codice qui sotto.
a = b * c + k;
d = b * c + m;
Questo codice può essere convertito come segue.
temp = b * c;
a = temp + k;
d = temp + m;
Non è necessario calcolare b * c ancora e ancora. Il valore moltiplicato può essere memorizzato in una variabile e riutilizzato.
Ottimizzazione del codice dipendente dalla macchina e dipendente dalla macchina | |
L'ottimizzazione del codice dipendente dalla macchina è applicata al codice oggetto. | L'ottimizzazione del codice indipendente dalla macchina viene applicata al codice intermedio. |
Coinvolgimento con l'hardware | |
L'ottimizzazione dipendente dalla macchina include i registri della CPU e riferimenti di memoria assoluti. | L'ottimizzazione del codice indipendente dalla macchina non coinvolge i registri della CPU oi riferimenti di memoria assoluti. |
L'ottimizzazione del codice consiste in due tecniche di ottimizzazione, ovvero l'ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina. La differenza tra l'ottimizzazione del codice dipendente dalla macchina e quella indipendente dalla macchina è che l'ottimizzazione dipendente dalla macchina è applicata al codice oggetto mentre l'ottimizzazione del codice indipendente dalla macchina è applicata al codice intermedio.
È possibile scaricare la versione PDF di questo articolo e utilizzarlo per scopi offline come da nota di citazione. Si prega di scaricare la versione PDF qui Differenza tra dipendente macchina e ottimizzazione del codice macchina indipendente
1. "Compilatore Design | Ottimizzazione del codice. "GeeksforGeeks. Disponibile qui
2. Point, Tutorials. "Compilatore Design - Ottimizzazione del codice." Www.tutorialspoint.com, Tutorials Point, 15 agosto 2017. Disponibile qui
3.Estudies4you. "Materiale di studio JNTUH CSE". Differenza tra ottimizzazione dipendente dal codice macchina e codice indipendente. Disponibile qui
1. "Compilatore" di I, Surachit, (CC BY-SA 3.0) attraverso Commons Wikimedia