uiCA模拟器和bHive benchmark的使用

概念

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的数值对比。批量化的话,那就是写点脚本就好了。

 

 

 

相关推荐

  1. strstr 使用模拟实现

    2024-03-14 07:16:07       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 07:16:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 07:16:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 07:16:07       87 阅读
  4. Python语言-面向对象

    2024-03-14 07:16:07       96 阅读

热门阅读

  1. Element-UI穿梭框去掉左箭头按钮

    2024-03-14 07:16:07       34 阅读
  2. 信号和槽1

    2024-03-14 07:16:07       38 阅读
  3. sql server 生成本月日期的临时表

    2024-03-14 07:16:07       43 阅读
  4. RocketMQ的两种消费模式

    2024-03-14 07:16:07       37 阅读
  5. 逻辑回归吧

    2024-03-14 07:16:07       40 阅读
  6. 使用链表的优先级队列

    2024-03-14 07:16:07       41 阅读
  7. qt+ffmpeg 实现音视频播放(一)

    2024-03-14 07:16:07       38 阅读
  8. Qt如何保证控件调用时候的线程安全

    2024-03-14 07:16:07       40 阅读
  9. 22.5 RabbitMQ

    2024-03-14 07:16:07       36 阅读