Hauptunterschied – maschinenabhängige vs. maschinenunabhängige Codeoptimierung
Computerprogramme sind Sätze von Anweisungen, die der Hardware gegeben werden, um Aufgaben auszuführen. 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 umzuwandeln. Es durchläuft mehrere Phasen, um den Zielcode zu erstellen. Code-Optimierung ist eine davon. Es gibt zwei Optimierungstechniken wie die maschinenabhängige und die maschinenunabhängige Codeoptimierung. Der Hauptunterschied zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung besteht darin, dass die maschinenabhängige Optimierung auf den Objektcode angewendet wird, während die maschinenunabhängige Codeoptimierung auf den Zwischencode angewendet wird.
Was ist maschinenabhängige Codeoptimierung?
Bei der Umwandlung des Quellcodes in Objektcode oder Zielcode durchläuft der Compiler mehrere Phasen. Zuerst wird der Quellcode an den Lexical-Analysator übergeben, der Token erzeugt. Dann wird die Ausgabe an den Syntaxanalysator gegeben, der untersucht, ob die generierten Token in logischer Reihenfolge sind. Diese Ausgabe wird an den semantischen Analysator gegeben. Angenommen, es gibt einen Code wie p=q + r;
Hier sind p, q ganze Zahlen, aber r ist ein Float. Unter Verwendung des semantischen Analysators wird die Integer-Variable c in eine Fließkommazahl umgewandelt. 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 Codeoptimierer geht. Code-Optimierung ist der Prozess des Eliminierens der unwesentlichen Programmanweisungen, ohne die Bedeutung des eigentlichen Quellcodes zu ändern. Es ist keine obligatorische Optimierung, aber es kann 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. Die Zuweisung einer ausreichenden Menge an Ressourcen kann die Ausführung des Programms in dieser Optimierung verbessern.
Was ist maschinenunabhängige Codeoptimierung?
Wenn der Zwischencode optimiert wird, spricht man von maschinenunabhängiger Codeoptimierung. 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;
}
Nach obigem Code wird bei jeder Iteration immer wieder b=x+2 berechnet. Sobald b berechnet ist, ändert es sich nicht. Diese Linie kann also wie folgt außerhalb der Schleife platziert werden.
b=x+2;
für (j=0; j< 10; j++)
{a[j]=5j;
}
Das nennt man Codebewegung.
Lesen Sie die folgenden Codezeilen.
j=5;
if (j==10) {
a=b+20;
}
Gemäß obigem 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 Eliminierung von totem Code.
Eine andere Methode ist die Kraftreduktion. Arithmetische Operationen wie die Multiplikation benötigen mehr Speicher, Zeit und CPU-Zyklen. Diese teuren Ausdrücke können durch billige Ausdrücke wie b=a2 ersetzt werden; oder kann durch Addition ersetzt werden, b=a + a;
Beziehen Sie sich auf den folgenden Code.
for (j=1; j <=5; j ++) {
Wert=j5;
}
Anstelle der Multiplikation kann der Code wie folgt geändert werden.
int temp=5;
für (j=1; j<=5; j++) {
temp=temp + 5;
value=temp;
}
Es ist möglich, die Ausdrücke, die zur Laufzeit Konstanten sind, auszuwerten. Dies wird als konstante F altung bezeichnet. 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];
Wie folgt kann es Schleifen geben.
für (j=0; j<5; j++) {
printf(“a\n”);
}
for (j=0; j <5; j++) {
printf(“b\n”);
}
Drucken von a und b, beide haben die gleiche Anzahl von Iterationen. Beide können wie folgt zu einer for-Schleife kombiniert werden.
for (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. Siehe den folgenden Code.
a=bc + k;
d=b c + m;
Dieser Code kann wie folgt umgewandelt werden.
temp=bc;
a=temp + k;
d=temp + m;
Es ist nicht erforderlich, bc immer wieder neu 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?
Maschinenabhängige vs. maschinenunabhängige Codeoptimierung |
|
Maschinenabhängige Codeoptimierung wird auf Objektcode angewendet. | Maschinenunabhängige Codeoptimierung wird auf Zwischencode angewendet. |
Beteiligung an Hardware | |
Maschinenabhängige Optimierung beinh altet CPU-Register und absolute Speicherreferenzen. | Maschinenunabhängige Codeoptimierung beinh altet keine CPU-Register oder absolute Speicherreferenzen. |
Zusammenfassung – Maschinenabhängige vs. maschinenunabhängige Codeoptimierung
Code-Optimierung besteht aus zwei Optimierungstechniken, nämlich der maschinenabhängigen und der maschinenunabhängigen Code-Optimierung. 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äß Zitationshinweis für Offline-Zwecke verwenden. Bitte laden Sie die PDF-Version hier herunter. Unterschied zwischen maschinenabhängiger und maschinenunabhängiger Codeoptimierung