91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是超標(biāo)量處理器的流水線(xiàn)?超標(biāo)量處理器的特點(diǎn)有哪些?

sanyue7758 ? 來(lái)源:芯片掃地僧ICer ? 2024-03-04 14:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.3 超標(biāo)量處理器的流水線(xiàn)

1.3.0 超標(biāo)量處理器的概述

A. 什么是超標(biāo)量處理器?

如果每周期可取出多條指令(eg: 超過(guò)一條)送到流水線(xiàn)中執(zhí)行,并使用硬件來(lái)對(duì)指令進(jìn)行調(diào)度(eg: 靠硬件自身來(lái)決定哪些指令可以并行執(zhí)行)的處理器,就可稱(chēng)為超標(biāo)量處理器;

B. 超標(biāo)量處理器與VLIW處理器

不是每周期可執(zhí)行多條指令的處理器都是超標(biāo)量處理器,在 VLIW(超長(zhǎng)指令字,Very Long Instruction Word)結(jié)構(gòu)的處理器中,每周期也可執(zhí)行多條指令,但VLIW處理器與超標(biāo)量處理器有本質(zhì)上的有差別:

VLIW處理器 超標(biāo)量處理器
使用什么來(lái)對(duì)指令進(jìn)行調(diào)度? 靠硬件自身來(lái)決定哪些指令可以并行地執(zhí)行; 靠編譯器和程序員自身來(lái)決定哪些指令可以并行執(zhí)行;
通用處理器所必須具有的特性之一:程序員可以?huà)侀_(kāi)底層硬件的實(shí)現(xiàn)細(xì)節(jié),專(zhuān)注于軟件本身的功能,而且這個(gè)程序可以運(yùn)行在任何支持該指令集的處理器上; 對(duì)于通用處理器來(lái)說(shuō),超標(biāo)量結(jié)構(gòu)是必需的 VLIW處理器無(wú)法實(shí)現(xiàn)這個(gè)功能,但是由于需要編譯器和程序員自身來(lái)調(diào)度指令的執(zhí)行順序,這種處理器在硬件實(shí)現(xiàn)上是很簡(jiǎn)單的,在功能比較專(zhuān)一的專(zhuān)用處理器領(lǐng)域可以大有一番作為,例如: DSP處理器;

C. 超量與超標(biāo)量、順序與亂序

標(biāo)量 超標(biāo)量
順序(in-order) 3 2
亂序(out-of-order) x 1

標(biāo)量與超標(biāo)量

標(biāo)量:指處理器在一個(gè)時(shí)鐘周期內(nèi)獲取、執(zhí)行和提交一條指令;

超標(biāo)量:指處理器在一個(gè)時(shí)鐘周期內(nèi)獲取、執(zhí)行和提交多條指令,與標(biāo)量對(duì)應(yīng);

順序與亂序

順序:"順序發(fā)射、順序執(zhí)行",指處理器按照指令原始順序逐條發(fā)射、逐條執(zhí)行;

亂序:"亂序發(fā)射、亂序執(zhí)行",與順序?qū)?yīng);

"超標(biāo)量"一般和"亂序"搭配,"標(biāo)量"一般和"順序"搭配;

D. 順序執(zhí)行和亂序執(zhí)行的超標(biāo)量處理器的特點(diǎn)

Fetch(取指) Decode(譯碼) Issue(發(fā)射) Execute & Memory(執(zhí)行 & 訪存) Write Back(寫(xiě)回) Commit(提交)
順序執(zhí)行 in-order in-order in-order - in-order in-order
亂序執(zhí)行 in-order in-order out-of-order - out-of-order in-order

FetchDecode 階段很難實(shí)現(xiàn)亂序,事實(shí)上就算實(shí)現(xiàn)了也沒(méi)意義;

Issue 表示將指令送到對(duì)應(yīng)的功能單元(Function Unit,F(xiàn)U)中執(zhí)行;

這里可亂序執(zhí)行(out-of-order),因只要指令的源操作數(shù)準(zhǔn)備好了,就可以將其先于其他指令而執(zhí)行;

Write back 表示將指令的結(jié)果寫(xiě)到目的寄存器中,

可在處理器內(nèi)使用寄存器重命名(Register Renaming)將指令集(Instruction Set,IS)中定義的邏輯寄存器(Architecture Register File,ARF)動(dòng)態(tài)地轉(zhuǎn)化為處理器內(nèi)部實(shí)際使用的物理寄存器(Physical Register File,PRF),從而實(shí)現(xiàn)亂序方式(out-of-order)的寫(xiě)回寄存器;

Commit 表示一條指令被允許更改處理器的狀態(tài)(Architecture state,例如D-Cache等),為了保證程序按照原來(lái)的意圖得到執(zhí)行,并實(shí)現(xiàn)精確異常,這個(gè)階段需要順序執(zhí)行,這樣才能夠保證從處理器外部看起來(lái),程序是串行執(zhí)行的;

精確異常:因?yàn)椴幌M惓L幚磉M(jìn)程破壞掉原程序的正常執(zhí)行,所以流水線(xiàn)上沒(méi)有執(zhí)行完的指令必須記住它處于流水線(xiàn)的哪一階段,且必須知道哪條指令發(fā)生的異常,當(dāng)發(fā)生異常指令之后,所有指令都不能改變處理器狀態(tài)所以處理完異以便異常處理結(jié)束后能精確恢復(fù)執(zhí)行,這便是精確異常。

1.3.1 順序執(zhí)行(in-order)

A. 順序執(zhí)行的超標(biāo)量處理器的流水線(xiàn)

在順序執(zhí)行(in-order)的超標(biāo)量處理器中,指令的執(zhí)行必須遵循程序中指定的順序;

5008a0f2-d8af-11ee-a297-92fbcf53809c.png

B. 粗略介紹 "順序執(zhí)行的超標(biāo)量處理器" 的流水線(xiàn)中關(guān)鍵階段

假設(shè)上圖的流水線(xiàn)是2-way超標(biāo)量處理器的,則每周期可以從I-Cache中取出兩條指令來(lái)執(zhí)行:

對(duì)于執(zhí)行乘法操作指令的第三個(gè)FU來(lái)說(shuō),只有當(dāng)指令到達(dá)1時(shí),才可將它的結(jié)果進(jìn)行旁路(by-pass);

5021f110-d8af-11ee-a297-92fbcf53809c.png

舉例一個(gè)典型的 Scoreboard (如下圖),記錄了指令集中定義的每個(gè)邏輯寄存器(R0~R31)的執(zhí)行情況;

在流水線(xiàn)的 Issue 階段,會(huì)將指令的信息寫(xiě)到 ScoreBoard 中,同時(shí),這條指令會(huì)查詢(xún) ScoreBoard 來(lái)獲知自己的源操作數(shù)是否都準(zhǔn)備好了,在這條指令被送到 FU 中執(zhí)行之后的每個(gè)周期,都會(huì)將這個(gè)值右移一位,這樣使用這個(gè)值就可以表達(dá)出指令在FU中執(zhí)行到哪個(gè)階段;

對(duì)于執(zhí)行ALU類(lèi)型指令的第一個(gè)FU來(lái)說(shuō),當(dāng)指令到達(dá)3時(shí),就可將它的結(jié)果進(jìn)行旁路(by-pass),而

在更復(fù)雜的處理器中,ScoreBoard 中還會(huì)有其他的內(nèi)容;

第一個(gè)FU用來(lái)執(zhí)行ALU類(lèi)型的指令;

第二個(gè)FU用來(lái)執(zhí)行訪問(wèn)存儲(chǔ)器類(lèi)型的指令;

第三個(gè)FU用來(lái)執(zhí)行乘法操作的指令

Issue:在指令經(jīng)過(guò) Decode 階段之后,處理器會(huì)根據(jù)指令的類(lèi)型,從 Issue Queue (發(fā)射隊(duì)列) 中選擇合適的指令發(fā)送到對(duì)應(yīng)的 FU (Function Unit) 中執(zhí)行,這個(gè)過(guò)程稱(chēng)為 lssue,若將 Issue 的過(guò)程放到指令的 Decode 階段,會(huì)嚴(yán)重影響處理器的周期時(shí)間,因此將發(fā)射的過(guò)程單獨(dú)使用一個(gè)流水段;

Execute:如上圖,Execute 階段是使用了三個(gè) FU (如下),因?yàn)橐WC流水線(xiàn)的 Write Back 階段是順序執(zhí)行的,因此所有 FU 都需要經(jīng)歷同樣周期數(shù)的流水線(xiàn) —— 此例子中,乘法運(yùn)算需要的時(shí)間最長(zhǎng),因此第三個(gè)FU使用了三級(jí)流水線(xiàn),其他的FU也需要跟隨著使用三級(jí)流水線(xiàn),即使它們?cè)谟行┝魉紊妒虑槎紱](méi)有做;

Scoreboard:是用來(lái)記錄流水線(xiàn)中每條指令的執(zhí)行情況,例如一條指令在哪個(gè)FU中執(zhí)行,在什么時(shí)候這條指令可以將結(jié)果計(jì)算出來(lái)等,并可協(xié)助流水線(xiàn)的旁路(by-pass)工作;

C. 粗略介紹 "順序執(zhí)行的超標(biāo)量處理器" 的流水線(xiàn)中的執(zhí)行情況

下圖為上面流水線(xiàn)中的執(zhí)行情況(情況有一定簡(jiǎn)化)

503f61a0-d8af-11ee-a297-92fbcf53809c.png

RAW (先寫(xiě)后讀):

WAR (先讀后寫(xiě)) 和 WAW (先寫(xiě)后寫(xiě)):

