Maison >développement back-end >C++ >Comment Intel Architecture Code Analyzer (IACA) aide-t-il à analyser et à optimiser les performances du code pour les processeurs Intel ?
Connu sous le nom d'analyseur de code d'architecture Intel, IACA est un outil avancé pour évaluer la planification de code par rapport aux processeurs Intel. Il fonctionne selon trois modes :
Capacités et applications :
Utilisation :
Les instructions d'utilisation de l'IACA varient en fonction de votre programmation langue.
C/C :
Incluez l'en-tête IACA nécessaire (iacaMarks.h) et placez des marqueurs de début et de fin autour de votre boucle cible :
/* C or C++ Usage */ while(cond){ IACA_START /* Innermost Loop Body */ /* ... */ } IACA_END
Assemblage (x86) :
Insérer la magie spécifiée modèles d'octets pour désigner manuellement les marqueurs :
/* NASM Usage */ 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
Invocation de ligne de commande :
Invoquez IACA à partir de la ligne de commande avec les paramètres appropriés, tels que :
iaca.sh -64 -arch HSW -graph insndeps.dot foo
Cela analysera le foo binaire 64 bits sur un processeur Haswell, générant un rapport d'analyse et un Graphviz visualisation.
Interprétation de la sortie :
Le rapport de sortie fournit des informations détaillées sur la planification et les goulots d'étranglement du code cible. Par exemple, considérons l'extrait d'assembly suivant :
.L2: vmovaps ymm1, [rdi+rax] ;L2 vfmadd231ps ymm1, ymm2, [rsi+rax] ;L2 vmovaps [rdx+rax], ymm1 ; S1 add rax, 32 ; ADD jne .L2 ; JMP
En insérant des marqueurs autour de ce code et en l'analysant, l'IACA peut rapporter (abrégé) :
Throughput Analysis Report -------------------------- Block Throughput: 1.55 Cycles Throughput Bottleneck: FrontEnd, PORT2_AGU, PORT3_AGU [Port Pressure Breakdown] | Instruction --------------------------|----------------- | | vmovaps ymm1, ymmword ptr [rdi+rax*1] | 0.5 CP | | 1.5 CP | vfmadd231ps ymm1, ymm2, ymmword ptr [rsi+rax*1] | 1.5 CP | vmovaps ymmword ptr [rdx+rax*1], ymm1 | 1 CP | add rax, 0x20 | 0 CP | jnz 0xffffffffffffffec
À partir de ce résultat, l'IACA identifie l'interface Haswell et l'AGU des ports 2 et 3 comme goulots d'étranglement. Cela suggère que l'optimisation des instructions de magasin à traiter par le port 7 pourrait améliorer les performances.
Limitations :
IACA a certaines limites :
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!