Core i3/5/7 CPU是否提供了测量IPC的机制?

Nat*_*man 8 x86 intel performancecounter

过去十年中的所有英特尔CPU(至少)都包括一组可以计算各种事件的性能监视器.最新的Intel CPU,Core i3,i5和i7(又名Nehalem)是否提供计算每时钟指令(IPC)的机制?如果是这样,他们是如何使用的?

如果这是可能的,我可能会在汇编中为此编写代码,但Windows或Linux系统调用也可能有用.

osg*_*sgx 3

是的,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 使用“退役指令”和“非睡眠时钟信号”的比率来计算 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
Run Code Online (Sandbox Code Playgroud)