"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > L'IACA aide à optimiser l'analyse des performances du code Intel CPU

L'IACA aide à optimiser l'analyse des performances du code Intel CPU

Publié le 2025-04-29
Parcourir:975

How Does Intel Architecture Code Analyzer (IACA) Help Analyze and Optimize Code Performance for Intel CPUs?

Connu sous le nom de l'analyseur de code d'architecture Intel, IACA est un outil avancé pour évaluer la planification de code contre les CPU Intel. Il fonctionne en trois modes:

  • mode de débit: iaca Gauges Supput, en supposant que c'est le corps d'une boucle imbriquée. instructions.
  • mode de trace: iaca trace la séquence des instructions à mesure qu'ils progressent à travers les pipelines. en fonction de la version). Langue.
  • c / c:
Incluez l'en-tête IACA nécessaire (iacamarks.h) et placez les marqueurs de début et de fin autour de votre boucle cible:

/ * c ou c usage * / while (cond) { Iaca_start / * Corps de boucle la plus intérieure * / / * ... * / } Iaca_end

    assembly (x86):
  • Insérez les motifs d'octets magiques spécifiés pour désigner manuellement les marqueurs:
  • / * NASM USAGE * / MOV EBX, 111; Démarrer les octets de marqueur DB 0x64, 0x67, 0x90; Démarrer les octets de marqueur .InnermostloopLabel: ; Corps en boucle ; ... JNE .Innermostlooplabel; Branche conditionnelle vers l'arrière en haut de la boucle MOV EBX, 222; Bytes de marqueur final DB 0x64, 0x67, 0x90; End Marker Bytes

Command Line Invocation:

Invoquez iaca de la ligne de commande avec les paramètres appropriés, tels que:

iaca.sh -64 -arch hsw -graphs insndeps.dot foo

Un CPU Haswell, générant un rapport d'analyse et une visualisation Graphviz.

Interprétation de sortie:

/* C or C   Usage */

while(cond){
    IACA_START
    /* Innermost Loop Body */
    /* ... */
}
IACA_END

. L2: vmovaps ymm1, [RDI Rax]; L2 VFMADDD231PS YMM1, YMM2, [RSI RAX]; L2 vMovaps [rdx rax], ymm1; S1 Ajouter Rax, 32; AJOUTER JNE .l2; JMP en insérant des marqueurs autour de ce code et en l'analysant, IACA peut signaler (abrégé):

Rapport d'analyse de débit -------------------------- Débit de bloc: 1,55 cycles débit goulot d'étranglement: frontend, Port2_agu, Port3_agu [Répartition de la pression du port] | Instruction -------------------------- | ----------------- | | vmovaps ymm1, ymmword ptr [rdi rax * 1] | 0,5 cp | | 1,5 CP | VFMADDD231PS YMM1, YMM2, YMMWORD PTR [RSI RAX * 1] | 1,5 CP | vmovaps ymmword ptr [rdx rax * 1], ymm1 | 1 CP | Ajouter Rax, 0x20 | 0 CP | jnz 0xffffffffffffffffc

/* 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

Le mode de débit est limité aux boucles les plus internes, car il ne peut pas déduire des modèles de branchement pour d'autres boucles.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3