过去十年(至少)中的所有 Intel CPU 都包含一组计算各种事件的性能监视器。最新的 Intel CPU、Core i3、i5 和 i7(又名 Nehalem)是否提供了一种计算每时钟指令数 (IPC) 的机制?如果是这样,它们是如何使用的?
如果可能,我可能会在 Assembly 中为此编写代码,但 Windows 或 Linux 系统调用也可能有用。
最佳答案
是的,来自 Intel(linux 和 windows)的 Vtune 可以测量 IPC。
如果你想自己用精确的计数器来衡量代码的某些部分,你需要使用一些性能 api,比如 PAPI 或 perfctr(都适用于 linux)。
它们使用硬件性能计数器,在英特尔手册 http://www.intel.com/products/processor/manuals/ 中有所描述。
第 3D 卷,第 30 章和附录 A。
http://www.intel.com/Assets/PDF/manual/253669.pdf
Vtune 使用“Instructions Retired”和“Non-sleep clockticks”的比率来计算 CPI(“每个指令退休的周期数”)。对于 Core2,使用的性能计数器是:“CPU_CLK_UNHALTED.CORE”、“INST_RETIRED.ANY”
此计数器对于所有 Core* CPU 都是相同的:
第 3B 卷附录 A1,第 384 页:
Table A-1. Architectural Performance Events
Event | Event Mask Mnemonic | Umask | Description
num.
3CH | UnHalted Core Cycles| 00H | Unhalted core cycles
C0H | Instruction Retired | 00H | Instruction retired
关于x86 - Core i3/5/7 CPU 是否提供测量 IPC 的机制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4018936/