2
我有一個程序,我想測量不同輸入大小的執行(wallclock)時間。測量執行時間 - 在程序代碼或shell中?
在一些其他類似的問題中,我讀到在源代碼中使用clock_gettime
將不可靠,因爲CPU分支預測器,寄存器重命名,推測性執行,無序執行等,有時甚至是優化器可以將clock_gettime
撥打電話,而不是放在我放置的地方。
但這些問題我看了大約測量特定功能的時間。如果我測量整個程序(即main
函數),這些問題是否仍然存在?我正在尋找相對測量,不同輸入大小的執行時間如何變化,而不是絕對值。
我該如何獲得更好的結果?在代碼中使用計時功能:
start = clock_gettime();
do_stuff();
end = clock_gettime();
execution_time = end - start;
或與time
命令bash
:
time ./program
你是什麼意思「隔離並使其花費幾秒鐘」?我應該在每次迭代中添加一次睡眠呼叫嗎? – devil0150
@ devil0150絕對不是! :)我的意思是,循環足夠多的時間,執行時間比隨機延遲/上下文切換/填充緩存更長/ ...如果測量代碼的運行時間通常相差10毫秒,或者可能延遲10毫秒,決定在同一時間交換,你希望你的代碼運行1秒左右,這樣錯誤是微不足道的。或者,您可以運行數百次,精確測量每次運行並選擇最低時間。 – viraptor