在所有的處理器中(不論順序執(zhí)行還是亂序執(zhí)行的處理器),RAW (先寫(xiě)后讀) 相關(guān)性都是不可以繞開(kāi)的,如果一個(gè)程序中存在過(guò)多的RAW相關(guān)性,那么這個(gè)程序就不能夠在處理器中被有效地執(zhí)行;

處理器需要在先前的寫(xiě)操作完成之后才能保證正確的讀取數(shù)據(jù),因此不論處理器是順序執(zhí)行還是亂序執(zhí)行,都需要考慮和處理RAW相關(guān)性;

由于上圖例子中順序執(zhí)行的處理器只有一個(gè)統(tǒng)一的 Write Back 階段,而且這個(gè)階段位于流水線(xiàn)的最后一級(jí),因此WAR和WAW這兩種相關(guān)性都不會(huì)對(duì)流水線(xiàn)產(chǎn)生影響;

假設(shè)在流水線(xiàn)的 Write Back 階段才可以對(duì)計(jì)算結(jié)果進(jìn)行 by-pass,由于這是一個(gè)順序執(zhí)行(in-order)的處理器,很多指令在流水線(xiàn)都會(huì)由于前面指令的阻塞而不能夠繼續(xù)執(zhí)行;

指令F,它和前面的指令都是不相關(guān)的,但由于這是一個(gè)順序執(zhí)行(in-order)的處理器,所以這條指令只有等到前面所有的指令都已經(jīng)發(fā)射(issue)了,它才可以送到FU中執(zhí)行 —— 降低了處理器性能;

每條指令都可以從旁路網(wǎng)絡(luò)(bypassing network)獲得操作數(shù),不需要等待源寄存器的值被 Write Back 到通用寄存器中,由于指令需要按照順序的方式執(zhí)行,所以指令在很多時(shí)候都處于等待的狀態(tài) —— 按照?qǐng)D中例子,程序在一個(gè)2-way順序執(zhí)行的超標(biāo)量處理器中需要12個(gè)周期才可以執(zhí)行完畢 —— 降低了處理器性能;

指令之間的相關(guān)性:

1.3.2 亂序執(zhí)行(out-of-order)

A. 亂序執(zhí)行的超標(biāo)量處理器的流水線(xiàn)

在亂序執(zhí)行(out-of-order)的超標(biāo)量處理器中,指令的執(zhí)行不再遵循程序中指定的順序 —— 某條指令的操作數(shù)一旦準(zhǔn)備好,就可以將其送到 FU 中執(zhí)行;

505040a6-d8af-11ee-a297-92fbcf53809c.png

B. 粗略介紹 "亂序執(zhí)行的超標(biāo)量處理器" 的流水線(xiàn)中各個(gè)階段

Fetch(取指)

I-Cache:負(fù)責(zé)存儲(chǔ)最近常用的指令;

分支預(yù)測(cè)器:用來(lái)決定下條指令的PC值;

負(fù)責(zé)從 I-Cache 中取指令,主要由兩個(gè)部件構(gòu)成:

Decode(解碼)

Decode 這部分的設(shè)計(jì)和指令集是息息相關(guān)的:

對(duì)于RISC指令集來(lái)說(shuō),例如MIPS, 由于比較簡(jiǎn)潔,所以Decode部分也就相對(duì)比較簡(jiǎn)單 —— 但在超標(biāo)量處理器中,仍舊需要對(duì)一些特殊的指令進(jìn)行處理,這些內(nèi)容額外增加了Decode部分的設(shè)計(jì)復(fù)雜度。

對(duì)于CISC指令集來(lái)說(shuō),例如x86,由于比較復(fù)雜,所以Decode部分需要更多的邏輯電路來(lái)對(duì)這些指令進(jìn)行識(shí)別;

用來(lái)識(shí)別出指令的類(lèi)型、指令需要的操作數(shù)、指令的一些控制信號(hào)等;

Register Renaming(寄存器重命名)

在進(jìn)行寄存器重命名時(shí),通常使用一個(gè)表格來(lái)存儲(chǔ)當(dāng)前邏輯寄存器到物理寄存器之間的對(duì)應(yīng)關(guān)系,同時(shí)在該表格中還存儲(chǔ)著哪些物理寄存器還沒(méi)有被使用等信息,使用一些電路來(lái)分析當(dāng)前周期被重命名的指令之間的RAW相關(guān)性,將那些存在RAW相關(guān)性的指令加以標(biāo)記,這些指令會(huì)通過(guò)后續(xù)的旁路網(wǎng)絡(luò)(bypassing network)來(lái)解決它們之間存在的“真相關(guān)性”。

由于寄存器重命名階段需要的時(shí)間比較長(zhǎng), 現(xiàn)實(shí)當(dāng)中的處理器都會(huì)將其單獨(dú)使用一級(jí)流水線(xiàn),而不是和Decode階段放在一起(當(dāng)然頭鐵也可以放一起^^)。

在流水線(xiàn)的 Decode 階段,可以得到指令的源寄存器和目的寄存器,這些寄存器都是邏輯寄存器,是在指令集中定義好的寄存器(ARF),為了解決WAR和WAW這兩種“偽相關(guān)性”,需要使用寄存器重命名的方法,將指令集中定義好的邏輯寄存器(ARF,Architecture Register File)重命名為處理器內(nèi)部使用的物理寄存器(PRF,Physical Register File),物理寄存器(PRF)的個(gè)數(shù)需要多于邏輯寄存器(ARF)的個(gè)數(shù),通過(guò)寄存器重命名,處理器可以調(diào)度更多可并行執(zhí)行的指令。

Dispatch(分發(fā))

如果在這些部件中沒(méi)有空閑的空間可以容納當(dāng)前的指令,那么這些指令就需要在流水線(xiàn)的寄存器重命名階段進(jìn)行等待,這就相當(dāng)于暫停了寄存器重命名以及之前的所有流水線(xiàn),直到這些部件中有空閑的空間為止;

Dispatch階段可以和寄存器重命名階段放在一起,在一些對(duì)周期時(shí)間要求比較緊的處理器中,也可以將這個(gè)部分單獨(dú)使用一個(gè)流水段;

經(jīng)過(guò)流水線(xiàn)的 Dispatch階段后,指令會(huì)被寫(xiě)到了 Issue Queue (發(fā)射隊(duì)列) 部件中;

在這個(gè)階段,被重命名之后的指令會(huì)按照程序中規(guī)定的順序,寫(xiě)到發(fā)射隊(duì)列(lssue Queue)、重排序緩存(ROB) Store Buffer 等部件中;

Issue(發(fā)射) —— 是流水線(xiàn)從 in-order 到 out-of-order 的分界點(diǎn)

這個(gè)仲裁(select)電路可繁可簡(jiǎn):

對(duì)于亂序執(zhí)行的處理器,Issue 階段是順序執(zhí)行(in-order)到亂序執(zhí)行(out-of-order)的分界點(diǎn),指令在 Issue 階段后,都是按照亂序執(zhí)行(out-of-order)的,直到流水線(xiàn)的 Commit 階段,才會(huì)重新變?yōu)轫樞驁?zhí)行(in-order)的狀態(tài)。

在lssue Queue中還存在喚醒(wake-up)電路,它可將 lssue Queue 中對(duì)應(yīng)的源操作數(shù)置為有效的狀態(tài);

仲裁電路和喚醒電路互相配合進(jìn)行工作,是超標(biāo)量處理器中的關(guān)鍵路徑;

對(duì)于順序發(fā)射(in-order issue)的情況,只需要判斷發(fā)射隊(duì)列中最舊的那條指令是否準(zhǔn)備好就可以了;

對(duì)于亂序發(fā)射(out-of-order issue)的情況,則仲裁電路會(huì)變得比較復(fù)雜,它需要對(duì)lssue Queue中所有的指令進(jìn)行判斷,并從所有準(zhǔn)備好的指令中找出最合適的那條指令,送到FU中執(zhí)行;

仲裁(select)電路會(huì)從這個(gè) Issue Queue (發(fā)射隊(duì)列) 部件中選擇合適的指令發(fā)送到對(duì)應(yīng)的 FU (Function Unit) 中執(zhí)行,這個(gè)過(guò)程稱(chēng)為 lssue

Register File Read(讀取寄存器)

分情況,能不能從PRF中得到操作數(shù):

事實(shí)上很大一部分指令都是通過(guò)旁路網(wǎng)絡(luò)(bypassing network)獲得操作數(shù)的,這也為減少PRF的讀端口提供了可能;

由于超標(biāo)量處理器每周期需要執(zhí)行好幾條指令,PRF所需要的端口個(gè)數(shù)也是比較多的,多端口寄存器堆的訪問(wèn)速度一般都不會(huì)很快,因此在現(xiàn)實(shí)世界的處理器中,這個(gè)階段都會(huì)單獨(dú)使用一個(gè)流水段。

一般情況下,被仲裁電路選中的指令可以從PRF中得到源操作數(shù);

不一般情況下,被仲裁電路選中的指令不能從PRF中得到操作數(shù), 但卻可在送到FU中執(zhí)行之前,從旁路網(wǎng)絡(luò)(bypassing network)中得到操作數(shù);

被仲裁電路選中的指令需要從 PRF (物理寄存器堆,Physical Register File) 中讀取操作數(shù) —— 指令得到它所需要的操作數(shù):

Source Drive

Execute(執(zhí)行)

在超標(biāo)量處理器中,Execute 階段通常有很多個(gè)不同類(lèi)型的 FU,例如負(fù)責(zé)普通運(yùn)算的 FU、負(fù)責(zé)乘累加運(yùn)算的FU、負(fù)責(zé)分支指令運(yùn)算的FU、負(fù)責(zé)load/store指令執(zhí)行的 FU 等;

現(xiàn)代的處理器還會(huì)加入一些多媒體運(yùn)算的 FU,例如進(jìn)行單指令多數(shù)據(jù)(SIMD)運(yùn)算的 FU;

每個(gè)FU都有自己的流水線(xiàn)級(jí)數(shù),如執(zhí)行ALU類(lèi)型指令的FU需要一個(gè)周期就可以計(jì)算出結(jié)果,則不再需要像順序執(zhí)行的處理器那樣被拉長(zhǎng)到和乘法FU一樣的周期數(shù);

為什么PRF中的結(jié)果需要寫(xiě)到ARF中?

PRF(Processing Register File)是用于保存指令執(zhí)行的臨時(shí)結(jié)果的寄存器文件;

ARF(Architectural Register File)是用于在程序執(zhí)行期間保存程序狀態(tài)的寄存器文件;

因?yàn)镻RF中的結(jié)果是臨時(shí)保存的,在程序的不同階段可能會(huì)被覆蓋或者丟失,所以需要將其寫(xiě)入到ARF中,以便長(zhǎng)期保存和使用。

當(dāng)PRF中的結(jié)果寫(xiě)入ARF時(shí),它們就成為了程序執(zhí)行的一部分,可以被其他指令訪問(wèn)和使用,從而更新程序執(zhí)行的當(dāng)前狀態(tài)。

因此,將PRF中的結(jié)果寫(xiě)入ARF中是程序正確執(zhí)行所必需的步驟。

在這種流水線(xiàn)中,由于每個(gè)FU的執(zhí)行周期數(shù)都不相同,所以指令在流水線(xiàn)的Write Back 階段是亂序的,在 Write Back 階段,一條指令只要計(jì)算完畢, 就會(huì)將結(jié)果寫(xiě)到PRF中;

由于分支預(yù)測(cè)失敗(mis-prediction)或者異常(exception)的存在,PRF中的結(jié)果未必都會(huì)寫(xiě)到ARF中,因此也將PRF稱(chēng)為Future File;

指令得到它所需要的操作數(shù)后,馬上就可以送到對(duì)應(yīng)的FU中執(zhí)行了:

Write Back(寫(xiě)回)

在現(xiàn)代的處理器中,旁路網(wǎng)絡(luò)是影響速度的關(guān)鍵因素,因?yàn)檫@部分電路需要大量的布線(xiàn),而隨著硅工藝尺寸的減少,連線(xiàn)的延遲甚至超過(guò)了門(mén)電路的延遲,因此旁路網(wǎng)絡(luò)會(huì)嚴(yán)重影響處理器的周期時(shí)間;

為了解決上述的問(wèn)題,很多處理器都使用了Cluster的結(jié)構(gòu),將 FU 分成不同的組:

在一個(gè)組內(nèi)的FU,布局布線(xiàn)時(shí)會(huì)被緊挨在一起,這樣在這個(gè)組內(nèi)的旁路網(wǎng)絡(luò),由于經(jīng)過(guò)的路徑比較短,一般都可以在一個(gè)周期內(nèi)完成;

當(dāng)旁路網(wǎng)絡(luò)跨越不同的組時(shí),就需要兩個(gè)甚至多個(gè)周期了,這種Cluster的結(jié)構(gòu)是一種的折中方案。

Write Back 階段:1. 會(huì)將FU計(jì)算的結(jié)果寫(xiě)到PRF(物理寄存器堆)中;2. 同時(shí)也可通過(guò)旁路網(wǎng)絡(luò)(bypassing network)將這個(gè)FU計(jì)算的結(jié)果送到需要的地方,一般都是送到所有FU的輸入端,由FU輸入端的控制電路來(lái)決定最終需要的數(shù)據(jù);

Commit(提交)

精確異常:因?yàn)椴幌M惓L幚磉M(jìn)程破壞掉原程序的正常執(zhí)行,所以流水線(xiàn)上沒(méi)有執(zhí)行完的指令必須記住它處于流水線(xiàn)的哪一階段,且必須知道哪條指令發(fā)生的異常,當(dāng)發(fā)生異常指令之后,所有指令都不能改變處理器狀態(tài)所以處理完異以便異常處理結(jié)束后能精確恢復(fù)執(zhí)行,這便是精確異常。

一條指令在 Retire 之前,都可以從流水線(xiàn)中被清除,但是一旦它順利地 Retire 而離開(kāi)流水線(xiàn),它的生命周期也就結(jié)束了,不能夠再返回到以前的狀態(tài) —— 這對(duì)于store指令會(huì)帶來(lái)額外的麻煩:因?yàn)閟tore指令需要寫(xiě)存儲(chǔ)器,如果在流水線(xiàn)的 Write Back 階段就將store指令的結(jié)果寫(xiě)入到存儲(chǔ)器中,那么一旦由于分支預(yù)測(cè)失敗或者異常等原因,需要將這條store指令從流水線(xiàn)中抹掉時(shí),就沒(méi)有辦法將存儲(chǔ)器的狀態(tài)進(jìn)行恢復(fù)了,因?yàn)榇鎯?chǔ)器中原來(lái)的值已經(jīng)被覆蓋了 —— 于是需使用一個(gè)緩存,稱(chēng)為 Store Buffer (SB),來(lái)存儲(chǔ)store指令沒(méi)有 Retire 之前的結(jié)果;

store指令在流水線(xiàn)的 Write Back 階段,會(huì)將它的結(jié)果寫(xiě)入到SB中,只有一條 store 指令真的從流水線(xiàn)中 Retire 時(shí),才可以將它的值從SB寫(xiě)到存儲(chǔ)器中。

使用 SB 這個(gè)部件之后,Load指令此時(shí)除了從D-Cache中尋找數(shù)據(jù),還需要從Store Buffer中進(jìn)行查找,這樣在一定程度上增加了設(shè)計(jì)的復(fù)雜度。

一條指令在 Commit 階段,會(huì)將它的結(jié)果從PRF搬移到ARF中,同時(shí)ROB也會(huì)配合完成對(duì)exception(異常)的處理,如果不存在異常,那么這條指令就可以順利地離開(kāi)流水線(xiàn), 并對(duì)處理器的狀態(tài)進(jìn)行更改,此時(shí)稱(chēng)這條指令退休 (Retire) 了,一條指令一旦退休,它就再也不可能回到之前的狀態(tài)了。

在ROB中,如果一條指令之前的指令還沒(méi)有執(zhí)行完,那么即使這條指令已經(jīng)執(zhí)行完了,它也不能離開(kāi)ROB,必須等待它之前的所有指令都執(zhí)行完成這條指令才能離開(kāi)ROB —— 一條指令一旦從 ROB 中離開(kāi)而 Retire(退休),那么就對(duì)處理器的狀態(tài)進(jìn)行了修改,再也無(wú)法返回到之前的狀態(tài)了;

之所以能夠完成這樣的任務(wù),是因?yàn)椋褐噶钤诹魉€(xiàn)的 dispatch 階段,按照程序中規(guī)定的順序(in-order)寫(xiě)到了 ROB 中;

程序在處理器中表現(xiàn)出來(lái)的結(jié)果總是串行的,如果在程序中先向寄存器R1寫(xiě)數(shù)據(jù),然后向寄存器R2寫(xiě)數(shù)據(jù),那么處理器表現(xiàn)出來(lái)的執(zhí)行結(jié)果一定是先寫(xiě)R1再寫(xiě)R2,也就是說(shuō),處理器執(zhí)行的結(jié)果要和程序中原始的順序是一樣的;

在超標(biāo)量處理器中,雖然指令可按照亂序執(zhí)行(out-of-order),但是最后需要這樣一個(gè)階段(Commit 階段),將這些亂序執(zhí)行的指令變回到程序規(guī)定的原始順序;

程序在處理器中表現(xiàn)出來(lái)的結(jié)果總是串行的,為了保證程序的串行結(jié)果,指令需要按照程序中規(guī)定的順序更新處理器的狀態(tài),這需要使用一個(gè)稱(chēng)為 ROB (重排序緩存) 的部件來(lái)配合,流水線(xiàn)中的所有指令都按照程序中規(guī)定的順序存儲(chǔ)在 ROB (重排序緩存) 中,使用 ROB 來(lái)實(shí)現(xiàn)程序?qū)μ幚砥鳡顟B(tài)的順序更新,這階段稱(chēng)為Commit;

Commit 階段起主要作用的部件是 ROB (重排序緩存),它會(huì)將亂序執(zhí)行的指令拉回到程序中規(guī)定的順序;

指令退休 (Retire) :

Store Buffer (SB) :

在 Commit 階段也會(huì)對(duì)指令產(chǎn)生的exception(異常)進(jìn)行處理,指令在流水線(xiàn)的很多階段都可能發(fā)生exception(異常),但是所有的exception(異常)都必須等到指令到達(dá)流水線(xiàn)的 Commit 階段時(shí)才能進(jìn)行處理,這樣可以保證異常處理是按照程序中規(guī)定的順序進(jìn)行,并且能夠?qū)崿F(xiàn)精確異常

C. 粗略介紹 "亂序執(zhí)行的超標(biāo)量處理器" 的流水線(xiàn)中的執(zhí)行情況

下圖為上面流水線(xiàn)中的執(zhí)行情況(情況有一定簡(jiǎn)化)

5069a938-d8af-11ee-a297-92fbcf53809c.png

D將"Decode"和"寄存器重命名"這兩個(gè)過(guò)程放到了同一個(gè)流水段;

r 表示指令已經(jīng)計(jì)算完成,在 ROB 中等待 Retire;

C表示一條指令經(jīng)過(guò)了流水線(xiàn)的 Commit 階段,離開(kāi)流水線(xiàn)而 Retire了,這個(gè)過(guò)程是按照程序中規(guī)定的順序執(zhí)行(in-order)的;

D、r、C:

一條指令只有等到它之前的所有指令都離開(kāi) ROB 了,才允許它離開(kāi)ROB而從流水線(xiàn)中 Retire;

該程序只要9個(gè)周期就可以完成,快于之前順序執(zhí)行程序的處理器(12個(gè)周期),這是由于亂序執(zhí)行提高了流水線(xiàn)的執(zhí)行效率 —— 當(dāng)需要執(zhí)行的指令個(gè)數(shù)更多時(shí),亂序執(zhí)行的優(yōu)勢(shì)就會(huì)更加明顯。

1.3.3 處理器的狀態(tài)恢復(fù)

現(xiàn)代的處理器在很多地方使用了預(yù)測(cè)技術(shù),因?yàn)槌瑯?biāo)量處理器的流水線(xiàn)一般比較深,所以不使用預(yù)測(cè)技術(shù)是沒(méi)有辦法獲得高性能的;

一般情況下,預(yù)測(cè)能夠有效工作的前提就是:有規(guī)律可循,一個(gè)很明顯的例子就是分支預(yù)測(cè),分支指令在執(zhí)行過(guò)程中表現(xiàn)出的規(guī)律性,使分支預(yù)測(cè)成為了可能。

但是,只要是預(yù)測(cè),就會(huì)存在失敗的可能,這時(shí)候就需要一種方法,將處理器恢復(fù)到正確的狀態(tài),這就是恢復(fù)電路的工作,它不但要將錯(cuò)誤的指令從流水線(xiàn)中抹掉,還需要將這些錯(cuò)誤指令在流水線(xiàn)中造成的“痕跡”進(jìn)行消除,例如這些錯(cuò)誤的指令可能已經(jīng)修改了重命名映射表, 或者已經(jīng)將結(jié)果寫(xiě)到了物理寄存器中等,這都需要被修正過(guò)來(lái)。

恢復(fù)電路和預(yù)測(cè)技術(shù)是天生的一對(duì),只要有預(yù)測(cè),就必然有狀態(tài)恢復(fù),激進(jìn)的預(yù)測(cè)技術(shù)會(huì)提高處理器的性能,但是代價(jià)就是更復(fù)雜的恢復(fù)電路。

在超標(biāo)量處理器中,對(duì)異常的處理由于需要抹掉流水線(xiàn)中的指令, 因此也需要使用恢復(fù)電路來(lái)使處理器恢復(fù)到正確的狀態(tài),這些內(nèi)容將在本書(shū)詳細(xì)地展開(kāi)介紹。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    20255

    瀏覽量

    252335
  • dsp
    dsp
    +關(guān)注

    關(guān)注

    561

    文章

    8244

    瀏覽量

    366679
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5608

    瀏覽量

    130001
  • Cache
    +關(guān)注

    關(guān)注

    0

    文章

    130

    瀏覽量

    29711
  • ArF
    ArF
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    1262

原文標(biāo)題:一文入門(mén) | 什么是超標(biāo)量處理器的流水線(xiàn)?

