Optimiseur de code objet - Object code optimizer
Un optimiseur de code objet , parfois également appelé optimiseur de post-passage ou, pour de petites sections de code, optimiseur de trou , prend la sortie d'une étape de compilation du langage source - le code objet ou le fichier binaire - et essaie de remplacer les sections identifiables du code avec un code de remplacement plus efficace sur le plan algorithmique (vitesse généralement améliorée).
Exemples
- " IBM Automatic Binary Optimizer for z/OS" (ABO) a été introduit en 2015 en tant que technologie de pointe conçue pour optimiser les performances des applications COBOL sur les mainframes IBM Z sans avoir besoin de recompiler la source. Il utilise une technologie d'optimisation avancée intégrée au dernier COBOL d'entreprise. ABO optimise les binaires compilés sans affecter la logique du programme. En conséquence, l'application s'exécute plus rapidement mais le comportement reste inchangé, ce qui réduit les efforts de test. Normalement, les clients ne recompilent pas 100 % de leur code lorsqu'ils effectuent une mise à niveau vers un nouveau compilateur ou des niveaux matériels IBM Z, de sorte que le code qui n'est pas recompilé ne pourra pas tirer parti des fonctionnalités du nouveau matériel IBM Z. Désormais, avec ABO, les clients disposent d'une option supplémentaire pour réduire l' utilisation du processeur et les coûts d'exploitation de leurs applications COBOL stratégiques. Vous pouvez essayer ABO avec un service cloud d'essai ABO amélioré et facile à utiliser sans installer ABO sur votre système.
- Le premier "COBOL Optimizer" a été développé par Capex Corporation au milieu des années 1970 pour COBOL . Ce type d'optimiseur dépendait, dans ce cas, de la connaissance des "faiblesses" du compilateur IBM COBOL standard et remplaçait (ou corrigeait ) les sections du code objet par un code plus efficace. Le code de remplacement peut remplacer une recherche de table linéaire par une recherche binaire par exemple ou parfois simplement remplacer une instruction relativement lente par une instruction plus rapide connue qui était par ailleurs fonctionnellement équivalente dans son contexte. Cette technique est maintenant connue sous le nom de réduction de force . Par exemple, sur le matériel IBM/360 , l'
CLIinstruction était, selon le modèle particulier, entre deux et cinq fois plus rapide qu'uneCLCinstruction pour les comparaisons d'un seul octet.
Avantages
Le principal avantage de la réoptimisation des programmes existants était que le stock de programmes clients déjà compilés ( code objet ) pouvait être amélioré presque instantanément avec un minimum d'effort, réduisant les ressources CPU à un coût fixe (le prix du logiciel propriétaire ). Un inconvénient était que les nouvelles versions de COBOL, par exemple, nécessiteraient une maintenance (facturée) de l'optimiseur pour prendre en charge les algorithmes COBOL internes éventuellement modifiés. Cependant, étant donné que les nouvelles versions des compilateurs COBOL coïncidaient fréquemment avec les mises à niveau matérielles , le matériel plus rapide ferait généralement plus que compenser le retour des programmes d'application à leurs versions pré-optimisées (jusqu'à ce qu'un optimiseur de prise en charge soit publié).
Autres optimiseurs
Certains optimiseurs binaires effectuent une compression exécutable , ce qui réduit la taille des fichiers binaires à l'aide de techniques de compression de données génériques , réduisant ainsi les exigences de stockage et les temps de transfert et de chargement, mais n'améliorant pas les performances d'exécution. La consolidation réelle des modules de bibliothèque en double réduirait également les besoins en mémoire.
Certains optimiseurs binaires utilisent des métriques d' exécution ( profilage ) pour améliorer de manière introspective les performances à l'aide de techniques similaires aux compilateurs JIT .
DEVELOPPEMENTS récents
Des "optimiseurs binaires" plus récemment développés pour diverses plates-formes, certains revendiquant la nouveauté mais, néanmoins, utilisant essentiellement les mêmes (ou similaires) techniques décrites ci-dessus, comprennent :
- IBM Automatic Binary Optimizer pour z/OS (ABO) (2015)
- IBM Automatic Binary Optimizer for z/OS (ABO) Trial Cloud Service (2020)
- L'optimiseur de code binaire Sun Studio - qui nécessite une phase de profilage au préalable
- Conception et ingénierie d'un optimiseur binaire dynamique - d' IBM TJ Watson Res. Centre (février 2005)
- QuaC : Optimisation binaire pour la génération de code d'exécution rapide en C - (qui semble inclure certains éléments de JIT)
- DynamoRIO
- COBRA : un cadre d'optimisation binaire d'exécution adaptatif pour les applications multithread
- Optimiseur d'exécutable Spike (noyau Unix)
- Optimisation du logiciel "SOLAR" au moment de la liaison et de l'exécution
- Dynamize : virtualisation des performances du processeur
- BOLT : optimiseur de post-lien basé sur le framework LLVM . En utilisant un profilage basé sur des échantillons, BOLT améliore les performances des applications du monde réel, même pour les binaires hautement optimisés construits à la fois avec l' optimisation dirigée par la rétroaction et l' optimisation du temps de liaison . Pour les compilateurs GCC et Clang , BOLT accélère leurs binaires jusqu'à 20,4% en plus de FDO et LTO, et jusqu'à 52,1% si les binaires sont construits sans FDO et LTO.