1. 程式人生 > >Intel Core & Enhanced Core微架構(11)

Intel Core & Enhanced Core微架構(11)

Loads and Stores

Intel Core微架構在每個週期可以同時執行最多1條128位讀存操作和1條128位寫存操作,這兩條操作需要訪問不同的儲存器地址。Core微架構的亂序訪存操作允許與其他微指令以及其他的訪存操作一起執行。

讀存操作可以:

  • 如果已知讀存地址與寫存地址不衝突(即不相同),則讀存操作可以在寫存操作之前發射
  • 推測寫存操作與讀操作不衝突,投機式地發射讀操作(注:如果後來實際發生衝突,則重讀)
  • 在分支指令實際決斷之前,投機式地執行
  • 以相互重疊的方式亂序處理快取未命中事件

讀存操作不可以:

  • 投機讀不能引發任何型別的處理器陷入(trap)或故障(fault)。注:若發生則不投機讀
  • 投機讀不會訪問非快取儲存型別的資料

處理器故障(faulting)或者非快取性讀存操作會被處理器偵測到,一直等待直到這些指令退役,即當它們更新處理器架構狀態時才會執行。x87與浮點SIMD讀存操作會有一個週期的額外延遲(前節已經講述)。

寫存操作的處理過程分成兩個階段:

  • 執行階段 – 分配store緩衝區,在緩衝區中儲存地址和資料,為儲存轉發做準備。這個階段使用發射口3和4。
  • 完成階段 – 儲存指令退役,資料更新到程式設計師可見的儲存器中。可能會與讀存操作競爭快取的儲存體(bank)。寫存操作的退役由訪存排序緩衝區MOB作為一個後臺任務來維護,即將資料從store緩衝區移到一級快取中。