RISC-V MCU中文社区

【分享】 跑分程序Dhrystone

发表于 开源蜂鸟E203 2023-05-07 15:52:07
0
2215
0

1 队伍介绍

报名编号:CICC1907
团队名称:Hollow-SEKIRO-ARCAEA
这是我们发的第一篇分享文章。

2 跑分程序Dhrystone

跑分程序(Benchmarks) 是一组标准的软件程序,处理器运行该标准程序,并通过运行速度计算出一组分数,作为衡 量处理器性能的指标。跑分程序通常由标准的高级语言(譬如 C/C++语言)编写,与底层硬件平台特性和指令集架构无关。各个不同架构或者不同厂商的处理器均可以运行相同的跑分 程序,并可以根据运行所得的分数来比较和衡量性能。
Dhrystone是一个用来测试处理器的整数运算和逻辑运算性能的基准程序。Dhrystone 的跑分结果使用更加有意义的 Dhrystone Per Second 作为衡量标准,表示处理器每秒能够执行的 Dhrystone 主循环的次数。DMIPS够反映处理器从架构、编译器到硬件的综合性能。For 循环内部调用各种编写的子函数,这些子函数是 Dhrystone 开发者刻意构造的具有代表性的程序代码。
在 For 主循环的开始和结束部分均通过计时器(Timer)读取出当前的时间值,代码在主循环后,最后通过开始和结束时间的差值得出运行特定循环次数的总执行时间。总执行时间取决于如下两个方面的效率。指令集架构的效率和编译器的优劣决定了高层语言编写的 Dhrystone 程序能够编译成多少汇编指令。 处理器的硬件性能决定了处理器能以多快的速度执行完这些指令。
循环如下(dhry1 r156):整个主循环的次数自定义(默认500000次)
图片alt
每次循环:(嵌套的循环只有一层)
运行一次
Proc_5();
Proc_4();
赋值2
函数strcpy
赋值
函数,赋值
执行while循环(只进行一次)
{计算,赋值
函数Proc_7
计算,赋值}
函数Proc_8
函数Proc_1
执行for循环(两次) 但循环内的两次if都判错不执行
{If(实际上不执行)
{函数Proc_6
函数strcpy
赋值
赋值}}
(计算,赋值)3
函数Proc_2
循环调用的各函数为自定义函数Proc_1,2,3,4,5,6,8各一次 ,7三次 (有的函数没在循环中直接执行,在其他函数中调用)
其中只含有整数运算,无浮点数运算
(简单加法指无累加)
Proc1:用指针提取结构体中变量的值并赋值(多次),执行一次proc3,进行一次判断后执行6,7
Proc2:有3次计算
Proc3:判断一次,执行一次proc7,实现一次赋值
Proc4:一次判断,一次按位或运算,三次赋值
Proc5:两次赋值
Proc6:判断不执行,一次赋值
Proc7:从结构体中调用三次参数,进行两次简单加法运算并赋值
Proc8:5次简单加法,给两个二维数组中特定位置的元素赋值6次,两个整型变量赋值两次
测得性能如下:
图片alt

3 总结

本文介绍的内容是为了完成基础功能:对蜂鸟E203 RISC-V内核的微架构实现进行一定优化,并通过Benchmark基准测试(Dhrystone、CoreMark、Whetstone)来进行系统性能测试,对Dhrystone进行解读,寻找优化方向。

喜欢0
用户评论
Lri-SKY

Lri-SKY 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板