Hauptunterschied - Maschinenabhängige und maschinenunabhängige Codeoptimierung
Computerprogramme sind Anweisungen, die der Hardware zur Ausführung von Aufgaben gegeben werden. Diese Programme sind meist in Hochsprachen geschrieben, und der Computer versteht diese Sprache nicht. Daher wird ein Compiler verwendet, um diese Anweisungen in Maschinencode oder Zielcode zu konvertieren. Das Erstellen des Zielcodes durchläuft mehrere Phasen. Codeoptimierung ist eine davon. Es gibt zwei Optimierungstechniken wie maschinenabhängige und maschinenunabhängige Codeoptimierung. Der Hauptunterschied 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 den Zwischencode angewendet wird.
INHALT
1. Überblick und Hauptunterschied
2. Was ist maschinenabhängige Codeoptimierung
? 3. Was ist maschinenunabhängige Codeoptimierung ?
4. Ähnlichkeiten zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung.
5. Vergleich nebeneinander - maschinenabhängige und maschinenunabhängige Codeoptimierung in Tabellenform
6. Zusammenfassung
Was ist maschinenabhängige Codeoptimierung?
Beim Konvertieren des Quellcodes in Objektcode oder Zielcode durchläuft der Compiler mehrere Phasen. Zunächst wird der Quellcode an den Lexical Analyzer übergeben, der Token erzeugt. Die Ausgabe wird dann an den Syntaxanalysator übergeben, der untersucht, ob die generierten Token in logischer Reihenfolge sind. Diese Ausgabe wird an den 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 Intermediate Code Generator. Es gibt einen Zwischencode zurück, der dann zum Code-Optimierer geht. Bei der Codeoptimierung werden die nicht wesentlichen Programmanweisungen entfernt, ohne die Bedeutung des tatsächlichen Quellcodes zu ändern. Es ist keine obligatorische 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 die Optimierung auf den Quellcode angewendet. Das Zuweisen einer ausreichenden Menge an Ressourcen kann die Ausführung des Programms bei dieser Optimierung verbessern.
Was ist maschinenunabhängige Codeoptimierung?
Wenn die Optimierung des Zwischencodes durchgeführt wird, 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 b = x + 2 in jeder Iteration immer wieder berechnet. Sobald b berechnet ist, ändert es sich nicht mehr. 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;
if (j == 10) {
a = b + 20;
}}
Gemäß dem obigen Code wird 'if block' niemals ausgeführt, da der j-Wert niemals gleich 10 sein wird. Er ist bereits auf den Wert 5 initialisiert. Daher kann dieser if-Block entfernt werden. Diese Technik ist die Beseitigung von totem Code.
Eine andere Methode ist die Festigkeitsreduzierung. 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 folgenden Code.
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 Ausdrücke auszuwerten, die zur Laufzeit Konstanten sind. Es heißt ständiges Falten. 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 kann Schleifen wie folgt geben.
für (j = 0; j <5; j ++) {
printf ("a / n");
}}
für (j = 0; j <5; j ++) {
printf ("b / n");
}}
Beim Drucken von a und b 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 weitere wichtige Technik ist die Eliminierung gemeinsamer Unterausdrücke. Es besteht darin, die identischen Ausdrücke durch eine einzelne Variable zu ersetzen, um die Berechnung durchzuführen. Lesen Sie den folgenden 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 wiederverwendet werden.
Was ist die Ähnlichkeit zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung?
Beide gehören zur Codeoptimierung
Was ist der Unterschied zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung?
Diff Artikel Mitte vor Tabelle
Maschinenabhängige vs maschinenunabhängige Codeoptimierung |
|
Die maschinenabhängige Codeoptimierung wird auf den Objektcode angewendet. | Die maschinenunabhängige Codeoptimierung wird auf Zwischencode angewendet. |
Beteiligung an Hardware | |
Die maschinenabhängige Optimierung umfasst CPU-Register und absolute Speicherreferenzen. | Die maschinenunabhängige Codeoptimierung umfasst keine CPU-Register oder absoluten Speicherreferenzen. |
Zusammenfassung - Maschinenabhängige und maschinenunabhängige Codeoptimierung
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 vs Machine Independent Code Optimization herunter
Sie können die PDF-Version dieses Artikels herunterladen und gemäß Zitierhinweis für Offline-Zwecke verwenden. Bitte laden Sie die PDF-Version hier herunter. Unterschied zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung