Différence entre l'optimisation de code dépendante de la machine et indépendante de la machine

Table des matières:

Différence entre l'optimisation de code dépendante de la machine et indépendante de la machine
Différence entre l'optimisation de code dépendante de la machine et indépendante de la machine

Vidéo: Différence entre l'optimisation de code dépendante de la machine et indépendante de la machine

Vidéo: Différence entre l'optimisation de code dépendante de la machine et indépendante de la machine
Vidéo: Compiler Design: Principal Sources of Optimization 2024, Novembre
Anonim

Différence clé - Optimisation du code dépendant de la machine vs indépendante de la machine

Les programmes informatiques sont des ensembles d'instructions données au matériel pour effectuer des tâches. Ces programmes sont pour la plupart écrits dans des langages de haut niveau, et l'ordinateur ne comprend pas ce langage. Par conséquent, un compilateur est utilisé pour convertir ces instructions en code machine ou en code cible. Il passe par plusieurs phases pour construire le code cible. L'optimisation du code en fait partie. Il existe deux techniques d'optimisation telles que l'optimisation de code dépendante de la machine et indépendante de la machine. le différence clé entre l'optimisation de code dépendante de la machine et indépendante de la machine est que l'optimisation dépendante de la machine est appliquée au code objet tandis que l'optimisation de code indépendante de la machine est appliquée au code intermédiaire.

Qu'est-ce que l'optimisation du code dépendant de la machine ?

Lors de la conversion du code source en code objet ou en code cible, le compilateur passe par plusieurs phases. Tout d'abord, le code source est transmis à l'analyseur lexical qui produit des jetons. Ensuite, la sortie est transmise à l'analyseur de syntaxe qui vérifie si les jetons générés sont dans l'ordre logique. Cette sortie est transmise à l'analyseur sémantique. Supposons qu'il existe un morceau de code tel que p=q + r;

Ici, p, q sont des entiers, mais r est un flottant. À l'aide de l'analyseur sémantique, la variable entière c est convertie en flottant. Par conséquent, il effectue l'analyse sémantique. La sortie de l'analyseur sémantique va au générateur de code intermédiaire. Il renvoie un code intermédiaire qui passe ensuite à l'optimiseur de code. L'optimisation du code est le processus d'élimination des instructions de programme non essentielles sans changer la signification du code source réel. Ce n'est pas une optimisation obligatoire mais cela peut améliorer le temps d'exécution du code cible. La sortie de l'optimiseur de code est donnée au générateur de code, et enfin, le code cible est construit.

Différence entre l'optimisation de code dépendante de la machine et indépendante de la machine
Différence entre l'optimisation de code dépendante de la machine et indépendante de la machine
Différence entre l'optimisation de code dépendante de la machine et indépendante de la machine
Différence entre l'optimisation de code dépendante de la machine et indépendante de la machine

Figure 01: Phases du compilateur

Dans l'optimisation du code dépendant de la machine, l'optimisation est appliquée au code source. L'allocation d'une quantité suffisante de ressources peut améliorer l'exécution du programme dans cette optimisation.

Qu'est-ce que l'optimisation de code indépendante de la machine ?

Lorsque l'optimisation est effectuée sur le code intermédiaire, on parle d'optimisation de code indépendante de la machine. Il existe différentes techniques pour réaliser une optimisation de code indépendante de la machine. Ils sont décrits à l'aide des exemples suivants.

Lisez les lignes de code ci-dessous.

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

b=x+2;

a[j]=5 j;

}

Selon le code ci-dessus, b=x+2 est calculé encore et encore à chaque itération. Une fois b calculé, il ne change pas. Ainsi, cette ligne peut être placée en dehors de la boucle comme suit.

b=x+2;

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

{a[j]=5j;

}

C'est ce qu'on appelle le mouvement de code.

Lisez les lignes de code ci-dessous.

j=5;

si (j==10) {

a=b+20;

}

Selon le code ci-dessus, 'if block' ne s'exécutera jamais car la valeur j ne sera jamais égale à 10. Il est déjà initialisé à la valeur 5. Par conséquent, ce bloc if peut être supprimé. Cette technique est l'élimination du code mort.

Une autre méthode est la réduction de la force. Les opérations arithmétiques telles que la multiplication nécessitent plus de mémoire, de temps et de cycles CPU. Ces expressions coûteuses peuvent être remplacées par des expressions bon marché comme b=a2; ou peut être remplacé par addition, b=a + a;

Reportez-vous au code ci-dessous.

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

valeur=j5;

}

Au lieu de la multiplication, le code peut être modifié comme suit.

int temp=5;

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

temp=temp + 5;

valeur=temp;

}

Il est possible d'évaluer les expressions qui sont des constantes à l'exécution. C'est ce qu'on appelle le pliage constant. Il peut être énoncé tel que b[j+1]=c [j+1];

Au lieu de cela, il peut être modifié comme suit.

n=j +1;

b[n]=c[n];

Il peut y avoir des boucles comme suit.

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

printf("a\n");

}

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

printf(“b\n”);

}

En affichant a et b, les deux ont le même nombre d'itérations. Les deux peuvent être combinés en une boucle for comme suit.

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

printf("un \n");

printf(“b\n”);

}

Une autre technique importante est l'élimination des sous-expressions communes. Il s'agit de remplacer les expressions identiques par une seule variable pour faire le calcul. Reportez-vous au code ci-dessous.

a=bc + k;

d=b c + m;

Ce code peut être converti comme suit.

temp=bc;

a=temp + k;

d=temp + m;

Il n'est pas nécessaire de calculer bc encore et encore. La valeur multipliée peut être stockée dans une variable et réutilisée.

Quelle est la similarité entre l'optimisation de code dépendante et indépendante de la machine ?

Les deux appartiennent au code Optimization

Quelle est la différence entre l'optimisation de code dépendante et indépendante de la machine ?

Optimisation du code dépendant de la machine vs indépendante de la machine

L'optimisation du code dépendant de la machine est appliquée au code objet. L'optimisation du code indépendante de la machine est appliquée au code intermédiaire.
Implication avec le matériel
L'optimisation dépendante de la machine implique des registres CPU et des références de mémoire absolues. L'optimisation du code indépendant de la machine n'implique pas de registres CPU ou de références de mémoire absolues.

Résumé - Optimisation de code dépendante de la machine vs indépendante de la machine

L'optimisation du code consiste en deux techniques d'optimisation, à savoir l'optimisation du code dépendante de la machine et indépendante de la machine. La différence entre l'optimisation de code dépendante de la machine et indépendante de la machine est que l'optimisation dépendante de la machine est appliquée au code objet tandis que l'optimisation de code indépendante de la machine est appliquée au code intermédiaire.

Téléchargez la version PDF de l'optimisation de code dépendante de la machine vs indépendante de la machine

Vous pouvez télécharger la version PDF de cet article et l'utiliser à des fins hors ligne conformément à la note de citation. Veuillez télécharger la version PDF ici Différence entre l'optimisation de code dépendante et indépendante de la machine

Conseillé: