实践

llvm-exegesis 是一个基准测试工具,它利用 LLVM 中可用的信息来衡量主机机器指令的特性,例如延迟、吞吐量或端口分解。给定一个 LLVM 操作码名称和一个基准测试模式,llvm-exegesis 会生成一个代码片段,使其执行尽可能地串行(或并行),以便我们可以测量指令的延迟(或反向吞吐量/uop 分解)。代码片段会被 JIT 编译,并且除非请求不执行,否则会在主机子目标上执行。执行时间(或资源使用情况)会使用硬件性能计数器进行测量。结果会以 YAML 格式输出到标准输出。

场景一:指令基准测试
  • llvm-exegesis --mode=latency --opcode-name=ADD64rr:测量单个指令的延迟
  • llvm-exegesis --mode=latency --opcode-index=-1:测量所有指令的延迟
    场景二:自定义代码片段进行基准测试
  • echo "vzeroupper" | llvm-exegesis --mode=uops --snippets-file=-:测量自定义代码段的延迟/uops
    场景三:使用内存注释进行基准测试
    某些代码片段需要在特定位置设置内存才能在不崩溃的情况下执行。

这一块具体实践可以直接参考官网:https://llvm.net.cn/docs/CommandGuide/llvm-exegesis.html