conocido como el analizador de código de arquitectura Intel, IACA es una herramienta avanzada para evaluar la programación de código contra las CPU de Intel. Funciona en tres modos:
para la programación de intel modernas (ranging de nehalem a Broadwell, dependiendo de la versión). cuadros detallados ASCII o GraphViz interactivos.
Incluya el encabezado IACA necesario (iacamarks.h) y coloque los marcadores de inicio y finalización alrededor de su bucle de destino:
/ * c o c use */ while (cond) { IACA_Start / * Cuerpo de bucle más interno */ / * ... */ } IACA_END
Assembly (x86):
Inserte los patrones de byte mágicos especificados para designar marcadores manualmente:
/* C or C Usage */ while(cond){ IACA_START /* Innermost Loop Body */ /* ... */ } IACA_END
Invocation de comandos:
Invoke IACA de la línea de comando con los parámetros apropiados, como:
/* 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 bytesesto A Haswell CPU, generando un informe de análisis y una visualización de GraphViz.
Interpretación de salida:
El informe de salida proporciona información detallada sobre la programación y los cuellos de botella del código de destino. Por ejemplo, considere el siguiente fragmento de ensamblaje:
iaca.sh -64 -arch HSW -graph insndeps.dot foo. L2: vmovaps ymm1, [rdi rax]; l2 VFMADD231PS YMM1, YMM2, [RSI RAX]; L2 vmovaps [rdx rax], ymm1; S1 Agregar RAX, 32; AGREGAR JNE .l2; Jmp
insertando marcadores alrededor de este código y analizándolo, IACA puede informar (abreviado):
Informe de análisis de rendimiento -------------------------- Bloqueo de rendimiento: 1.55 ciclos de cuello de botella de rendimiento: frontend, Port2_agu, Port3_agu [Desglose de la presión del puerto] | Instrucción -------------------------- | ----------------- | | 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 | Agregar rax, 0x20 | 0 CP | jnz 0xfffffffffffffec
Desde esta salida, IACA identifica el frontend de Haswell y el AGU del puerto 2 y 3 como cuellos de botella. Sugiere que la optimización de la instrucción del almacén que se procesará mediante el puerto 7 podría mejorar el rendimiento.
.L2: vmovaps ymm1, [rdi rax] ;L2 vfmadd231ps ymm1, ymm2, [rsi rax] ;L2 vmovaps [rdx rax], ymm1 ; S1 add rax, 32 ; ADD jne .L2 ; JMP
IACA tiene algunas limitaciones:
iaca.sh -64 -arch HSW -graph insndeps.dot foo
que no admite ciertas instrucciones, que están ignoradas en el análisis. excluyendo modelos más antiguos.
El modo de rendimiento está restringido a bucles más interiores, ya que no puede inferir patrones de ramificación para otros bucles.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3