2012-06-26 76 views
2

我在C++中進行了一些數字處理,並且在Debug構建中使用-Os優化時,我看到CPU使用率的巨大差異。因此,我想在啓用優化的情況下剖析我的代碼,以便我不浪費時間優化編譯器已經優化好的代碼。使用XCode儀器時間事件探查器啓用優化

當我嘗試使用-Os優化進行配置文件分析時,我無法使用儀器來表示我的代碼(即使手動指定我的.dSYM文件的位置)。它甚至不會顯示我的頂級C++成員函數沒有模板化或內聯。

當我指定默認的-O0優化級別時,我可以很好地表示它。

那麼,甚至可以在啓用優化的情況下進行配置?如果是這樣,那麼有什麼訣竅讓它工作?

我正在使用XCode 4.3.3。

+1

我的意見是,一般來說,作爲一名程序員,您將在比編譯器更高的層次上進行優化,例如,使用正確的數據結構,延遲加載或任何其他,而編譯器將內聯方法,展開循環等。所以我認爲你不浪費你的時間優化關閉編譯器優化,你不打算要優化與編譯器相同的東西。 –

+0

@JonoB:考慮這種情況(這與我的接近)。優化之前,在我最內層的循環中,'StepA()'需要100ms,'StepB()'需要100ms。優化後,StepA()需要10ms,StepB()需要50ms。如果不啓用優化功能來分析信息,我該如何知道我應該將精力集中在'StepB()'上。 –

+0

你使用的是什麼編譯器/ xcode版本?我經常用-Os或更高版本(在發佈版本中)進行配置。 –

回答

2

當使用-Os時,Time Profiler的確具有象徵意義。優化器做得非常好,我的C++ DSP代碼被內聯並加速到探測器不會在我讓它運行的短時間內對它進行採樣。我可以在調用樹中看到的是系統調用。

當我嘗試運行探查器的時間更長時,探查器捕獲了我的DSP代碼的幾個點。它只顯示了我的一些NSOperationQueue處理程序調用的頂層DSP函數。下面的其餘部分似乎全部內聯。

當我用-O2編譯時,我得到了更有用的結果。我的更多DSP子程序保持不變(而不是內聯),所以我能夠更好地衡量我的DSP算法在哪裏花費時間。但所有這些都沒有實際意義,因爲現在我可以看到該應用程序在家庭系統調用中花費的時間遠遠多於我的DSP代碼。

+0

我不確定這是否應該是對我的問題的編輯,而不是回答。 –

+0

我認爲這對於其他人碰到同樣的問題,回答自己很好很有用。如今編譯器優化造成了如此巨大的差異,因爲性能分析比以前更加困難。 –