2012-06-19 100 views

回答

27

的無效隊列更像是一個存儲緩衝區,但它的存儲系統的一部分,不是CPU。基本上,它是一個跟蹤失效並確保它們正確完成的隊列,以便緩存可以獲取緩存行的所有權,以便隨後可以寫入該行。加載隊列是一種推測結構,用於跟蹤無序處理器中的飛行中加載。例如,以下可能會出現

  1. CPU推測的方式從X發出負載
  2. 該負載是程序順序商店爲Y後,但Y的地址還沒有解決,所以店裏不會繼續。
  3. Y被解析,結果等於X.在存儲到Y的時間被解析的時候,該存儲在加載隊列中搜索已發出的推測加載,但在存儲到Y之後出現在程序中訂購。它會注意到X的負載(等於Y),並且必須壓縮以加載X開始的指令。

存儲緩衝區是存在於CPU中的推測結構,就像加載隊列一樣,並允許CPU在存儲上進行推測。寫入組合緩衝區是存儲器系統的一部分,基本上需要一堆小寫入(認爲8字節寫入),並在將它們發送到內存系統之前將它們打包到單個較大的事務中(一個64字節緩存行)。這些寫入不是推測性的,並且是一致性協議的一部分。目標是節省總線帶寬。通常,寫入組合緩衝區用於對I/O設備進行非緩存寫入(通常用於圖形卡)。在I/O設備中,通過執行8個字節的寫入操作來執行一堆設備寄存器編程,而寫入組合緩衝器允許將這些寫入通過緩存傳送出去時組合成更大的事務。

+19

我剛剛注意到了這個問題,並準備回答它 - 哎呀,我發明了英特爾的寫入組合和加載緩衝區,或者至少我的名字在許多專利上 - 但上面的答案非常好。 –

+7

存儲緩衝區=不總是推測性的,並不總是在CPU內部。 CPU外可能有存儲緩衝區,例如通過L1和L2寫入。 –

+9

加載緩衝區(1)在計算完加載地址後保持加載,但直到加載真的準備好執行爲止;或者在嘗試執行加載之後,確定存在問題,例如緩存未命中或早期存儲到尚未準備好數據的同一地址。 (2)可以用來驗證無序負載是否正確推測,正如馬丁所描述的。 –