簡體   English   中英

Windows中單個C ++函數的簡單配置文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM