2012-01-16 25 views
3

我用我的代碼如下功能:CPP的Linux:約RDTSC

static __inline__ unsigned long long rdtsc(void){ 
    unsigned long long int x; 
    __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x)); 
    return x; 
} 

是否自去年啓動蜱的這個函數返回多少? 我在哪裏可以找到有關此功能的文檔?

+1

您是否試過英特爾手冊? http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html – 2012-01-16 14:25:15

+1

另外一個簡單的維基百科搜索產生這個 - http://en.wikipedia.org/wiki/ Time_Stamp_Counter – mattjgalloway 2012-01-16 14:33:07

回答

1

RDTSC獲取自上次重置以來的cpu週期數,請參閱wikipedia

英特爾指令集手冊卷2A & B,作爲一個更可信源:

處理器單調遞增時間戳計數器MSR 每個時鐘週期,它每當處理器復位復位至0 。 有關時間戳計數器行爲的詳細信息,請參閱英特爾®64和IA-32 架構軟件開發人員手冊,卷3B第16章中的「時間戳計數器」。

一個側面說明:你不應該發個字節,而要用實際的RTDSC指令助記符,使其更具可讀性。

+0

我對'.byte'的做法感到驚訝,但它似乎從這裏被解除了 - http://www.mcs.anl.gov/~kazutomo/rdtsc.html。我想知道他們爲什麼這樣做? – mattjgalloway 2012-01-16 14:37:15

+0

@mattjgalloway:我記得較老的內聯彙編程序有時需要內聯字節發射,因爲他們沒有識別助記符,那是很久以前,沒有任何優勢,除了混淆讀者 – Necrolis 2012-01-16 14:41:28

+0

葉,這將是有道理的:-) 。 – mattjgalloway 2012-01-16 14:50:35