我有一些代碼,其中有兩個或三個分支,你不知道他們將以什麼方式去,但在第一次被擊中後,它或者100%確定,或者接近於,相同路徑將再次發生。我已經注意到__builtin_likely的使用在避免分支遺漏方面沒有多大作用。儘管當我的函數在短時間內被重複調用時,分支預測做得很好。只要在函數調用之間還有其他事情發生,性能就會大大降低。有什麼辦法解決這個問題或者我可以研究一些技巧?任何方式來「標記」這些分支,當他們在流浪之後再次到達時?任何方式來更快地處理「可預測分支」?
1
A
回答
2
您可以使用模板爲每個代碼路徑生成不同版本的函數,然後使用函數指針在運行時選擇一個,以查找條件如何。
+0
我可能會玩這個。 – 2012-07-19 23:08:26
0
相關問題
- 1. 任何可能的方式來加快處理這個?
- 2. 快速確定C預處理器分支的方法
- 3. 處理分支測試
- 4. 任何更好的方式來處理用戶輸入驗證?
- 5. 哪種方式更快處理?
- 6. AWS Lambda更快的處理方式
- 7. 分支預測
- 8. 分支預測
- 9. 通過分解批處理任務來提高可測試性
- 10. 有沒有更快的方式來處理嵌套linq查詢?
- 11. Agda可以在批處理模式下更快地編譯?
- 12. 當前分支和它追蹤的分支的任何Git快捷方式?
- 13. 混帳 - 如何處理分支「測試」
- 14. 任何方式來加快此查詢?
- 15. 批處理腳本編程 - 任何方式來改變回聲的地方?
- 16. 8086微處理器的分支預測策略
- 17. 在不同處理器中的不同分支預測結果
- 18. 更簡單的方式來管理GitHub上的多個分支?
- 19. 任何方式來預測會話超時?
- 20. 如何分配處理程序來處理任何URL?
- 21. 設計模式和「分支預測」
- 22. 如何以分佈式方式處理耗時的任務?
- 23. 任何更快的方式來加載imaeview與URL
- 24. 任何方式來編碼PNG比UIImagePNGRepresentation更快?
- 25. 任何更快的方式來計算Pig中的行數
- 26. 任何方式來加快此更新? C#,SQL,T-SQL
- 27. 任何方式來監視git分支和提交活?
- 28. 更好/更快的方式來處理熊貓列中的人名?
- 29. Windows批處理腳本 - GOTO分支無法按預期方式工作
- 30. MySqli多個查詢如何處理結果更快的方式
這通常是[PGO](http://en.wikipedia.org/wiki/Profile-guided_optimization)用於,如果您的編譯器支持它的話。 – ildjarn 2012-07-19 21:41:42
當「有其他事情正在進行」時,性能總是會下降。使用一個好的分析器,所以你不會猜測這個。 – 2012-07-19 21:54:14
我在過去看到過相同的函數實現了兩次,內置提示顛倒過來,並且有一個調度指針可以在錯誤預測的分支上重置......我不確定我會在非常緊的循環之外這麼做,並且你應該像Hans Passant所說的那樣:** profile **並確定分支預測錯誤是否真的是問題(如果其他事情在兩者之間執行,錯誤預測的成本可能不是真正重要的一塊) – 2012-07-19 22:06:01