1. 程式人生 > >亂序處理器中的LSQ簡介

亂序處理器中的LSQ簡介

亂序處理器中訪存指令的操作我一直看的不太懂,其中lsq在流水線中是怎麼使用的我也不太清楚,今天看了篇論文,講的是AMD的經典處理器K7,記錄一下:

 LSU部件可以理解為儲存器子系統的最高層,在該部件中包含Load Queue與Store Queue。其中Load Queue與Store Queue之間有著強烈的耦合關係,因此許多處理器系統將其合稱為LSQ。在多數處理器的儲存器子系統中,LSU是最頂層,也是指令流水線與Cache流水線的聯絡點。其上接收來自CPU的儲存器指令,其下連線著儲存器子系統。其主要功能是將來自CPU的儲存器請求傳送到儲存器子系統,並處理其下儲存器子系統的應答資料和訊息,整個過程如Figure 1所示:

store、load指令的執行過程大致如下:
        對於store指令:當ICU分派(dispatch)一個store操作給排程器(scheduler)的時候,排程器立刻放置一個store請求到LSU(當然,如果store操作的資料(store data)此時已經計算了出來的的話,也一同放進LSU。如果此時的store data還沒有的話,LSU會時刻監視(snoops)result bus,在能夠獲得store data的第一時間拿到它,放置到LSU中),與此同時,排程器發射一個store操作到AGU去計算地址,地址計算出來之後也要傳遞給LSU。

        對於load指令:排程器發射一個load操作到AGU去計算地址,同時(也可以認為是觸發)在LSU放置一個訪存請求,當這條訪存請求被dcache服務以後, LSU將得到的資料放到result bus上面

總結:在CPU Core中,一條儲存器指令首先經過取指,譯碼,Dispatch等一系列操作後,然後發射相應的儲存器指令到AGU去計算有效地址,與此同時放置訪存請求到LSU(Load/Store Unit)部件,當AGU把地址計算完成之後將有效地址傳遞給在LSU中等待的訪存請求。

ps:對於result bus,也就是圖中指令從IEU(integer execution unit)出來連到的那根result匯流排,當IEU執行ALU操作完成的時候就將結果放置到result bus,

參考: