亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

最后的性能優化策略

最后的性能優化策略

慕田峪7331174 2019-05-21 16:14:43
這個網站上已經有很多性能問題,但我發現幾乎所有問題都是針對特定問題而且相當狹窄。幾乎所有人都重復這些建議,以避免過早優化。我們假設:代碼已經正常工作所選擇的算法對于問題的情況已經是最佳的已經測量了代碼,并且已經隔離了違規的例程所有優化嘗試也將被測量,以確保它們不會使事情變得更糟我在這里尋找的是在一個關鍵算法中擠出最后幾個百分點的策略和技巧,除此之外別無他法。理想情況下,嘗試使答案語言不可知,并在適用的情況下指出建議策略的任何缺點。我將使用我自己的初步建議添加回復,并期待Stack Overflow社區可以想到的任何其他內容。最后的性能優化策略
查看完整描述

5 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

當你無法再提高性能時 - 看看你是否可以提高感知性能。

您可能無法更快地使用fooCalc算法,但通常有一些方法可以使您的應用程序對用戶更具響應性。

幾個例子:

  • 預測用戶將要求的內容并在此之前開始處理

  • 在結果顯示時顯示結果,而不是在結束時立即顯示結果

  • 準確的進度表

這些不會使您的程序更快,但它可能會讓您的用戶更快樂。


查看完整回答
反對 回復 2019-05-21
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

我大部分時間都在這個地方度過。廣泛的描述是運行你的探查器并讓它記錄:

  • 緩存未命中。數據緩存是大多數程序中排名第一的停頓源。通過重組有問題的數據結構來提高緩存命中率以獲得更好的位置; 打包結構和數字類型以消除浪費的字節(因此浪費了緩存提?。? 盡可能預取數據以減少停頓。

  • 加載熱門商店。編譯器關于指針別名的假設以及數據通過內存在斷開的寄存器集之間移動的情況可能會導致某種病態行為導致整個CPU管道在加載操作中清除。找到浮動,向量和整體相互投射的位置并消除它們。使用__restrict自由地向編譯器承諾別名。

  • 微編碼操作。大多數處理器都有一些不能流水線操作的操作,而是運行一個存儲在ROM中的微小子程序。PowerPC上的示例是整數乘法,除法和按變量移位量。問題是整個管道在執行此操作時停止運行。嘗試消除這些操作的使用,或者至少將它們分解為組成的流水線操作,這樣您就可以在程序的其余部分上獲得超標量分派的好處。

  • 分支錯誤預測。這些太空了管道。查找CPU花費大量時間在分支后重新填充管道的情況,并使用分支提示(如果可用)使其更頻繁地正確預測?;蛘吒玫氖?,盡可能用條件移動替換分支,特別是在浮點運算之后,因為它們的管道通常更深,并且在fcmp之后讀取條件標志會導致停頓。

  • 順序浮點運算。制作這些SIMD。

還有一件事我喜歡做:

  • 將編譯器設置為輸出匯編列表,并查看它為代碼中的熱點函數發出的內容。所有這些聰明的優化“一個好的編譯器應該能夠自動為你做”?有可能你的實際編譯器不會這樣做。我見過GCC發出真正的WTF代碼。


查看完整回答
反對 回復 2019-05-21
  • 5 回答
  • 0 關注
  • 611 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號