文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一文詳解高效能x86處理器

    「一個(gè)時(shí)鐘周期內(nèi)執(zhí)行一個(gè)以上指令」的超標(biāo)量流水線(xiàn)(Superscalar),早在1965 年發(fā)跡于RISC 始祖的CDC6600,1980年代陸續(xù)出現(xiàn)在RISC 處理器,如1985 年P(guān)ower
    發(fā)表于 10-24 11:58 ?2805次閱讀

    ARM Cortex-A8 處理器的介紹

    順序執(zhí)行,同步執(zhí)行的超標(biāo)量處理器內(nèi)核 13級(jí)主流水線(xiàn) 10級(jí)NEON多媒體流水線(xiàn) 專(zhuān)用的L2緩存 基于執(zhí)行記錄的跳轉(zhuǎn)預(yù)盼 B. 針對(duì)強(qiáng)調(diào)功耗的應(yīng)用,Cortex-A8采用了一個(gè)優(yōu)化的
    發(fā)表于 12-02 19:58

    超標(biāo)量處理器的微體系結(jié)構(gòu)由哪幾部分組成?

    處理器體系結(jié)構(gòu)由哪幾部分組成?超標(biāo)量處理器的微體系結(jié)構(gòu)由哪幾部分組成?
    發(fā)表于 02-28 07:31

    現(xiàn)代RISC中的流水線(xiàn)技術(shù)

    取得了成功。流水線(xiàn)技術(shù)是當(dāng)前指令集處理器設(shè)計(jì)中廣泛采用的技術(shù)。在這里我們將重點(diǎn)放在(標(biāo)量流水線(xiàn)處理器的設(shè)計(jì)。流水線(xiàn)處理器設(shè)計(jì)中的許多方法和
    發(fā)表于 03-01 17:52

    ARM Cortex-M7處理器參考手冊(cè)

    Cortex-M7處理器是一款高效、高性能的嵌入式處理器,具有低中斷延遲、低成本調(diào)試的特點(diǎn),并具有與現(xiàn)有Cortex-M Profile處理器的向后兼容性。 該
    發(fā)表于 08-17 07:55

    流水線(xiàn)結(jié)構(gòu)的高效SAR快視成像處理器

    流水線(xiàn)結(jié)構(gòu)的高效SAR快視成像處理器
    發(fā)表于 05-08 17:16 ?23次下載

    什么是超標(biāo)量技術(shù)/FADD?

    什么是超標(biāo)量技術(shù)/FADD? 超標(biāo)量(superscalar)是指在CPU中有一條以上的流水線(xiàn),并且每時(shí)鐘周期內(nèi)可以完成一條以上的指令,
    發(fā)表于 02-04 10:45 ?1762次閱讀

    流水線(xiàn)操作,應(yīng)用處理器,應(yīng)用處理器的結(jié)構(gòu)和原理是什么?

    流水線(xiàn)操作,應(yīng)用處理器,應(yīng)用處理器的結(jié)構(gòu)和原理是什么? 與哈佛結(jié)構(gòu)相關(guān),DSP芯片廣泛采用流水線(xiàn)以減少指令執(zhí)行時(shí)間.從而增強(qiáng)
    發(fā)表于 03-26 15:03 ?1406次閱讀

    PowerPC芯片特點(diǎn)超標(biāo)量體系CPU優(yōu)化技術(shù)

    后進(jìn)行對(duì)比實(shí)驗(yàn),裝置軟件運(yùn)行效率大大提高,實(shí)際效果良好。 1 超標(biāo)量體系結(jié)構(gòu)PowerPC芯片特點(diǎn) 1.1 超標(biāo)量體系結(jié)構(gòu)芯片 PowerPC芯片屬于超標(biāo)量體系結(jié)構(gòu)。
    發(fā)表于 10-19 11:21 ?0次下載

    亂序超標(biāo)量處理器核的功耗優(yōu)化

    的技術(shù)手段,也可以有效降低功耗。對(duì)一款亂序超標(biāo)量處理器核中功耗比較突出的模塊寄存文件和再定序緩沖進(jìn)行了邏輯設(shè)計(jì)優(yōu)化,在程序運(yùn)行性能幾乎不受影響的情況下明顯減少了面積,降低了功耗。
    發(fā)表于 11-23 17:37 ?3次下載
    亂序<b class='flag-5'>超標(biāo)量</b><b class='flag-5'>處理器</b>核的功耗優(yōu)化

    一文讀懂處理器流水線(xiàn)

    本文將討論處理器的一個(gè)重要的基礎(chǔ)知識(shí):流水線(xiàn)。熟悉計(jì)算機(jī)體系結(jié)構(gòu)的讀者一定知道,言及處理器微架構(gòu),幾乎必談其流水線(xiàn)。處理器
    發(fā)表于 04-08 08:16 ?2.4w次閱讀
    一文讀懂<b class='flag-5'>處理器</b><b class='flag-5'>流水線(xiàn)</b>

    RISC處理器的三大特點(diǎn)

    。RISC微處理器不僅精簡(jiǎn)了指令系統(tǒng),采用超標(biāo)量和超流水線(xiàn)結(jié)構(gòu);它們的指令數(shù)目只有幾十條,卻大大增強(qiáng)了并行處理能力。
    發(fā)表于 04-17 16:19 ?1.7w次閱讀

    新思科技推出全新ARC處理器,采用超標(biāo)量ARCv3指令集架構(gòu)

    HS5x和64位HS6x處理器單核和多核版本,采用一種新的超標(biāo)量ARCv3指令集架構(gòu)(ISA),在典型條件下,可在16納米工藝技術(shù)中實(shí)現(xiàn)高達(dá)8750 DMIPS的單核性能,是目前性能最高的ARC
    的頭像 發(fā)表于 06-01 15:21 ?6315次閱讀

    超標(biāo)量處理器的指令亂序提交機(jī)制綜述

    ,根據(jù)超標(biāo)量處理器架構(gòu)及性能需求對(duì)目標(biāo)緩存和存儲(chǔ)緩存容量進(jìn)行參數(shù)化配置降低流水線(xiàn)阻塞風(fēng)險(xiǎn),同時(shí)利用指令目的寄存編碼提交模式加快指令提交速率。實(shí)驗(yàn)結(jié)果表明,該機(jī)制提高了單次指令提交數(shù)量
    發(fā)表于 06-07 11:39 ?13次下載

    H7的特點(diǎn) 什么是超標(biāo)量流水線(xiàn)

    流水線(xiàn),并且是超標(biāo)量的,并且支持分支預(yù)測(cè)。 內(nèi)置了高級(jí)DSP硬件加速和雙精度浮點(diǎn)單元(FPU),以及硬件三角函數(shù)加速(TMU)和濾波算法加速
    的頭像 發(fā)表于 11-29 16:52 ?1731次閱讀
    H7的<b class='flag-5'>特點(diǎn)</b> 什么是<b class='flag-5'>超標(biāo)量流水線(xiàn)</b>