在RISC-V Linux中, rdtime或者rdcycle可以用来获取和时间相关的统计量。
rdtime采用的是较低精度的时钟源, 但是这个时钟是以恒定频率工作的,所以可以用来稳定计时。rdcycle相对地,CPU的cycle所对应的时钟可能是动态变化的,但它也是用来精确衡量算力消耗的单位。
假定CPU以恒定频率工作,那么rdtime和rdcycle就是呈固定的线性关系,因此可以由rdtime的结果来推算cycle数。
测试代码
1 | // main.c |
1 | # test.S |
编译
1 | riscv64-unknown-linux-gnu-gcc -march=rv64imafdc -mabi=lp64d -static -o main main.c test.S |
测试
1 | ./main |
经过rdtime统计得到的结果是2706个计数值,那么rdtime的参考频率是多少?
可以通过timebase-frequency的值来确定。
结果分析
1 | xxd /proc/device-tree/cpus/timebase-frequency |
timebase-frequency是以大端形式存放的,实际的值应该是 27000000

如果CPU是固定以1.6GHz工作的,那么就可以计算出实际的cycle数:
1 | >> 2706/27000000*1600000000 |
从测试的结果可以看出,代码中大约执行160000次ld指令,推算得出大约耗时160355 cycle,结果也是比较合理的。