[英]Simple profiling of single C++ function in Windows
有時候,尤其是當我編寫一個新函數時,我想對單個代碼進行概要分析,但實際上完全沒有必要運行完整的概要文件,而且速度可能太慢。
我正在使用VS 2008,並且在C ++上使用了AMD分析器,但效果很好,但是我正在尋找更輕量的東西。
您使用什么工具來分析單個功能? 也許是一些宏,當您不在調試模式時,該宏會被排除。 我可以自己寫,但是我想知道是否缺少任何內置的內容。 我在想類似的東西:
void FunctionToTest()
{
PROFILE_ENTER("FunctionToTest")
// Do some stuff
PROFILE_EXIT()
}
只需在調試輸出窗口中打印該功能需要多長時間。
如果我想從特定功能中獲得最大速度,可以將其包裝在一個不錯的長時間運行的循環中,然后使用此技術 。 我真的不太在乎時間。 那只是結果。 我真正需要知道的是我必須做些什么才能使其花費更少的時間。 看到不同? 找到並修復了速度錯誤之后,當外環被移除時,它會飛起來。
同樣,我不遵循僅調優優化代碼的傳統做法,因為這假定代碼已經盡可能緊密。 實際上,在任何大小的程序中,通常都會發生一些愚蠢的事情,例如,可以重復使用以前的副本時,一遍又一遍地用相同的參數調用子函數,或者反復地創建new
對象。 編譯器的優化程序也許可以清除一些此類問題,但是我需要清除每個問題 ,因為遺留的問題將占主導地位。 它可以做的是通過加擾代碼使它們更難找到。 當我弄清所有愚蠢的東西(使它變得更快)時, 便打開了優化器。
你可能會想“好吧, 我永遠不會把愚蠢的東西在我的代碼。” 對。 而且您也永遠不會放入錯誤。 我們誰都不會嘗試犯錯,但是如果我們正在努力,我們都會努力。
Jeff Preshing的這段代碼應該可以解決這個問題:
http://preshing.com/20111203/ac-profiling-module-for-multithreaded-apis
使用clock()
或操作系統提供的高分辨率計時器之一,測量時間-鏈接中的代碼也執行該操作。 在C ++ 11中,您可以使用<chrono>
標頭中的計時器。
請注意,您應該始終在Release版本而不是 Debug版本中進行測量,以獲取正確的時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.