2012-10-10 42 views
2

這是對現有線程的後續(http://stackoverflow.com/questions/12724887/caching-in-a-high-performance-financial-application) - 我發現它不是緩存妨礙我的申請。長話短說,我有一個應用程序,它將70%的運行時間花費在一個函數中(22箇中的15秒)。因此,我想盡可能地減少這個函數的運行時間,因爲設想使用該函數是爲了更大的數據(即22秒不是計劃的運行時間):瞭解VTune報告

問題是VTune的輸出拼圖我的代碼似乎在絕對意想不到的地方花費了大量的時間。我已經用完了想法,所以我在這裏發佈了我的項目以及分析器結果。

考慮看看牽連evaluateExits()函數,這些事情困擾我:

1 /功能恰好花費2.2S上調用不管返回的參數(線425 1的內聯函數,這 - > contractManager-> contractCount())。注意:函數返回1的版本無論參數是否是可能的情況之一,所以我不能放置「contractCount = 1」,並保留它。虛擬表格指針的重定向能否消耗那些2.2秒(contractCount()是一種虛擬方法)?

2 /該函數花費3.3s min(uint1,uint2)(行432),儘管我使用的wmin版本應該儘可能的友善。

3 /功能花費1.6秒就行512這是一個很瑣碎的操作和被調用的函數是不是虛擬的..

所以問題是:爲什麼這些三行代碼需要這麼很多時間?我忽略了什麼?我怎樣才能優化我的代碼,使其運行速度更快?我應該用適用於整個數組的SSE版本min替換wmin()嗎?

任何輸入,非常感謝。 丹尼爾

編輯: 縱觀到組件,我發現,在1 /情況下,它確實是使代碼「慢」的vfptr。我用Don Clugston的fastdelegate代替了虛擬函數的調用,但沒有發生任何性能改變(我不知道爲什麼)。由於南丁格爾的評論,附件現在應該包含所有必要的文件。但是,二進制文件無法成功運行,因爲它連接到有100個MB數據的共享內存。

所以,我附上加上VTune™可視化的結果herehere

回答

0

丹尼爾整個項目,

我想看看你的VTune™可視化的結果,但不幸的是你沒有包括該二進制模塊結果被收集了,所以我無法看到這裏應該具有最大價值的組件。您是否可以使用二進制文件和調試信息文件重新發布您的項目存檔?

我還試圖重新建立自己的來源,但一些頭文件找不到:

  • 一些Qt的頭(我沒有安裝Qt的,而不是一個專家這樣做)
  • parameterHolder.h文件
  • externFloatConsts。h文件

因此,爲了幫助它有一個好的方法來獲得這些文件或用於收集數據的二進制文件。

+0

你好南丁格爾,非常感謝!我已更新原始鏈接。現在有整個項目(沒有sdf文件,很大)以及項目使用的所有庫。 –

+0

二進制文件現在在那裏,謝謝。但是,當我嘗試指出VTune使用它們時,它說校驗和不匹配。這意味着您可能在收集數據後重新編譯了二進制文件。但要查看程序集,我需要用於收集數據的確切二進制文件。 (我試着將工具指向發行版和調試可執行文件,儘管通過調試可執行文件進行分析通常是一個糟糕的主意,所以我假設你使用了發行版)。 –

+0

另外,我是否理解* .sdf文件是基準測試的輸入文件,因此我無法自行運行它?如果是,那麼與您收集的結果相匹配的可執行文件至關重要。 –