2011-09-02 47 views
1

我看到很多帖子有關使用時鐘()函數的代碼看起來像確定程序的經過時間的量:時鐘()精度

start_time = clock(); 

//code to be timed 
. 
. 
. 

end_time = clock(); 
elapsed_time = (end_time - start_time)/CLOCKS_PER_SEC; 

CLOCKS_PER_SEC的價值幾乎肯定不是每秒的實際時鐘滴答數,所以我對結果有點謹慎。無需擔心線程和I/O,clock()函數的輸出會以某種方式縮放,以便該divison生成正確的掛鐘時間?

+1

歡迎來到Stack Overflow!確保你用正確的語言標記你的問題 - 人們通常將他們知道的標籤添加到他們最喜歡的標籤列表中,這意味着合適的人將能夠看到這一點。 –

+0

您可能已經知道這一點,但請記住,幾乎所有新處理器都會根據負載動態縮放CPU頻率 - 每秒多次。每秒實際時鐘不是一個常數。 – evilspoons

回答

2

你的問題的答案是肯定的。

clock()在這種情況下指的是掛鐘而不是CPU時鐘,因此可能會乍一看誤導。對於我所見過的所有機器和編譯器,它會返回以毫秒爲單位的時間,因爲我從未見過CLOCKS_PER_SEC不是1000的情況。因此,clock()的精度限制爲毫秒,精度通常略低。

如果您對實際循環感興趣,可能很難獲得。 rdtsc指令將允許您從CPU啓動時訪問數字「僞」循環。在較舊的系統(如Intel Core 2)上,此數字通常與實際的CPU頻率相同。但在較新的系統上,事實並非如此。

要獲得比clock()更準確的計時器,您需要使用硬件性能計數器 - 這是特定於操作系統的計數器。這些內部實現使用最後一段的'rdtsc'指令。