首页 >后端开发 >C++ >英特尔架构代码分析器 (IACA) 如何帮助分析和优化英特尔 CPU 的代码性能?

英特尔架构代码分析器 (IACA) 如何帮助分析和优化英特尔 CPU 的代码性能?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-13 15:17:14444浏览

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

IACA 被称为英特尔架构代码分析器,是一种针对英特尔 CPU 评估代码调度的高级工具。它以三种模式运行:

  • 吞吐量模式: IACA 测量最大吞吐量,假设它是嵌套循环的主体。
  • 延迟模式: IACA 确定了从初始到最终的最小延迟指令。
  • 跟踪模式: IACA 跟踪指令通过管道的顺序。

功能和应用:

  • 现代 Intel CPU 的估计调度(范围从 Nehalem 到Broadwell,取决于版本)。
  • 以详细的 ASCII 或交互式 Graphviz 图表形式报告。
  • 支持 C、C 和 x86 汇编分析。

使用方法:

IACA 使用说明取决于您的编程语言。

C/C :

包含必要的 IACA 标头 (iacaMarks.h) 并在目标循环周围放置开始和结束标记:

/* C or C++ Usage */

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

组装(x86):

插入指定的魔术字节模式以手动指定标记:

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

命令行调用:

使用适当的参数从命令行调用 IACA,例如as:

iaca.sh -64 -arch HSW -graph insndeps.dot foo

这将分析 Haswell CPU 上的 64 位二进制 foo,生成分析报告和 Graphviz 可视化。

输出解释:

输出报告提供了有关目标代码的调度和瓶颈的详细信息。例如,考虑以下汇编代码片段:

.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 可能会报告(删节):

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

从此输出中,IACA 识别出Haswell 前端以及端口 2 和端口 3 的 AGU 是瓶颈。这表明优化端口 7 处理的存储指令可以提高性能。

限制:

IACA 有一些限制:

  • 它不支持某些指令,这些指令在分析中会被忽略。
  • 它与 Nehalem 的 CPU 兼容向前,不包括旧模型。
  • 吞吐量模式仅限于最内层循环,因为它无法推断其他循环的分支模式。

以上是英特尔架构代码分析器 (IACA) 如何帮助分析和优化英特尔 CPU 的代码性能?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn