許昌做網(wǎng)站公司專業(yè)做網(wǎng)站哪家好下載微信
★超標(biāo)量處理器的很多地方用到了重排序緩存,但是我對它不是很了解,所以我整理一下重排序緩存的知識點(diǎn)。
重排序緩存(ROB)在確保亂序執(zhí)行的指令能夠正確地完成和提交(Commit),也可以用來寄存器重命名。
ROB是一個(gè)先進(jìn)先出的表,每個(gè)項(xiàng)是ROB表項(xiàng),可以記錄指令執(zhí)行的信息。
ROB表項(xiàng)的字段
(1)Complete:?標(biāo)志位,用來標(biāo)記指令是否已經(jīng)完成執(zhí)行階段。當(dāng)指令的所有操作(包括計(jì)算、訪存等)都完成,標(biāo)志就會被置為“是”,指令準(zhǔn)備好進(jìn)入退休階段。
(2)Areg:指令在程序代碼中指定的目的寄存器(邏輯寄存器)。
(3)Preg:物理寄存器的編號,經(jīng)過寄存器重命名后指令實(shí)際使用的物理寄存器。
(4)OPreg:Old Physical Register,記錄Areg在被重命名到當(dāng)前Preg之前所對應(yīng)的物理寄存器編號。在指令因異常需要回滾恢復(fù)狀態(tài)時(shí),OPreg用于指向應(yīng)該恢復(fù)的物理寄存器狀態(tài),確保異常處理后的狀態(tài)正確。
(5)PC:指令的程序計(jì)數(shù)器(PC)值。當(dāng)指令執(zhí)行過程中遇到中斷時(shí),保存這個(gè)PC能夠從正確的點(diǎn)重新開始執(zhí)行程序。
(6)Exception:如果指令執(zhí)行中觸發(fā)了異常,字段會記錄異常的類型。指令即將退休時(shí),處理器會根據(jù)異常類型執(zhí)行相應(yīng)的處理邏輯,可能是中止指令執(zhí)行、恢復(fù)現(xiàn)場或是執(zhí)行特定的異常處理程序。
(7)Type:記錄指令的類型,如算術(shù)邏輯運(yùn)算、加載、存儲、跳轉(zhuǎn)等。指令退休時(shí),處理器會依據(jù)不同的指令類型執(zhí)行相應(yīng)的動作,比如存儲指令需要把結(jié)果寫入數(shù)據(jù)緩存(D-Cache),分支指令則可能需要清理預(yù)測執(zhí)行的痕跡(如恢復(fù)檢查點(diǎn)資源)。
ROB工作原理
分發(fā)(Dispatch)階段
指令從指令隊(duì)列或解碼階段被取出,進(jìn)入流水線執(zhí)行。每個(gè)指令在進(jìn)入流水線時(shí),會在ROB中分配一個(gè)唯一的表項(xiàng)(Entry)。表項(xiàng)會記錄該指令的初始狀態(tài)。將complete狀態(tài)位設(shè)為0,表示指令尚未執(zhí)行完成。同時(shí),指令的目的寄存器信息、PC值等也會被記錄下來。
執(zhí)行(Execution)階段
指令在執(zhí)行階段完成計(jì)算后,將complete狀態(tài)位設(shè)為1,該指令已經(jīng)執(zhí)行完畢,計(jì)算結(jié)果可能被暫時(shí)存儲在ROB中或直接寫入物理寄存器堆(PRF)。如果執(zhí)行過程中發(fā)生異常,異常類型也會被記錄在ROB對應(yīng)的表項(xiàng)中,但異常的實(shí)際處理被推遲到提交階段。
異常與退休(Exception & Commit)階段
所有對程序狀態(tài)的最終更改,包括結(jié)果的寫回、異常處理,都發(fā)生在提交階段。只有當(dāng)指令的complete狀態(tài)為1,且所有先前的指令(在程序順序上)也已正確執(zhí)行并退休時(shí),該指令才能退休。計(jì)算結(jié)果根據(jù)Areg和Preg信息被寫入到寄存器或內(nèi)存中。
若存在異常,處理器會根據(jù)ROB中記錄的異常類型進(jìn)行相應(yīng)處理,可能包括恢復(fù)現(xiàn)場、跳轉(zhuǎn)到異常處理程序等。
ROB工作例子
所以ROB就是一個(gè)先進(jìn)先出的隊(duì)列,當(dāng)后面的指令執(zhí)行完必須等到前面的執(zhí)行完才可以退休。