Diferența dintre optimizarea codului dependent de mașină și a mașinii

Diferența cheie - mașină Dependent vs Maşină Optimizarea codului independent
 

Programele de calculator sunt seturi de instrucțiuni date hardware-ului, pentru a efectua sarcini. Aceste programe sunt în mare parte scrise în limbi de nivel înalt, iar computerul nu înțelege limba respectivă. Prin urmare, un compilator este folosit pentru a converti aceste instrucțiuni în codul mașinii sau codul țintă. Acesta trece prin mai multe faze pentru a construi codul țintă. Optimizarea codului este una dintre ele. Există două tehnici de optimizare, cum ar fi optimizarea codului dependent de mașină și mașină. diferența cheie între dependența de mașină și optimizarea codului mașinii independente este faptul că optimizarea mașinii dependente este aplicată codului obiect în timp ce codul intermediar este aplicat optimizării codului independent de mașină.

CUPRINS

1. Prezentare generală și diferență cheie
2. Ce este Optimizarea codului dependent de mașină
3. Ce este Machine Optimization Code Optimization
4. Asemănări între optimizarea codului dependent de mașină și a mașinii
5. Comparație de la o parte la alta - Masurare dependenta de masina vs Optimizarea codului independent de masina in forma tabulara
6. rezumat

Ce este Optimizarea codului dependent de mașină?

Când convertiți codul sursă în cod obiect sau cod țintă, compilatorul trece prin mai multe faze. Mai întâi, codul sursă este dat analizorului Lexical care produce jetoanele. Apoi, ieșirea este dată analizorului de sintaxă care investighează dacă jetoanele generate sunt în ordine logică. Această ieșire este dată analizorului semantic. Să presupunem că există o bucată de cod ca p = q + r;

Aici, p, q sunt numere întregi, dar r este float. Folosind analizorul semantic, variabila c întreg este convertită la un flotor. Prin urmare, face analiza semantică. Ieșirea analizorului semantic se duce la generatorul de cod intermediar. Acesta returnează un cod intermediar, care apoi merge la optimizatorul de cod. Optimizarea codului este procesul de eliminare a declarațiilor non-esențiale ale programului fără a schimba semnificația codului sursă actual. Nu este o optimizare obligatorie, dar poate îmbunătăți timpul de funcționare a codului țintă. Ieșirea optimizatorului de cod este dată generatorului de coduri și, în final, codul țintă este construit.

Figura 01: Fazele compilatorului

În optimizarea codului dependent de mașină, se aplică optimizarea codului sursă. Alocarea unui număr suficient de resurse poate îmbunătăți execuția programului în această optimizare.

Ce este Machine Optimization Code Optimization?

Când se efectuează optimizarea pe codul intermediar, se numește optimizarea codului mașinii independente. Există diferite tehnici pentru obținerea optimizării codului independent de mașină. Acestea sunt descrise folosind următoarele exemple.

Citiți mai jos liniile de cod.

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

b = x + 2;

a [j] = 5 * j;

Conform codului de mai sus, b = x + 2 este calculat din nou și din nou în fiecare iterație. Odată ce b este calculat, nu se modifică. Deci, această linie poate fi plasată în afara bucla după cum urmează.

b = x + 2;

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

a [j] = 5 * j;

Aceasta se numește mișcare de cod.

Citiți mai jos liniile de cod.

j = 5;

dacă (j == 10)

a = b + 20;

Conform codului de mai sus, "dacă blocul" nu va executa niciodată deoarece valoarea j nu va fi niciodată egală cu 10. Este deja inițializată la valoarea 5. Prin urmare, acest bloc if poate fi eliminat. Această tehnică este eliminarea codului mort.

O altă metodă este reducerea tensiunii. Operațiile aritmetice precum multiplicarea necesită mai multă memorie, timp și cicluri CPU. Aceste expresii scumpe pot fi înlocuite cu expresii ieftine cum ar fi b = a * 2; sau poate fi înlocuit prin adăugare, b = a + a;

Consultați codul de mai jos.

pentru (j = 1; <= 5; j ++)

valoare = j * 5;

În loc de multiplicare, codul poate fi modificat după cum urmează.

int temp = 5;

pentru (j = 1;<=5; j++)

temp = temp + 5;

valoare = temp;

Este posibil să se evalueze expresiile care sunt constante în timpul rulării. Se numeste pliere constantă. Se poate menționa, de exemplu, b [j + 1] = c [j + 1];

În schimb, acesta poate fi modificat după cum urmează.

n = j +1;

b [n] = c [n];

Pot exista buclele după cum urmează.

pentru (j = 0;<5; j++)

printf ( „\ n“);

pentru (j = 0; <5; j++)

printf ( „b \ n“);

Imprimarea a și b, ambele au același număr de iterații. Ambele pot fi combinate la unul pentru buclă după cum urmează.

pentru (j = 0; <5; j++)

printf ("a \ n");

printf ( „b \ n“);

O altă tehnică importantă este Eliminarea comună a sub-expresiilor. Trebuie să înlocuiți expresiile identice cu o singură variabilă pentru a face calculul. Consultați codul de mai jos.

a = b * c + k;

d = b * c + m;

Acest cod poate fi convertit după cum urmează.

temp = b * c;

a = temperatura + k;

d = temp + m;

Nu este necesar să calculați b * c din nou și din nou. Valoarea multiplicată poate fi stocată într-o variabilă și reutilizată.

Care este similitudinea dintre dependența de mașină și optimizarea codului mașinii independente?

  • Ambele aparțin codului de optimizare

Care este diferența dintre dependența de mașină și optimizarea codului mașinii independente?

Machine Dependent vs Machine Optimization Cod Independent 

Optimizarea codului dependent de mașină este aplicată codului obiect. Optimizarea codului independentă de mașină este aplicată codului intermediar.
Implicare cu hardware
Optimizarea dependentă de mașină implică registrele CPU și referințele absolute ale memoriei.  Optimizarea codurilor independente de mașină nu implică registre CPU sau referințe absolute de memorie.

Rezumat - Masina Dependentă față de optimizarea codului independent de mașină 

Optimizarea codului constă în două tehnici de optimizare, și anume optimizarea codului dependentă de mașină și a mașinii. Diferența dintre optimizarea codului dependentă de mașină și cea independentă a mașinii este că optimizarea dependentă de mașină este aplicată codului obiect, în timp ce optimizarea codului independent de mașină este aplicată codului intermediar.

Descărcați versiunea PDF a optimizării codului independent de mașină, care depinde de mașină

Puteți descărca versiunea PDF a acestui articol și o puteți utiliza în scopuri offline conform notei de citare. Descărcați versiunea PDF aici Diferența dintre optimizarea mașinilor dependente de mașină și mașină

Referinţă:

1. "Proiectarea compilatoarelor" Optimizarea codului. "GeeksforGeeks. Disponibil aici
2.Point, Tutoriale. "Designul compilatorului - optimizarea codului". Www.tutorialspoint.com, Tutorials Point, 15 Aug 2017. Disponibil aici  
3.Estudies4you. "Materialul de studiu JNTUH CSE". Diferența dintre optimizarea codului dependent de mașină și a codului independent. Disponibil aici  

Datorită fotografiei:

1.Compilator de I, Surachit, (CC BY-SA 3.0) prin intermediul Commons Wikimedia