srand(__get_rv_cycle() | __get_rv_instret() | __RV_CSR_READ(CSR_MCYCLE));
__get_rv_cycle()
cycle计数器统计自CPU复位以来共运行了多少个周期。
_get_rv_instret
instret计数器统计自CPU复位以来共运行了多少条指令。
区别
cycle统计的是周期数,instret统计的是指令数,有些指令需要多个周期才能完成,例如MUL指令,有些实现需要4个周期,那么执行MUL指令后,cycle增加4,而instret增加1。还有就是内存访问会引起等待周期,内存的等待周期会累计到cycle,但是不影响instret。
__RV_CSR_READ(CSR_MCYCLE)
CSR,即Control and Status Register,控制与状态寄存器, RiscV架构则定义了一些控制和状态寄存器(CSR),用于配置或记录一些运行的状态。CSR寄存器是处理器内核内部的寄存器,使用专有的12位地址编码空间,对一个hart,可以配置4k的CSR寄存器。
mcycle: 计数值的低32位