Objektcode-Optimierer - Object code optimizer
Ein Objektcode-Optimierer , manchmal auch als Post-Pass-Optimierer oder für kleine Codeabschnitte als Guckloch-Optimierer bekannt , nimmt die Ausgabe eines Quellsprachenkompilierungsschritts – den Objektcode oder die Binärdatei – und versucht, identifizierbare Abschnitte des Codes zu ersetzen mit algorithmisch effizienterem Ersatzcode (normalerweise verbesserte Geschwindigkeit).
Beispiele
- " IBM Automatic Binary Optimizer for z/OS" (ABO) wurde 2015 als Spitzentechnologie eingeführt, um die Leistung von COBOL- Anwendungen auf IBM Z- Mainframes zu optimieren, ohne dass der Quellcode neu kompiliert werden muss. Es verwendet fortschrittliche Optimierungstechnologie, die mit dem neuesten Enterprise COBOL ausgeliefert wird. ABO optimiert kompilierte Binärdateien, ohne die Programmlogik zu beeinträchtigen. Dadurch wird die Anwendung schneller ausgeführt, das Verhalten bleibt jedoch unverändert, sodass der Testaufwand reduziert werden kann. Clients kompilieren normalerweise nicht 100 Prozent ihres Codes, wenn sie auf neue Compiler- oder IBM Z-Hardwareversionen aktualisieren, sodass Code, der nicht neu kompiliert wurde, die Funktionen der neuen IBM Z-Hardware nicht nutzen kann. Mit ABO haben Kunden jetzt eine weitere Möglichkeit, die CPU- Auslastung und die Betriebskosten ihrer geschäftskritischen COBOL-Anwendungen zu senken . Sie können ABO mit einem verbesserten, benutzerfreundlichen ABO Trial Cloud Service ausprobieren, ohne ABO auf Ihrem System zu installieren.
- Der früheste "COBOL Optimizer" wurde Mitte der 1970er Jahre von der Capex Corporation für COBOL entwickelt . Dieser Optimierertyp hing in diesem Fall von der Kenntnis der "Schwächen" des Standard-IBM-COBOL-Compilers ab und ersetzte (oder korrigierte ) Abschnitte des Objektcodes tatsächlich durch effizienteren Code. Der Ersetzungscode kann beispielsweise eine lineare Tabellensuche durch eine binäre Suche ersetzen oder manchmal einfach einen relativ langsamen Befehl durch einen bekannten schnelleren ersetzen, der ansonsten in seinem Kontext funktionell äquivalent war. Diese Technik wird heute als Festigkeitsreduzierung bezeichnet . Auf der IBM/360- Hardware war die
CLIAnweisung beispielsweise je nach Modell zwischen doppelt und fünfmal so schnell wie eineCLCAnweisung für Einzelbyte-Vergleiche.
Vorteile
Der Hauptvorteil der Neuoptimierung bestehender Programme bestand darin, dass der Bestand an bereits kompilierten Kundenprogrammen ( Objektcode ) mit minimalem Aufwand fast sofort verbessert werden konnte, wodurch die CPU- Ressourcen zu festen Kosten (dem Preis der proprietären Software ) reduziert werden . Ein Nachteil war, dass beispielsweise neue Releases von COBOL eine (kostenpflichtige) Wartung des Optimierers erfordern würden, um möglicherweise geänderte interne COBOL-Algorithmen zu berücksichtigen. Da jedoch neue Versionen von COBOL-Compilern häufig mit Hardware- Upgrades zusammenfielen , würde die schnellere Hardware normalerweise die Rückkehr der Anwendungsprogramme auf ihre voroptimierten Versionen mehr als kompensieren (bis ein unterstützender Optimierer veröffentlicht wurde).
Andere Optimierer
Einige Binäroptimierer führen eine ausführbare Komprimierung durch , die die Größe von Binärdateien mithilfe von generischen Datenkomprimierungstechniken reduziert, wodurch der Speicherbedarf sowie die Übertragungs- und Ladezeiten reduziert werden, die Laufzeitleistung jedoch nicht verbessert wird. Eine tatsächliche Konsolidierung von doppelten Bibliotheksmodulen würde auch den Speicherbedarf reduzieren.
Einige binäre Optimierer verwenden Laufzeitmetriken ( Profiling ), um die Leistung introspektiv mit Techniken zu verbessern, die JIT- Compilern ähnlich sind .
Kürzliche Entwicklungen
In jüngerer Zeit entwickelte „binäre Optimierer“ für verschiedene Plattformen, von denen einige eine Neuheit beanspruchen, aber dennoch im Wesentlichen die gleichen (oder ähnlichen) Techniken wie oben beschrieben verwenden, umfassen:
- IBM Automatic Binary Optimizer für z/OS (ABO) (2015)
- IBM Automatic Binary Optimizer for z/OS (ABO)Trial Cloud Service (2020)
- Die Sun Studio Binärcode Optimizer - die eine erfordert Profil vorher Phase
- Entwurf und Entwicklung eines dynamischen binären Optimierers - von IBM TJ Watson Res. Zentrum (Februar 2005)
- QuaC: Binary Optimization for Fast Runtime Code Generation in C - (die einige Elemente von JIT zu enthalten scheint)
- DynamoRIO
- COBRA: Ein adaptives Laufzeit-Binäroptimierungs-Framework für Multithread-Anwendungen
- Ausführbarer Spike-Optimierer (Unix-Kernel)
- "SOLAR" Softwareoptimierung zur Link- und Laufzeit
- Dynamisieren: CPU-Performance-Virtualisierung
- BOLT: Post-Link-Optimierer, der auf dem LLVM- Framework basiert . Durch die Verwendung von stichprobenbasiertem Profiling verbessert BOLT die Leistung von realen Anwendungen selbst für hochoptimierte Binärdateien, die sowohl mit Feedback Directed Optimization als auch mit Link-Time-Optimierung erstellt wurden . Für GCC- und Clang- Compiler beschleunigt BOLT ihre Binärdateien um bis zu 20,4 % zusätzlich zu FDO und LTO und bis zu 52,1 %, wenn die Binärdateien ohne FDO und LTO erstellt werden.