[英]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.