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

Différence clé - machine Dépendant vs Machine Optimisation de code indépendante
 

Les programmes informatiques sont des ensembles d'instructions données au matériel pour effectuer des tâches. Ces programmes sont principalement é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 est l'un d'entre eux. Il existe deux techniques d’optimisation, l’optimisation du code dépendant de la machine et celle indépendante du code. le différence clé entre l'optimisation du code dépendante de la machine et indépendante de la machine est que la l'optimisation dépendante de la machine est appliquée au code objet tandis que l'optimisation du code indépendant de la machine est appliquée au code intermédiaire.

CONTENU

1. Vue d'ensemble et différence clé
2. Qu'est-ce que l'optimisation du code dépendant de la machine?
3. Qu'est-ce que l'optimisation de code indépendante de la machine?
4. Similarités entre l'optimisation de code dépendant de la machine et indépendante de la machine
5. Comparaison côte à côte - Optimisation du code dépendant de la machine vs indépendante de la machine sous forme tabulaire
6. Résumé

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 donné à 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. Ce résultat est donné à 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 float. À l'aide de l'analyseur sémantique, la variable entière c est convertie en float. Par conséquent, il effectue l'analyse sémantique. La sortie de l'analyseur sémantique est transmise au générateur de code intermédiaire. Il retourne un code intermédiaire qui va ensuite à l'optimiseur de code. L'optimisation de code consiste à éliminer les 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 la durée d'exécution du code cible. La sortie de l'optimiseur de code est transmise au générateur de code et, finalement, le code cible est construit..

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 de ressources suffisantes 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, cela s'appelle l'optimisation de code indépendant de la machine. Il existe différentes techniques permettant d’optimiser le code indépendamment de la machine. Ils sont décrits à l'aide des exemples suivants.

Lire 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 que b est calculé, cela ne change pas. Donc, cette ligne peut être placée en dehors de la boucle comme suit.

b = x + 2;

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

a [j] = 5 * j;

Ceci s'appelle le mouvement de code.

Lire les lignes de code ci-dessous.

j = 5;

si (j == 10)

a = b + 20;

Selon le code ci-dessus, 'if block' ne sera jamais exécuté car la valeur de j ne sera jamais égale à 10. Elle est déjà initialisée à la valeur 5. Par conséquent, ceci si bloc 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 de la CPU. Ces expressions coûteuses peuvent être remplacées par des expressions bon marché telles que b = a * 2; ou peut être remplacé par addition, b = a + a;

Référez-vous le code ci-dessous.

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

valeur = j * 5;

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 au moment de l'exécution. On l'appelle pliage constant. On peut y affirmer 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 imprimant 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 (“a \ n”);

printf (“b \ n”);

Une autre technique importante est la Élimination de sous-expression commune. Il consiste à remplacer les expressions identiques par une seule variable pour effectuer le calcul. Référez-vous le code ci-dessous.

a = b * c + k;

d = b * c + m;

Ce code peut être converti comme suit.

temp = b * c;

a = temp + k;

d = temp + m;

Il n'est pas nécessaire de calculer b * c 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épendant de la machine et indépendante de la machine??

  • Ces deux appartiennent à l'optimisation de code

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

Optimisation du code en fonction de la machine ou indépendante de la machine 

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

Résumé - Machine Dépendance vs optimisation du code indépendant de la machine 

L'optimisation de code consiste en deux techniques d'optimisation, à savoir l'optimisation de code dépendant de la machine et indépendante du code. La différence entre l'optimisation du code dépendant de la machine et indépendante de la machine réside dans le fait que l'optimisation dépend de la machine est appliquée au code objet alors que l'optimisation du code indépendant de la machine est appliquée au code intermédiaire..

Téléchargez la version PDF de l'optimisation de code par machine indépendante ou par 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 optimisation du code dépendant de la machine et indépendante de la machine

Référence:

1. “Conception du compilateur | Optimisation du code. ”GeeksforGeeks. Disponible ici
2.Point, tutoriels. “Conception du compilateur - Optimisation du code.” Www.tutorialspoint.com, Point sur les tutoriels, 15 août 2017. Disponible ici  
3.Etudes4vous. «Matériel d'étude JNTUH CSE.» Différence entre optimisation de code dépendante de la machine et indépendante. Disponible ici  

Courtoisie d'image:

1. «Compiler» par moi, Surachit, (CC BY-SA 3.0) via Wikimedia Commons