Diferència clau: optimització de codi dependent de la màquina vs independent de la màquina
Els programes d'ordinador són conjunts d'instruccions donades al maquinari per realitzar tasques. Aquests programes estan escrits majoritàriament en llenguatges d' alt nivell i l'ordinador no entén aquest llenguatge. Per tant, s'utilitza un compilador per convertir aquestes instruccions en codi màquina o codi objectiu. Passa per diverses fases per construir el codi objectiu. L'optimització del codi és un d'ells. Hi ha dues tècniques d'optimització com, l'optimització de codi depenent de la màquina i l'optimització independent de la màquina. La diferència clau entre l'optimització de codi dependent de la màquina i l'optimització independent de la màquina és que l'optimització depenent de la màquina s'aplica al codi objecte mentre que l'optimització de codi independent de la màquina s'aplica al codi intermedi.
Què és l'optimització de codi depenent de la màquina?
Quan es converteix el codi font en codi objecte o codi objectiu, el compilador passa per diverses fases. Primer, el codi font es dóna a l'analitzador lèxic que produeix fitxes. Aleshores, la sortida es dóna a l'analitzador de sintaxi que investiga si els testimonis generats estan en ordre lògic. Aquesta sortida es dóna a l'analitzador semàntic. Suposem que hi ha un fragment de codi com p=q + r;
Aquí, p, q són nombres enters, però r és flotant. Utilitzant l'analitzador semàntic, la variable entera c es converteix en un nombre flotant. Per tant, fa l'anàlisi semàntica. La sortida de l'analitzador semàntic va al generador de codi intermedi. Retorna un codi intermedi que després va a l'optimitzador de codi. L'optimització del codi és el procés d'eliminar les declaracions del programa no essencials sense canviar el significat del codi font real. No és una optimització obligatòria, però pot millorar el temps d'execució del codi de destinació. La sortida de l'optimitzador de codi es dóna al generador de codi i, finalment, es crea el codi objectiu.
Figura 01: Fases del compilador
A l'optimització de codi depenent de la màquina, l'optimització s'aplica al codi font. Assignar una quantitat suficient de recursos pot millorar l'execució del programa en aquesta optimització.
Què és l'optimització de codi independent de la màquina?
Quan es fa l'optimització al codi intermedi, s'anomena optimització de codi independent de la màquina. Hi ha diferents tècniques per aconseguir l'optimització del codi independent de la màquina. Es descriuen amb els exemples següents.
Llegiu les línies de codi següents.
per a (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
Segons el codi anterior, b=x+2 es calcula una i altra vegada a cada iteració. Un cop calculada b, no canvia. Per tant, aquesta línia es pot col·locar fora del bucle de la manera següent.
b=x+2;
per a (j=0; j< 10; j++)
{a[j]=5j;
}
Això s'anomena moviment de codi.
Llegiu les línies de codi següents.
j=5;
si (j==10) {
a=b+20;
}
Segons el codi anterior, "if block" no s'executarà mai perquè el valor j mai serà igual a 10. Ja està inicialitzat amb el valor 5. Per tant, aquest bloc si es pot eliminar. Aquesta tècnica és l'eliminació del codi mort.
Un altre mètode és la reducció de la força. Les operacions aritmètiques com la multiplicació requereixen més memòria, temps i cicles de CPU. Aquestes expressions cares es poden substituir per expressions barates com b=a2; o es pot substituir per suma, b=a + a;
Consulteu el codi següent.
per a (j=1; j <=5; j ++) {
valor=j5;
}
En lloc de la multiplicació, el codi es pot canviar de la següent manera.
int temp=5;
per a (j=1; j<=5; j++) {
temp=temperatura + 5;
valor=temp;
}
És possible avaluar les expressions que són constants en temps d'execució. S'anomena plegat constant. Es pot afirmar com b[j+1]=c [j+1];
En canvi, es pot canviar de la següent manera.
n=j +1;
b[n]=c[n];
Pot haver-hi bucles de la següent manera.
per a (j=0; j<5; j++) {
printf(“a\n”);
}
per a (j=0; j <5; j++) {
printf(“b\n”);
}
Impressió a i b, tots dos tenen el mateix nombre d'iteracions. Tots dos es poden combinar amb un bucle de la següent manera.
per a (j=0; j <5; j++) {
printf(“a \n”);
printf(“b\n”);
}
Una altra tècnica important és l'eliminació de la subexpressió comuna. És substituir les expressions idèntiques per una sola variable per fer el càlcul. Consulteu el codi següent.
a=bc + k;
d=b c + m;
Aquest codi es pot convertir de la següent manera.
temp=bc;
a=temp + k;
d=temp + m;
No és necessari calcular bc una vegada i una altra. El valor multiplicat es pot emmagatzemar en una variable i reutilitzar-se.
Quina semblança hi ha entre l'optimització de codi dependent de la màquina i la independent de la màquina?
Tots dos pertanyen al codi Optimization
Quina diferència hi ha entre l'optimització de codi dependent de la màquina i la independent de la màquina?
Optimització de codi dependent de la màquina vs independent de la màquina |
|
L'optimització de codi depenent de la màquina s'aplica al codi d'objecte. | L'optimització de codi independent de la màquina s'aplica al codi intermedi. |
Implicació amb el maquinari | |
L'optimització depenent de la màquina implica registres de CPU i referències de memòria absolutes. | L'optimització de codi independent de la màquina no implica registres de CPU ni referències de memòria absolutes. |
Resum: optimització de codi dependent de la màquina vs independent de la màquina
L'optimització de codi consta de dues tècniques d'optimització, a saber, l'optimització de codi dependent de la màquina i l'optimització de codi independent de la màquina. La diferència entre l'optimització de codi dependent de la màquina i l'optimització independent de la màquina és que l'optimització depenent de la màquina s'aplica al codi objecte, mentre que l'optimització de codi independent de la màquina s'aplica al codi intermedi.
Descarregueu la versió PDF de l'optimització de codi dependent de la màquina vs independent de la màquina
Podeu baixar la versió PDF d'aquest article i utilitzar-la per a finalitats fora de línia segons la nota de citació. Si us plau, descarregueu la versió PDF aquí Diferència entre l'optimització de codi dependent de la màquina i la independent de la màquina