我在ubuntu上使用GCC,我想要一個函數來測量我的函數使用CPU的時間。我不想包括CPU花在後臺進程上的時間。我如何測量我的功能的時間,只有我的功能是使用CPU
例如,如果我的函數使用CPU 10 ms,則處理器處理一些其他數據20 ms,然後繼續處理我的函數8 ms。我希望它返回18ms,而不是38次。我不介意結果是否在CPU ticks中。
我在ubuntu上使用GCC,我想要一個函數來測量我的函數使用CPU的時間。我不想包括CPU花在後臺進程上的時間。我如何測量我的功能的時間,只有我的功能是使用CPU
例如,如果我的函數使用CPU 10 ms,則處理器處理一些其他數據20 ms,然後繼續處理我的函數8 ms。我希望它返回18ms,而不是38次。我不介意結果是否在CPU ticks中。
你想看看clock()
(man 3 clock
)。
請從downvoters的任何評論? –
不是其中之一,但可能是因爲'clock()'在多線程多核場景中並不適合這一點,因爲cputime將從所有執行器累積起來,使其進度比waltime更快。 –
你想要做的就是所謂的分析,而在Linux上的gprof
對此非常方便,請參閱http://www.ibm.com/developerworks/library/l-gnuprof.html。
除了Baris Demiray的回答之外,我可以親自推薦valgrind工具集的callgrind工具(以及任何其他工具)。這在與kcachegrind/qcachegrind結合時特別有用,它應該通過ubuntu存儲庫可用。這兩個工具,gprof的和callgrind的
一個非常簡短的描述可以在這裏找到: http://kcachegrind.sourceforge.net/html/Introduction.html
有沒有「我的功能」指的是整個程序(在這種情況下,只要使用時間程序),或者你真的只想要計算特定子程序的CPU使用率? – MTilsted
這就是所謂的「CPU時間」,而不是「掛鐘時間」 – MSalters