branch-prediction

    0熱度

    1回答

    在這個問題上,我將專注於的Visual Studio 2012和GCC 4.7 ,一方面,檔案導引編譯通過插在運行時代碼優化分支預測,然後在第二次編譯期間使用這些信息。另一方面,許多編譯器提供擴展來向編譯器提示哪個分支最可能被採用:GCC提供__builtin_expect,而Visual Studio提供__assume。 有沒有辦法提取配置文件引導的信息(任一編譯器),以便能夠使用兩種編譯器擴

    4熱度

    1回答

    在閱讀Why is it faster to process a sorted array than an unsorted array?之後,我在主循環中添加了一個額外的測試。看起來這個額外的測試正在使程序更快。 int main() { // Generate data const unsigned arraySize = 32768; int data[arr

    2熱度

    1回答

    如何以最佳便攜式方式在任意排序的數組上執行(幾乎)無分支二進制搜索? (例如,幫助編譯器生成CMOV指令的代碼對於此非常有用)。 「幾乎」我的意思是「包含儘可能少的分支」。

    17熱度

    1回答

    This question及其答案,最近被標記爲史詩般的答案,促使我想知道;在CPU分支預測失敗方面,我可以用Windows來衡量正在運行的應用程序的性能嗎?我知道存在一些靜態分析工具,這可能有助於優化代碼以在分支預測情況下獲得良好的性能,手動技術可以通過簡單地進行更改和重新測試來提供幫助,但我正在尋找一些可以實現的自動機制報告一段時間內分支預測失敗的總數,當Windows應用程序運行時,我希望某

    2熱度

    1回答

    我想問一些關於分支預測的問題。我完全知道它是什麼,它們是如何工作的或者它們的不同類型。我的問題是:我將如何使用每個預測器的性能?我的意思是,如果我使用相同的bencmark,相同的預測器,但不同的處理器,我會期望相同的命中率嗎?我認爲是的,因爲它只是一個模型,不受處理器類型的影響,但我想確保這一點。

    2熱度

    1回答

    我的問題來自Mystical's answer。據我所知,你有一個分支指令,它可以轉到另一條指令,比如0x123344,或者它可以繼續執行。 如果一個分支預測器,使猜測從它們中的從過去的模式,它是如何實現它犯了一個錯誤,並恢復了嗎?

    2熱度

    2回答

    這兩個代碼片段之間會有明顯的速度差異嗎?天真地說,我認爲第二個片段會更快,因爲分支指令遇到的次數要少得多,但另一方面,分支預測器應該解決這個問題。還是會有可觀的開銷,儘管可預測的模式?假定不使用條件移動指令。 片段1: for (int i = 0; i < 100; i++) { if (a == 3) output[i] = 1; else outp

    4熱度

    1回答

    我正在處理的應用程序有大量的if語句,其特點是在任何一次執行中,只有一個分支在90%的時間內執行。現在 ,我可以做這樣的測試分支預測的上一個if語句特定CPU的影響: - #include <iostream> #include <stdlib.h> using namespace std; int main() { int a; cin>>a; srand

    4熱度

    2回答

    所以我創建了一個類庫someBase {};這將由許多類別的下游用戶推導出來。 class someBase { public: virtual void foo()=0; }; 什麼我也有,是指針的向量some​​Base,我這樣做: - vector <someBase*> children; // downstream user code populates c

    0熱度

    1回答

    下面的代碼是否會導致分支預測失誤,讓我們說英特爾酷睿i7? for(i = 0, count = *ptr; i < count; i++) { // do something } 計數可以是0,1或2。