這是對現有線程的後續(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數據的共享內存。
你好南丁格爾,非常感謝!我已更新原始鏈接。現在有整個項目(沒有sdf文件,很大)以及項目使用的所有庫。 –
二進制文件現在在那裏,謝謝。但是,當我嘗試指出VTune使用它們時,它說校驗和不匹配。這意味着您可能在收集數據後重新編譯了二進制文件。但要查看程序集,我需要用於收集數據的確切二進制文件。 (我試着將工具指向發行版和調試可執行文件,儘管通過調試可執行文件進行分析通常是一個糟糕的主意,所以我假設你使用了發行版)。 –
另外,我是否理解* .sdf文件是基準測試的輸入文件,因此我無法自行運行它?如果是,那麼與您收集的結果相匹配的可執行文件至關重要。 –