2013-02-08 40 views
2

Oprofile基於抽樣基礎理論。 Opreport -l選項提供給我們以下面的方式剖析報告:通過Oprofile在每個功能中消耗的週期

 
samples %  image name    symbol name 
78149 15.0776 cvqa      comp_corr.clone.2 

有了這些信息,我可以知道的消費所消耗的時間%年齡。如果我在我的代碼做一些我優化設計中會再次得到報告:

 
samples %  image name    symbol name 
73179 15.0732 cvqa      comp_corr.clone.2 

在這份報告中,我沒有得到如何循環的優化很多已經這樣做了,我可以以此爲基準。迄今爲止進行了多少優化?

有沒有什麼辦法可以知道已經完成了多少次循環優化或者其他可以通過哪種方式進行基準測試?

我正在使用AMD64位機器。

回答

0

由於您的真正目標是優化程序,讓我建議另一種思考方式。

要衡量的主要是整體時間,而不是各種例程的週期或時間。

現在,以下介紹如何進行優化。不要基於任何測量。相反,獲得一些程序狀態的樣本(這是關鍵),用自己的眼睛和大腦仔細研究每個樣本,並瞭解該程序在該狀態下正在做什麼,以及它的全部原因正在做。 (你會看到什麼值得固定,統計數據可以揭示,再加上事情,他們不能透露,這讓一切變得不同。)

只要你抓住它做的行爲,對兩個或兩個以上的樣本,可以刪除的東西,修復它給你一個很大的加速。 Here is an explanation of why it works and how much speedup you can expect. 完成此操作後,您可以再次進行整體時間測量並查看您節省了多少時間。

然後不要停下來。再來一遍。你會發現一些其他問題需要解決,由於你刪除了第一個問題,現在這個比例更高。

根據我的經驗,用真正的軟件,這可以完成多達5或6次,之後程序可以比原來快幾個數量級。原因是因爲每次優化都會刪除原始執行時間的一小部分,這些部分可累積到接近100%。我不知道使用Oprofile或任何其他分析器工具獲得的結果。

+0

感謝您的建議。不過,我更感興趣的是知道整個代碼所消耗的總代碼執行時間或總週期。有什麼辦法可以解決這個問題嗎?即使有通過gprof的方式,你可以建議我 – 2013-02-13 07:29:48