[英]How can I count instructions executed on Red Hat Enterprise Linux (x86-64)?
我想知道在Red Hat Enterprise Linux上运行的程序的给定运行期间执行了多少x86-64指令。 我知道我可以从valgrind那里得到这些信息,但是减速是相当可观的。 我也知道我们使用的是内置硬件性能计数器的Intel Core 2 Quad CPU(型号Q6700)。但我不知道有什么方法可以访问C程序中执行的指令总数。
libpapi是您正在寻找的图书馆。 AMD和英特尔芯片提供insn计数。
性能应用程序编程接口(PAPI)似乎与您正在寻找的一致。
来自网站 :
PAPI旨在为工具设计人员和应用工程师提供一致的接口和方法,以便使用大多数主要微处理器中的性能计数器硬件。
Vince Weaver是田纳西大学创新计算实验室的博士后研究员,他做了一些与PAPI相关的工作。 他在UTK 网页上列出的研究表明它可能会提供一些额外的信息。
下面的程序从C访问循环计数器寄存器(抱歉非便携式代码,但与gcc一起工作正常)。 这个用于计算周期,这与指令不同。 现代处理器既可以在同一条指令上使用多个周期,也可以一次执行多条指令。 循环通常更多地用于指令的数量,但这取决于你的实际目的。
其他性能计数器当然可以以相同的方式访问(实际上我甚至不知道是否有其他的),但我将不得不寻找使用的实际指令代码。
static __inline__ unsigned long long rdtsc(void)
{
unsigned long long int x;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
return x;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.