Unterschied zwischen maschinenabhängiger und maschinenunabhängiger Code-Optimierung

Schlüsseldifferenz - Maschine Abhängige vs Maschine Unabhängige Code-Optimierung
 

Computerprogramme sind Anweisungen, die an die Hardware gegeben werden, um Aufgaben auszuführen. Diese Programme sind meistens in Hochsprachen verfasst und der Computer versteht diese Sprache nicht. Daher wird ein Compiler verwendet, um diese Anweisungen in Maschinencode oder Zielcode umzuwandeln. Es durchläuft mehrere Phasen, um den Zielcode zu erstellen. Code-Optimierung ist eine davon. Es gibt zwei Optimierungstechniken wie maschinenabhängige und maschinenunabhängige Codeoptimierung. Das Hauptunterschied Zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung liegt das Die maschinenabhängige Optimierung wird auf den Objektcode angewendet, während die maschinenunabhängige Codeoptimierung auf den Zwischencode angewendet wird.

INHALT

1. Übersicht und Schlüsseldifferenz
2. Was ist maschinenabhängige Code-Optimierung?
3. Was ist maschinenunabhängige Code-Optimierung?
4. Ähnlichkeiten zwischen maschinenabhängiger und maschinenunabhängiger Code-Optimierung
5. Side-by-Side-Vergleich - Machine Dependent und Machine Independent Code Optimization in tabellarischer Form
6. Zusammenfassung

Was ist maschinenabhängige Code-Optimierung??

Beim Konvertieren des Quellcodes in Objektcode oder Zielcode durchläuft der Compiler mehrere Phasen. Zunächst wird der Quellcode dem Lexical Analyzer übergeben, der Token produziert. Dann wird die Ausgabe an einen Syntaxanalysator übergeben, der untersucht, ob die generierten Token in logischer Reihenfolge sind. Diese Ausgabe wird dem semantischen Analysator übergeben. Angenommen, es gibt einen Code als p = q + r;

Hier sind p, q ganze Zahlen, aber r ist ein Float. Mit dem semantischen Analysator wird die Ganzzahlvariable c in einen Float konvertiert. Daher führt es die semantische Analyse durch. Die Ausgabe des semantischen Analysators geht an den Zwischencodegenerator. Es gibt einen Zwischencode zurück, der dann zum Code-Optimierer geht. Bei der Codeoptimierung werden nicht wesentliche Programmanweisungen entfernt, ohne die Bedeutung des tatsächlichen Quellcodes zu ändern. Es ist keine zwingende Optimierung, kann jedoch die Laufzeit des Zielcodes verbessern. Die Ausgabe des Codeoptimierers wird an den Codegenerator übergeben, und schließlich wird der Zielcode erstellt.

Abbildung 01: Phasen des Compilers

Bei der maschinenabhängigen Codeoptimierung wird der Quellcode optimiert. Durch die Zuteilung einer ausreichenden Menge an Ressourcen kann die Ausführung des Programms bei dieser Optimierung verbessert werden.

Was ist maschinenunabhängige Code-Optimierung??

Wenn die Optimierung des Zwischencodes erfolgt, wird dies als maschinenunabhängige Codeoptimierung bezeichnet. Es gibt verschiedene Techniken, um eine maschinenunabhängige Codeoptimierung zu erreichen. Sie werden anhand der folgenden Beispiele beschrieben.

Lesen Sie die folgenden Codezeilen.

für (j = 0; j<10; j ++)

b = x + 2;

a [j] = 5 * j;

Gemäß dem obigen Code wird in jeder Iteration immer wieder b = x + 2 berechnet. Sobald b berechnet ist, ändert sich nichts. Diese Linie kann also wie folgt außerhalb der Schleife platziert werden.

b = x + 2;

für (j = 0; j< 10; j++)

a [j] = 5 * j;

Dies wird als Codebewegung bezeichnet.

Lesen Sie die folgenden Codezeilen.

j = 5;

wenn (j == 10)

a = b + 20;

Gemäß obigem Code wird 'if block' niemals ausgeführt, da der Wert j niemals 10 sein wird. Er ist bereits mit dem Wert 5 initialisiert. Daher kann dieser if-Block entfernt werden. Diese Technik ist die Beseitigung von totem Code.

