2

我一直在尝试使用 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

为加载和存储引用访问数据缓存的次数。这可能包括某些微码暂存器访问,尽管这些通常很少见。每个增量代表一个八字节的访问,尽管指令可能只访问其中的一部分。本次事件为投机事件。

4

1 回答 1

1

好的,这是我的猜测:

  1. 如果数据不在缓存中,则缓存访问可能意味着 RAM 内存访问,因此可能会使 CPU 停滞。尝试测量最后一级缓存 (LLC) 未命中,一次 LLC 未命中意味着一次访问 RAM 内存。

  2. 是否有其他程序同时执行?如果有,它们可能会停止处理器或生成您正在测量的缓存未命中。

  3. 我很确定你可以在每个时钟周期发出一个加载和一个存储指令,因此每个时钟周期有 2 次缓存访问并不奇怪......

希望对您有所帮助...

于 2012-08-02T21:50:25.817 回答