Diferența cheie - Optimizarea codului dependent de mașină vs mașină 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 limbajul respectiv. Prin urmare, un compilator este utilizat pentru a converti aceste instrucțiuni în codul mașinii sau codul țintă. Trece prin mai multe faze pentru a construi codul țintă. Optimizarea codului este una dintre ele. Există două tehnici de optimizare precum, optimizarea codului dependentă de mașină și independentă de mașină. Diferența cheie între optimizarea codului dependent de mașină și optimizarea codului independent de mașină este că optimizarea dependentă de mașină se aplică codului obiect, în timp ce optimizarea codului independent de mașină se aplică codului intermediar.
CUPRINS
1. Prezentare generală și diferența cheie
2. Ce este optimizarea codului dependent de mașină
3. Ce este optimizarea codului independent de mașină
4. Asemănări între optimizarea codului dependent de mașină și optimizarea codului independent de mașină
5. Comparație side by side - Dependența mașinii vs Optimizarea codului independent de mașină în formă tabelară
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. În primul rând, codul sursă este dat analizatorului lexical care produce jetoane. Apoi, ieșirea este dată analizatorului de sintaxă care investighează dacă jetoanele generate sunt în ordine logică. Această ieșire este dată analizatorului semantic. Să presupunem că există o bucată de cod ca p = q + r;
Aici, p, q sunt numere întregi, dar r este un float. Utilizând analizorul semantic, variabila c întreg este convertită într-un float. Prin urmare, face analiza semantică. Ieșirea analizatorului semantic merge la generatorul de cod intermediar. Returnează un cod intermediar care apoi merge la optimizatorul de cod. Optimizarea codului este procesul de eliminare a instrucțiunilor neesențiale ale programului fără a schimba semnificația codului sursă real. Nu este o optimizare obligatorie, dar poate îmbunătăți timpul de funcționare al codului țintă. Ieșirea optimizatorului de cod este dată generatorului de cod și, în cele din urmă, este construit codul țintă.
Figura 01: Faze ale compilatorului
În optimizarea codului dependent de mașină, optimizarea se aplică codului sursă. Alocarea unei cantități suficiente de resurse poate îmbunătăți execuția programului în această optimizare.
Ce este optimizarea codului independent de mașină?
Când optimizarea se face pe codul intermediar, se numește optimizarea codului independent de mașină. Există diferite tehnici pentru realizarea optimizării codului independent de mașină. Acestea sunt descrise folosind următoarele exemple.
Citiți liniile de cod de mai jos.
pentru (j = 0; j <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ă calculat b, acesta nu se modifică. Deci, această linie poate fi plasată în afara buclei după cum urmează.
b = x + 2;
pentru (j = 0; j <10; j ++)
{a [j] = 5 * j;
}
Aceasta se numește mișcare de cod.
Citiți liniile de cod de mai jos.
j = 5;
if (j == 10) {
a = b + 20;
}
Conform codului de mai sus, „dacă blocul” nu se va executa niciodată deoarece valoarea j nu va fi niciodată egală cu 10. Este deja inițializată la valoarea 5. Prin urmare, dacă blocul poate fi eliminat. Această tehnică este eliminarea codului mort.
O altă metodă este reducerea rezistenței. Operațiile aritmetice cum ar fi multiplicarea necesită mai multă memorie, timp și cicluri CPU. Aceste expresii scumpe pot fi înlocuite cu expresii ieftine precum b = a * 2; sau poate fi înlocuit cu adunare, b = a + a;
Consultați codul de mai jos.
pentru (j = 1; j <= 5; j ++) {
valoare = j * 5;
}
În loc de multiplicare, codul poate fi schimbat după cum urmează.
int temp = 5;
pentru (j = 1; j <= 5; j ++) {
temp = temp + 5;
valoare = temp;
}
Este posibil să evaluați expresiile care sunt constante în timpul rulării. Se numește plierea constantă. Se pot afirma precum b [j + 1] = c [j + 1];
În schimb, poate fi modificat după cum urmează.
n = j +1;
b [n] = c [n];
Pot exista bucle după cum urmează.
pentru (j = 0; j <5; j ++) {
printf („a / n”);
}
pentru (j = 0; j <5; j ++) {
printf („b / n”);
}
Imprimarea a și b, ambele au același număr de iterații. Ambele pot fi combinate la una pentru buclă după cum urmează.
pentru (j = 0; j <5; j ++) {
printf („a / n”);
printf („b / n”);
}
O altă tehnică importantă este eliminarea subexpresiei comune. Este pentru a înlocui 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 = temp + 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 asemănarea dintre optimizarea codului dependent de mașină și optimizarea codului independent de mașină?
Ambele aparțin optimizării codului
Care este diferența dintre optimizarea codului dependent de mașină și optimizarea codului independent de mașină?
Difuzarea articolului din mijloc înainte de tabel
Dependența de mașină vs Optimizarea codului independent de mașină |
|
Optimizarea codului dependent de mașină este aplicată codului obiect. | Optimizarea codului independent de mașină este aplicată codului intermediar. |
Implicarea în hardware | |
Optimizarea dependentă de mașină implică registre CPU și referințe absolute de memorie. | Optimizarea codului independent de mașină nu implică registre CPU sau referințe absolute de memorie. |
Rezumat - Dependența mașinii vs optimizarea codului independent de mașină
Optimizarea codului constă din două tehnici de optimizare și anume, optimizarea codului dependentă de mașină și independentă de mașină. Diferența dintre optimizarea codului dependent de mașină și optimizarea codului independent de mașină este că optimizarea dependentă de mașină se aplică codului obiect, în timp ce optimizarea codului independent de mașină se aplică codului intermediar.
Descărcați versiunea PDF a Machine Dependent vs Machine Independent Code Optimization
Puteți descărca versiunea PDF a acestui articol și o puteți folosi în scopuri offline, conform notei de citare. Vă rugăm să descărcați versiunea PDF aici Diferența dintre optimizarea codului dependent de mașină și cea independentă de mașină