事件选择器编码表 20 描述了可用的事件选择器编码。根据 mhpmeventX[7:0]中编码的事件类字段,将事件分类为类。可以通过为给定事件类别设置相应的事件掩码位来对一个或多个事件进行编程。事件选择器编码为 0表示“无意义”。任何选定事件发生时,多个事件都会导致计数器递增。
对任何事件类可写的事件掩码位对所有类都是可写的。设置与表 20中定义的事件不对应的事件掩码位对当前实现没有影响。但是,未来的实现可能会在该编码空间中定义新事件,因此不建议将不受支持的值编程到 mhpmevent寄存器中。
Combining Events
直接计算每个事件是常见的用法。此外,可以使用这些事件的组合来计算新的、独特的事件。例如,要确定来自数据存储器子系统的每次加载的平均周期数,可以对一个计数器进行编程以计算“数据高速缓存/DTIM繁忙”,并对另一个计数器进行编程以计算“已退出的整数加载指令”。然后,简单地将“数据高速缓存/DTIM繁忙”周期计数除以“整数加载指令退休”指令计数,结果就是每条指令加载周期的平均周期时间。
了解组合的事件类型很重要;具体来说,事件类型计算发生次数,事件类型计算周期。
计数使能寄存器32位计数器使能寄存器 mcounteren 和 scounteren 控制硬件性能监控计数器在下一个最低特权模式下的可用性。
这些寄存器中的设置仅控制可访问性。读取或写入这些启用寄存器的行为不会影响底层计数器,这些计数器在不可访问时会继续递增。
当 mcounteren 寄存器中的任何位清零时,在 S 模式下执行时尝试读取周期、时间、指令退出或 hpmcounterX寄存器将导致非法指令异常。当这些位中的一个被设置时,在下一个实现的特权模式 S 模式下允许访问相应的寄存器。
在 U 模式下执行时,scounteren 寄存器中的相同位位置类似地控制对这些寄存器的访问。如果允许 S-mode 访问计数器寄存器并且在scounteren 中设置了相应的位,则也允许 U-mode 访问该寄存器。
mcounteren 和 scounteren 是 WARL寄存器。任何位都可能包含硬连线值零,表示在低特权模式下执行时,读取相应计数器将导致非法指令异常。
全部0条评论
快来发表一下你的评论吧 !