performance - 如何通过静态分析比较两个代码之间的性能?
问题描述
我最近在学习llvm。
我有一个 C 代号cal.c
。现在,我在这段代码上应用了两个不同的优化过程,并生成了两个不同的 IR 代码 -cal1.ll
和cal2.ll
.
我如何比较它们之间的性能?
我尝试比较指令数和指令成本,但它们都不是很好的功能。我认为指令数和性能、指令成本和性能之间没有关系。
那么,我如何比较两个 IR 之间的性能呢?
我不需要知道运行时间。我只想知道哪个更快。
解决方案
llvm-mca尝试通过重用 LLVM 编译器的 CPU 管道模型来静态估计汇编代码的性能:
$ llvm-mca -mcpu=skylake foo.s
Iterations: 300
Instructions: 900
Total Cycles: 610
Total uOps: 900
正如其他人所提到的,由于缺乏缓存和分支预测器模型、CPU 管道模型的不精确等,估计会不精确(通常非常不精确)。
推荐阅读
- apache-spark - 如何将具有相同/共享分区的 HDFS 文件块应用于同一数据节点上的不同文件/表
- angular - IonicRouteStrategy 和 RouteReuseStrategy
- node.js - Heroku 部署和流量
- php - 如何使用 ejabberd 一次性向我名册中的所有朋友发送消息或向我名册中的每个人广播消息?
- bigdata - 无法在 Vespa 的 Document 中动态添加 Postion(纬度和经度)类型字段
- json - 使用 Vue JS 从 API 中获取数据时遇到问题
- r - 排列 R 闪亮的侧边栏对象
- xamarin.android - 安装 Microsoft.Azure.Mobile.Client NuGet 包后生成错误
- java - 监控方法统计
- javascript - 在第一次渲染时获取 cookie 返回 undefined with universal-cookie