Maison >développement back-end >C++ >Comment l'IACA peut-elle aider à optimiser la planification des instructions pour les processeurs Intel ?
Intel Architecture Code Analyzer (IACA) est un outil d'analyse statique désormais abandonné, conçu pour optimiser l'enseignement planification sur les processeurs Intel. Il analyse les binaires compilés avec des marqueurs injectés, permettant ainsi d'obtenir un aperçu des modèles d'exécution du code et de l'utilisation des ressources.
C/C :
#include "iacaMarks.h" while (cond) { IACA_START // Loop body IACA_END }
Assemblage (x86) :
mov ebx, 111 ; Start marker bytes db 0x64, 0x67, 0x90 ; Start marker bytes .innermostlooplabel: // Loop body jne .innermostlooplabel ; Conditional branch backwards to top of loop mov ebx, 222 ; End marker bytes db 0x64, 0x67, 0x90 ; End marker bytes
Exécutez IACA avec la commande suivante :
iaca.sh -<bitness> -arch <architecture> -graph <output file> <binary>
Exemple :
iaca.sh -64 -arch HSW -graph insndeps.dot foo
IACA génère deux types de sortie :
Analyse du débit Rapport :
Graphique de dépendance Graphviz :
Exemple d'assemblage :
.L2: vmovaps ymm1, [rdi+rax] ;L2 vfmadd231ps ymm1, ymm2, [rsi+rax] ;L2 vmovaps [rdx+rax], ymm1 ; S1 add rax, 32 ; ADD jne .L2 ; JMP
Sortie (partie) :
Intel(R) Architecture Code Analyzer Version - 2.1 ... Throughput Analysis Report -------------------------- Block Throughput: 1.55 Cycles Throughput Bottleneck: FrontEnd, PORT2_AGU, PORT3_AGU
Le rapport identifie le goulot d'étranglement comme étant le frontend et deux AGU sur l'architecture Haswell.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!