我一直在尝试使用 AMD Opteron 6172 处理器上的性能计数器分析某些应用程序(用 C 编写),运行 Red Hat Enterprise Linux Workstation 版本 6.2(圣地亚哥)。
我正在使用 PAPI v4.1.3.0,它将 AMD 本机事件 CPU_CLK_UNHALTED 用于 PAPI_TOT_CYC(计算总周期)和 DATA_CACHE_ACCESSES 用于 PAPI_L1_DCA(计算 L1 数据缓存访问)。
我遇到的问题是,在某些情况下,缓存访问次数高于总周期数。据我了解,缓存访问不会停止 CPU,因此它应该适合总周期。此外,当将总周期除以 Opteron 6172 的时钟频率时,我得到了对执行时间的非常准确的估计,这让我认为总周期还可以,问题必须与数据缓存访问的计数有关。
我已经根据 papi 示例启动了所有内容,并且没有收到任何错误。非常感谢任何帮助或解释为什么会发生这种情况的原因,在此先感谢。
http://support.amd.com/us/Processor_TechDocs/31116.pdf
- CPU_CLK_UNHALTED
CPU 未处于暂停状态的时钟数(由于 STPCLK 或 HLT 指令)。注意:此事件允许系统空闲时间从 IPC(或 CPI)测量中自动排除,前提是操作系统在空闲时暂停 CPU。如果操作系统进入空闲循环而不是停止,则此类计算会受到空闲循环的 IPC 的影响。
- DATA_CACHE_ACCESSES
为加载和存储引用访问数据缓存的次数。这可能包括某些微码暂存器访问,尽管这些通常很少见。每个增量代表一个八字节的访问,尽管指令可能只访问其中的一部分。本次事件为投机事件。