Eine andere Methode ist die Verringerung der Festigkeit. Arithmetische Operationen wie die Multiplikation erfordern mehr Speicher, Zeit und CPU-Zyklen. Diese teuren Ausdrücke können durch billige Ausdrücke wie b = a * 2 ersetzt werden. oder kann durch Addition ersetzt werden, b = a + a;

Siehe den Code unten.

für (j = 1; j <= 5; j ++)

Wert = j * 5;

Anstelle der Multiplikation kann der Code wie folgt geändert werden.

int temp = 5;

für (j = 1; j<=5; j++)

Temp = Temp + 5;

Wert = Temp;

Es ist möglich, die zur Laufzeit konstanten Ausdrücke auszuwerten. Es wird genannt Konstante Faltung. Es kann angegeben werden wie b [j + 1] = c [j + 1];

Stattdessen kann es wie folgt geändert werden.

n = j + 1;

b [n] = c [n];

Es können Schleifen wie folgt sein.

für (j = 0; j<5; j++)

printf ("a \ n");

für (j = 0; j <5; j++)

printf ("b \ n");

Wenn Sie a und b drucken, haben beide die gleiche Anzahl von Iterationen. Beide können wie folgt zu einer for-Schleife kombiniert werden.

für (j = 0; j <5; j++)

printf ("a \ n");

printf ("b \ n");

Eine andere wichtige Technik ist die Häufige Unterdrückung von Unterausdrücken. Die identischen Ausdrücke müssen durch eine einzige Variable ersetzt werden, um die Berechnung durchzuführen. Siehe untenstehenden Code.

a = b * c + k;

d = b * c + m;

Dieser Code kann wie folgt konvertiert werden.

Temp = b * c;

a = Temp + k;

d = Temp + m;

Es ist nicht erforderlich, b * c immer wieder zu berechnen. Der multiplizierte Wert kann in einer Variablen gespeichert und erneut verwendet werden.

Was ist die Ähnlichkeit zwischen maschinenabhängiger und maschinenunabhängiger Code-Optimierung??

  • Beides gehört zur Code-Optimierung

Was ist der Unterschied zwischen maschinenabhängiger und maschinenunabhängiger Code-Optimierung??

Maschinenabhängige vs. maschinenunabhängige Code-Optimierung 

Die maschinenabhängige Codeoptimierung wird auf den Objektcode angewendet. Die maschinenunabhängige Codeoptimierung wird auf Zwischencode angewendet.
Beteiligung an Hardware
Die maschinenabhängige Optimierung beinhaltet CPU-Register und absolute Speicherreferenzen.  Bei der maschinenunabhängigen Codeoptimierung sind keine CPU-Register oder absolute Speicherreferenzen erforderlich.

Zusammenfassung - Maschine Abhängige gegenüber maschinenunabhängiger Code-Optimierung 

Die Codeoptimierung besteht aus zwei Optimierungstechniken, nämlich der maschinenabhängigen und der maschinenunabhängigen Codeoptimierung. Der Unterschied zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung besteht darin, dass die maschinenabhängige Optimierung auf Objektcode angewendet wird, während die maschinenunabhängige Codeoptimierung auf Zwischencode angewendet wird.

Laden Sie die PDF-Version von Machine Dependent und Machine Independent Code Optimization herunter

Sie können die PDF-Version dieses Artikels herunterladen und gemäß dem Zitiervermerk für Offline-Zwecke verwenden. Laden Sie die PDF-Version hier herunter. Unterschied zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung

Referenz:

1. “Compiler-Design | Code-Optimierung. “GeeksforGeeks. Hier verfügbar
2.Point, Tutorials. „Compiler-Design - Code-Optimierung“. Www.tutorialspoint.com, Tutorials Point, 15. August 2017. Hier verfügbar  
3. Studien4you. „JNTUH CSE-Studienmaterial“. Unterschied zwischen maschinenabhängiger und unabhängiger Codeoptimierung. Hier verfügbar  

Bildhöflichkeit:

1. "Compiler" Von I Surachit, (CC BY-SA 3.0) über Commons Wikimedia