RISC-V技术论坛
直播中

王萍

8年用户 1376经验值
私信 关注
[经验]

计算程序执行指令数的函数实现

探究过程
1、官方提供的计算周期数指令数方法为,采用如下这几个函数在所要计算的操作前后获取一次当前指令数和周期数。并求他们的差值,以此得到结果。


2、首先找到这几个函数原型在hbird-sdk/NMSIS/Core/Include/core_feature_base.h头文件中,以__get_rv_instret为例


其中主要调用了__RV_CSR_READ函数
3、追踪发现__RV_CSR_READ是一个宏定义,采用内联汇编使用csrr指令

也可查看反汇编代码:

4、查手册可知,csrr指令是用来读CSR寄存器的值

5、而minstreth和minstret寄存器介绍如下(来源:手把手教你设计cpu_RISC-V处理器),他们分别存储了指令计数器的高低32位

至此就大致能理解指令数计算函数的实现原理,即通过csrr指令读minstreth和minstret寄存器得到执行操作前后的指令计数值,再取其差值即可得到该操作耗费的指令数。周期数计算同理。

更多回帖

发帖
×
20
完善资料,
赚取积分