首页 > 解决方案 > 如何通过静态分析比较两个代码之间的性能?

问题描述

我最近在学习llvm。

我有一个 C 代号cal.c。现在,我在这段代码上应用了两个不同的优化过程,并生成了两个不同的 IR 代码 -cal1.llcal2.ll.

我如何比较它们之间的性能?

我尝试比较指令数和指令成本,但它们都不是很好的功能。我认为指令数和性能、指令成本和性能之间没有关系。

那么,我如何比较两个 IR 之间的性能呢?

我不需要知道运行时间。我只想知道哪个更快。

标签: performancellvmcompiler-optimization

解决方案


llvm-mca尝试通过重用 LLVM 编译器的 CPU 管道模型来静态估计汇编代码的性能:

$ llvm-mca -mcpu=skylake foo.s
Iterations:        300
Instructions:      900
Total Cycles:      610
Total uOps:        900

正如其他人所提到的,由于缺乏缓存和分支预测器模型、CPU 管道模型的不精确等,估计会不精确(通常非常不精确)。


推荐阅读