Differenza tra ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina

Sommario:

Differenza tra ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina
Differenza tra ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina

Video: Differenza tra ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina

Video: Differenza tra ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina
Video: Auto-orale: Procedimento e sanzioni disciplinari (18/3/2022) 2024, Novembre
Anonim

Differenza chiave: ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina

I programmi per computer sono insiemi di istruzioni fornite all'hardware per eseguire attività. Questi programmi sono per lo più scritti in linguaggi di alto livello e il computer non comprende quella lingua. Pertanto, viene utilizzato un compilatore 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 è una di queste. Esistono due tecniche di ottimizzazione come l'ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina. Il differenza fondamentale tra l'ottimizzazione del codice dipendente dalla macchina e quella 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.

Cos'è l'ottimizzazione del codice dipendente dalla macchina?

Quando si converte il codice sorgente in codice oggetto o codice di destinazione, il compilatore passa attraverso diverse fasi. Innanzitutto, il codice sorgente viene fornito all'analizzatore lessicale che produce token. Quindi, l'output viene fornito all'analizzatore di sintassi che indaga se i token generati sono in ordine logico. Tale output viene fornito all'analizzatore semantico. Supponiamo che ci sia un pezzo di codice come p=q + r;

Qui, p, q sono numeri interi, ma r è un float. Utilizzando l'analizzatore semantico, la variabile intera c viene convertita in float. Pertanto, esegue l'analisi semantica. L'output dell'analizzatore semantico va al generatore di codice intermedio. Restituisce un codice intermedio che va quindi all'ottimizzatore di codice. L'ottimizzazione del codice è il processo di eliminazione delle istruzioni del 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 dell'ottimizzatore di codice viene fornito al generatore di codice e, infine, viene creato il codice di destinazione.

Differenza tra ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina
Differenza tra ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina
Differenza tra ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina
Differenza tra ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina

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.

Cos'è l'ottimizzazione del codice indipendente dalla macchina?

Quando l'ottimizzazione viene eseguita sul codice intermedio, viene chiamata ottimizzazione del codice indipendente dalla macchina. Esistono diverse tecniche per ottenere l'ottimizzazione del codice indipendente dalla macchina. Sono descritti utilizzando i seguenti esempi.

Leggi le seguenti righe di codice.

for (j=0; j<10; j ++) {

b=x+2;

a[j]=5 j;

}

Secondo il codice sopra, b=x+2 viene calcolato ancora e ancora in ogni iterazione. Una volta calcolato b, non cambia. Quindi, questa linea può essere posizionata al di fuori del ciclo come segue.

b=x+2;

for (j=0; j< 10; j++)

{a[j]=5j;

}

Questo si chiama movimento del codice.

Leggi le seguenti righe di codice.

j=5;

se (j==10) {

a=b+20;

}

Secondo il codice sopra, 'if block' non verrà mai eseguito perché il valore j non sarà mai uguale a 10. È già inizializzato al valore 5. Pertanto, questo blocco se 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=a2; o può essere sostituito da addizione, b=a + a;

Fai riferimento al codice sottostante.

for (j=1; j <=5; j ++) {

valore=j5;

}

Invece della moltiplicazione, il codice può essere modificato come segue.

int temp=5;

for (j=1; j<=5; j++) {

temp=temp + 5;

valore=temp;

}

È possibile valutare le espressioni che sono costanti in fase di esecuzione. Si chiama piegatura costante. Si possono affermare come b[j+1]=c [j+1];

Invece, può essere modificato come segue.

n=j +1;

b[n]=c[n];

Ci possono essere loop come segue.

for (j=0; j<5; j++) {

printf("a\n");

}

for (j=0; j <5; j++) {

printf("b\n");

}

Stampando aeb, entrambi hanno lo stesso numero di iterazioni. Entrambi possono essere combinati in un ciclo for come segue.

for (j=0; j <5; j++) {

printf("a \n");

printf("b\n");

}

Un' altra tecnica importante è l'eliminazione delle sottoespressioni comuni. È sostituire le espressioni identiche con una singola variabile per eseguire il calcolo. Fare riferimento al codice seguente.

a=bc + k;

d=b c + m;

Questo codice può essere convertito come segue.

temp=bc;

a=temp + k;

g=temp + m;

Non è necessario calcolare bc ancora e ancora. Il valore moltiplicato può essere memorizzato in una variabile e riutilizzato.

Qual è la somiglianza tra l'ottimizzazione del codice dipendente dalla macchina e quella indipendente dalla macchina?

Entrambi appartengono all'ottimizzazione del codice

Qual è la differenza tra l'ottimizzazione del codice dipendente dalla macchina e quella indipendente dalla macchina?

Ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina

L'ottimizzazione del codice dipendente dalla macchina viene 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 coinvolge i registri della CPU e riferimenti di memoria assoluti. L'ottimizzazione del codice indipendente dalla macchina non coinvolge i registri della CPU o riferimenti di memoria assoluti.

Riepilogo – Ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina

L'ottimizzazione del codice consiste in due tecniche di ottimizzazione: l'ottimizzazione del codice dipendente dalla macchina e quella indipendente dalla macchina. La differenza tra l'ottimizzazione del codice dipendente dalla macchina e quella 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.

Scarica la versione PDF dell'ottimizzazione del codice dipendente dalla macchina e quella indipendente dalla macchina

Puoi scaricare la versione PDF di questo articolo e usarla per scopi offline come da nota di citazione. Si prega di scaricare la versione PDF qui Differenza tra ottimizzazione del codice dipendente dalla macchina e indipendente dalla macchina

Consigliato: