簡體   English   中英

如何比較gprof中的不同優化級別文件

[英]how to compare different optimization level files from gprof

大家,我正在運行gprof來檢查兩種不同優化級別(-g -pg與-O3 -pg)的執行時間百分比。

因此我得到的結果是,一個函數在O3中占用了68%的執行時間,而在-g版本中僅占用了9%的時間。

我不確定如何找出背后的原因。 我想在編譯之前比較兩個版本文件,但是我不確定cmd是否這樣做。

是否有其他方法可以找出造成此執行時間差異的原因。

使用優化標志時,您必須謹慎解釋gprof /分析結果。 使用-O3進行編譯實際上可以更改代碼的結構,因此gprof不可能知道在哪里花費了多少時間。

特別是,具有更高優化級別的函數內聯使您可以將某些函數完全替換為內聯代碼,從而使它們看起來根本不需要任何時間。 然后,將在那些子函數上花費的時間歸因於調用它們的父函數,因此看起來在給定父函數上花費的時間實際上增加了。

為此,我找不到很好的參考。 這是一個老例子:
http://gcc.gnu.org/ml/gcc/1998-04/msg00591.html
話雖這么說,當我用-O3運行gprof時,我會期待這種奇怪的行為。 我總是使用-O1優化來進行性能分析,以最大程度地減少此類影響。

我認為您的推理存在一個根本缺陷:優化版本占用68%的執行時間,而未優化版本僅占用9%的執行時間,這意味着未優化版本的性能更好。

相反,我很確定-O3版本在絕對方面表現更好,但是優化程序在其他功能上做得更好,因此, 與其余優化代碼成比例 ,給定的子例程的結果較慢-但實際上比未優化的版本要快-至少要快。

盡管如此,要直接檢查發出的代碼中的差異,您可以使用-S開關。 另外,要查看我的想法是否正確,您可以粗略地比較-O0和-03中該函數所花費的CPU時間,再將該百分比乘以諸如time類的命令所提供的程序所花費的用戶時間。非常確定,您可以獲取在gprof子程序中花費的絕對時間的度量,IIRC甚至在默認輸出中也是如此)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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