IACA 被称为英特尔架构代码分析器,是一种针对英特尔 CPU 评估代码调度的高级工具。它以三种模式运行:
功能和应用:
使用方法:
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 有一些限制:
以上是英特尔架构代码分析器 (IACA) 如何帮助分析和优化英特尔 CPU 的代码性能?的详细内容。更多信息请关注PHP中文网其他相关文章!