我用我的代碼如下功能:CPP的Linux:約RDTSC
static __inline__ unsigned long long rdtsc(void){
unsigned long long int x;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
return x;
}
是否自去年啓動蜱的這個函數返回多少? 我在哪裏可以找到有關此功能的文檔?
我用我的代碼如下功能:CPP的Linux:約RDTSC
static __inline__ unsigned long long rdtsc(void){
unsigned long long int x;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
return x;
}
是否自去年啓動蜱的這個函數返回多少? 我在哪裏可以找到有關此功能的文檔?
RDTSC
獲取自上次重置以來的cpu週期數,請參閱wikipedia。
英特爾指令集手冊卷2A & B,作爲一個更可信源:
處理器單調遞增時間戳計數器MSR 每個時鐘週期,它每當處理器復位復位至0 。 有關時間戳計數器行爲的詳細信息,請參閱英特爾®64和IA-32 架構軟件開發人員手冊,卷3B第16章中的「時間戳計數器」。
一個側面說明:你不應該發個字節,而要用實際的RTDSC
指令助記符,使其更具可讀性。
我對'.byte'的做法感到驚訝,但它似乎從這裏被解除了 - http://www.mcs.anl.gov/~kazutomo/rdtsc.html。我想知道他們爲什麼這樣做? – mattjgalloway 2012-01-16 14:37:15
@mattjgalloway:我記得較老的內聯彙編程序有時需要內聯字節發射,因爲他們沒有識別助記符,那是很久以前,沒有任何優勢,除了混淆讀者 – Necrolis 2012-01-16 14:41:28
葉,這將是有道理的:-) 。 – mattjgalloway 2012-01-16 14:50:35
您是否試過英特爾手冊? http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html – 2012-01-16 14:25:15
另外一個簡單的維基百科搜索產生這個 - http://en.wikipedia.org/wiki/ Time_Stamp_Counter – mattjgalloway 2012-01-16 14:33:07