概念
uiCA 基本块吞吐量预测器
github地址:GitHub - andreas-abel/uiCA: uops.info Code Analyzer
uiCA是一个模拟器,可以预测基本块在最新的英特尔微体系结构上的吞吐量。除此之外,它还提供了代码执行的洞察。
uiCA基于来自uops.info的数据,结合了详细的流水线模型。与相关工具类似,它假设所有内存访问都会导致缓存命中。
关于uiCA的流水线模型的详细信息,以及与类似工具的比较,可以在论文《uiCA: Accurate Throughput Prediction of Basic Blocks on Recent Intel Microarchitectures》中找到。
bHive benchmark
github 地址:GitHub - ithemal/bhive
BHive Benchmark 是一个基准测试套件和测量框架,旨在验证 x86-64 平台上的基本块性能模型。该基准测试套件通过执行一系列基本块级别的测试来评估处理器的性能和行为。这些基本块通常是指程序中相对较小且不包含分支跳转的代码块,对于评估处理器的基本执行能力非常有用。
BHive Benchmark 旨在提供一个统一的平台,使得研究人员和开发人员可以使用相同的测试套件来评估不同处理器的性能,并验证基本块性能模型的准确性。通过使用 BHive Benchmark,用户可以更好地了解处理器在执行基本块时的行为,从而更好地优化和评估代码的性能。
如何使用uiCA模拟器运行bHive benchmark
部署
uiCA按照 readme部署就行,bHive同样
这里仅仅展示一个例子
bHive拿到一个basic block的数据
bhive_path/benchmark/disasm 工具用法:
./bhive_path/benchmark/disasm <basic block十六进制编码>
就会输出basic block十六进制编码 ,对应的汇编代码
比如:
./disasm 488b442450488d78e8
同时,该 十六进制编码对应的吞吐量数据可以在这个目录下找到:
bhive_path/benchmark/throughput
三个文件分别对应haswell架构、ivy bridge、 skylake架构对应的数据。
打开skylake架构的数据(截的windows系统的图) 可以查到该basic block对应的吞吐数据,为0.74秒
通过这样,我们就知道了,特定basic block的信息:
汇编代码为
.text
movq 80(%rsp), %rax
leaq -24(%rax), %rdi
十六进制编码为
488b442450488d78e8
吞吐量为
0.74秒
uiCA预测该basic block的数据
先进入uiCA根目录
vim tests.asm
将得到的汇编代码粘贴进去
.text
movq 80(%rsp), %rax
leaq -24(%rax), %rdi
vim 保存退出
as test2.asm -o test2.o
./uiCA.py test2.o
uica给的预测结果是0.56s,
然后同时,bHive给的数值是0.74s
有点差异也正常,同时我上述操作也有一些细节没有指定好
这样,就完成了一次uiCA模拟和bHive benchmark的数值对比。批量化的话,那就是写点脚本就好了。