我已经读到有 AMD 处理器可以让您测量缓存命中和未命中的数量。我想知道英特尔酷睿双核机器上是否也有这样的功能,或者他们是否还不支持。
4 回答
是的,从远古的 Pentium Pro 开始,就有很多硬件性能计数器。
Oprofile 和perf
Linux、Linux/Windows 中的 Vtune、MacOSX 中的 Shark 都可以使用它们。
所有计数器都列在英特尔架构文档中(第 3B 卷,第 30 章;附录 A 中的列表): http: //www.intel.com/products/processor/manuals/
甚至 Atom 也有一些性能寄存器。
不同 CPU 的最佳列表之一是http://oprofile.sourceforge.net/docs/
如果你在 Linux 上工作,哥伦比亚大学正在开发一个名为LiMiT的有趣库,它可以快速读取性能计数器并虚拟化它们以避免进程启动和停止、在处理器之间移动等问题。我正在接受目前与开发人员一起上课,尽管我自己与该项目没有任何关系。
本文档肯定表明英特尔酷睿双核处理器可以提供您所寻求的信息。我想在英特尔网站上搜索也很有用。
我个人通过执行指令 rdtsc 的程序集包装器使用时间戳计数器。然后我得到一个无符号 64 位整数,其中包含自处理器上电以来经过的内部时钟周期数。两次读数之间的差异是执行其间的一段代码所需的代码周期数。可以以相同的方式实现对高速缓存命中读出的指令的访问。
如果没有相关的时间框架,我发现很难理解从读取缓存计数器中得出什么结论。此时间范围不应太长,否则任务切换或中断可能会影响该值。
根据微软的说法,如果在处理器上启用了降速功能(以降低能耗),则 rdtsc 指令可能不准确,应牢记(或关闭!)。