branch-prediction

    1熱度

    1回答

    讓我們假設一個簡單的if這樣的: if (something) // do_something else // do_else 假設這if-else聲明是在不同的線程並行執行,每個線程產生不同的結果,而是通過自己的生命不斷。例如,在線程1中,條件總是被評估爲false,在線程2中爲true;在線程3中也總是如此,等等。 分支預測是否考慮每個線程的執行上下文來進行統計?因爲

    1熱度

    1回答

    問題很簡單 - 檢查給函數的實際參數是否會導致性能損失? 導出的庫函數通常傾向於以檢查用戶代碼傳遞的實際參數: if (arg1 == NULL || arg2 == NULL) return -EINVAL; 這是否檢查性能產生負面影響?我嘗試通過從某些導出的函數中刪除這些檢查來優化某些庫代碼(依賴於我是一個行爲良好的用戶並始終傳遞有效參數),但我注意到沒有真正的改進。 我的第一個

    -1熱度

    2回答

    請考慮這個普通的一段代碼: for j = 0 to (Array.length myArray) - 1 do if property.(id) then (* do a bunch of stuff*) done 這裏,property是一個非常大的數組布爾的。 在這個實驗中,我們有兩種情況: 在第一 ,property.(id)總是真。 在第二,property.

    1熱度

    2回答

    按我的理解,如果我有一個: if(case 1) { char x[] = "1"; printf("%s",x); } else if(case 2) { char x[] = "12"; printf("blah-blah-blah\n"); printf("%s",x); } 然後我的編譯器將嘗試預測分支代碼將進入,這樣一來,提

    1熱度

    1回答

    我正在嘗試創建一種安全緩衝區,可自動處理沒有任何分支的溢出。緩衝區大小是2的冪,並且只應具有有效的正(即不包括零)索引。它還允許檢查刪除,如果存儲在該索引處的元素等於搜索鍵,則在給定索引處刪除該刪除。 我基本上去爲這樣的事情 Element *buffer[256]; inline void buffer_insert(size_t index, Element *elem){ bu

    1熱度

    2回答

    這是一個純粹的概念問題。爲什麼OS沒有切換任何時候從未被佔用的分支?動態分支預測僅適用於過去採用的分支,而靜態分支預測在某些情況下才是正確的。如果分支上沒有數據,則操作系統和處理器似乎應該開始將單獨的任務放入流水線,而不是盲目猜測分支。然後,您可以計算分支的結果,並在原始任務再次計劃時執行該分支。下次遇到分支時,處理器可以使用動態預測。 這個方法沒有被使用的原因嗎?或者它被使用,我只是不知道?

    0熱度

    1回答

    我有這樣的代碼: if (null == _priceComplianceSummaryList) { _priceComplianceSummaryList = new List<PriceComplianceSummary>(); } ReSharper的標誌這是個問題,這表明,如果我默許「‘如果’與各自的分支語句替換」,上述變化的代碼: _priceComplianceSu

    0熱度

    1回答

    根據我所讀的,似乎成本可能是0個週期。它真的是0循環嗎?如果成本爲0個週期,是否包括跳轉指令本身,而不僅僅是CPU指令緩存中可能的刷新?我很欣賞任何CPU架構的答案。

    0熱度

    1回答

    我想知道在較長的管道中是否有可行的場景,當年輕的分支指令已經被分支預測機制處理時,但是相應的lhr(或ghr,取決於實現)仍然沒有由於管線長度的原因,未更新舊分支的實際結果。 它是一個可行的方案,它是如何解決的?

    5熱度

    1回答

    有沒有什麼方法可以確定,或者我可以找到Haswell,Sandy Bridge,Ivy Bridge和Skylake Intel處理器的分支目標緩衝區大小的任何資源?