英特尔酷睿双核上的硬件性能计数器
我个人通过一个执行指令rdtsc的汇编包装使用时间戳计数器。然后我得到一个无符号的64位整数,它包含处理器启动后已经过的内部时钟周期数。两次读取之间的差异是执行中间代码所需的代码周期数。访问缓存命中读取的指令可以用相同的方式实现。
我发现很难理解什么结论可以从阅读缓存计数器中得出,而没有时间框架关联。此时间范围不应太长,否则任务切换或中断可能会影响该值。
根据微软的说法,如果在处理器上启用降低节流功能(以降低能耗),那么应该记住(或关闭!),rdtsc指令可能不准确。
是的,自从古代Pentium Pro以来,有很多硬件性能计数器。
Oprofile和perf
在Linux中,Linux/Windows中的Vtune,MacOSX中的Shark都可以使用它们。
所有计数器都英特尔架构文档中列出(音量3B,第30章;列表附录A): http://www.intel.com/products/processor/manuals/
即使原子具有一些性能寄存器。
一个很好的名单不同的CPU在这里http://oprofile.sourceforge.net/docs/
是的,鲨鱼可以使用硬件计数器,看看http://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/SharkUserGuide/AdvancedHardwareCounterConfiguration/AdvancedHardwareCounterConfiguration.html#//apple_ref/doc/uid/TP40005233 -CH10-SW1 – osgx 2010-11-10 04:16:35
如果你在Linux上工作,有一个叫LiMiT哥伦比亚大学正在开发有趣的库,可以快速读取性能计数器,并虚拟化他们避免进程正在启动和停止,处理器之间移动等问题。目前,我正在与开发人员上课,尽管我自己并没有与该项目有任何关系。
这个问题是关于读取性能计数器,而不是时间戳记计数器(反正这些天读出实时,而不是周期)。 – BeeOnRope 2017-10-15 18:07:55