乙個簡單的ia32的CPU指令重排序與cache問題,我的推算為什麼得不出示例的結果?

時間 2021-06-03 00:36:01

1樓:王輝

Intel的手冊沒有錯。你推理的Processor 0和Processor 1上的三條指令不能reorder也是對的。

問題的關鍵在於處理器(這裡指processor 0和processor 1)內的Write Buffer。為了提高效能,把Write從Critical Path上移除掉,現代處理一般都實現了Write Buffer。它的作用是儲存已經committed (retired)的store指令的結果,直到cache已經取得相應資料的讀寫許可權。

用你的例子來說明:processor 0先把[_x]寫成1,實際只是把資料[_x]=1寫到了Write Buffer裡面。然後接著執行r1=[_x],由於[_x]就在Write Buffer裡面,所以直接返回資料,因此r1=1。

同理,此時processor 1也只是把[_y]=1寫到了它自己的Write Buffer裡面,還沒有獲取到[_y]的讀寫許可權,所以cache裡面的[_x]和[_y]還是舊資料([_x]=[_y]=0)。因此,接下來的r2=[_y]和r4=[_x]都可能讀取到舊資料0。

這種情況是滿足cache一致性協議的。比如processor 0的私有cache裡面有[_y]=0並且具有唯讀許可權,processor 0把[_x]=1寫到Write Buffer同時向directory要求[_x]的讀寫許可權,隨後的r2=_y在私有cache裡面命中,直接返回舊資料[_y]=0。(此時processor 1要求invalidate processor 0私有cache裡面的[_y]的請求可能還沒有到。)

CPU指令集的每個指令週期一樣嗎

不一樣。你讀讀晶元的指令手冊 組合語言 就知道了,上面有各條指令的執行週期。另外對分支跳轉之類的指令,繼續執行還是跳轉,差得很遠,可能會差幾個到幾十個時鐘。 萬致遠 不一樣。現代動態流水多發射的CPU可能一條同樣的指令在不同的情況下執行週期都不一樣 比如說BP猜沒猜準,cache有沒有命中,都影響到...

乙個簡單的博弈問題??

鍵山怜奈 獲勝概率顯然不同,因為只要A以同等概率隨機出牌,那麼A的獲勝概率就是9 10,同時只要B以同等概率隨機出牌,那麼B的獲勝概率就是1 10.因為1 10 9 10 1,所以以同等概率隨機出牌是雙方的最優策略。如果例2中的問題是十個回合之後總分高的人獲勝,那麼這個問題就複雜很多。不過,A獲勝的...

大腦的本質就是乙個 CPU 嗎?

大R 我覺得cpu應該類似於大腦的乙個小組件,而且是佔比非常小的那種,而完整的大腦可能由更多種類的cpu甚至更多別的功能的其他組建一起構成,集合在一起才是大腦。 NN陳 是的,就是乙個CPU,絕不是兩個。我們的大腦是單核多執行緒的。儲存和輸入輸出是輔助裝置,計算和思考是CPU在執行。為什麼CPU不如...