第3章-流水線技術(shù)_第1頁
第3章-流水線技術(shù)_第2頁
第3章-流水線技術(shù)_第3頁
第3章-流水線技術(shù)_第4頁
第3章-流水線技術(shù)_第5頁
已閱讀5頁,還剩158頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第3章流水線技術(shù)張晨曦劉依www.Arch365.net微信公眾號:arch3653.1 流水線的基本概念3.2 流水線的性能指標(biāo)3.3 流水線的相關(guān)與沖突3.4 流水線的實(shí)現(xiàn)3.5 向量處理機(jī)

工業(yè)生產(chǎn)流水線

下面通過一個(gè)例子來說明流水線的好處:兩種方案兩種方案的工作過程對比流水線生產(chǎn)過程的抽象描述這種流水工作方式的主要特點(diǎn)3.1流水線的基本概念3.1.1什么是流水線3.1流水線的基本概念流水線技術(shù)把一個(gè)重復(fù)的過程分解為若干個(gè)子過程,每個(gè)子過程由專門的功能部件來實(shí)現(xiàn)。把多個(gè)處理過程在時(shí)間上錯(cuò)開,依次通過各功能段,這樣,每個(gè)子過程就可以與其他的子過程并行進(jìn)行。流水線中的每個(gè)子過程及其功能部件稱為流水線的級或段,段與段相互連接形成流水線。流水線的段數(shù)稱為流水線的深度。3.1流水線的基本概念指令流水線把指令的解釋過程分解為分析和執(zhí)行兩個(gè)子過程,并讓這兩個(gè)子過程分別用獨(dú)立的分析部件和執(zhí)行部件來實(shí)現(xiàn)。

理想情況:速度提高一倍4段指令流水線3.1流水線的基本概念浮點(diǎn)加法流水線把流水線技術(shù)應(yīng)用于運(yùn)算的執(zhí)行過程,就形成了運(yùn)算操作流水線,也稱為部件級流水線。把浮點(diǎn)加法的全過程分解為求階差、對階、尾數(shù)相加、規(guī)格化4個(gè)子過程。理想情況:速度提高3倍時(shí)空圖時(shí)空圖從時(shí)間和空間兩個(gè)方面描述了流水線的工作過程。時(shí)空圖中,橫坐標(biāo)代表時(shí)間,縱坐標(biāo)代表流水線的各個(gè)段。4段指令流水線的時(shí)空圖3.1流水線的基本概念流水技術(shù)的特點(diǎn)流水線把一個(gè)處理過程分解為若干個(gè)子過程(段),每個(gè)子過程由一個(gè)專門的功能部件來實(shí)現(xiàn)。流水線中各段的時(shí)間應(yīng)盡可能相等,否則將引起流水線堵塞、斷流。時(shí)間長的段將成為流水線的瓶頸。流水線每一個(gè)功能部件的后面都要有一個(gè)緩沖寄存器(鎖存器),稱為流水寄存器。作用:在相鄰的兩段之間傳送數(shù)據(jù),以保證提供后面要用到的數(shù)據(jù),并把各段的處理工作相互隔離。3.1流水線的基本概念流水技術(shù)適合于大量重復(fù)的時(shí)序過程,只有在輸入端不斷地提供任務(wù),才能充分發(fā)揮流水線的效率。流水線需要有通過時(shí)間和排空時(shí)間。通過時(shí)間:第一個(gè)任務(wù)從進(jìn)入流水線到流出結(jié)果所需的時(shí)間。排空時(shí)間:最后一個(gè)任務(wù)從進(jìn)入流水線到流出結(jié)果所需的時(shí)間。3.1流水線的基本概念

從不同的角度和觀點(diǎn),把流水線分成多種不同的種類。單功能流水線與多功能流水線

(按照流水線所完成的功能來分類)單功能流水線:只能完成一種固定功能的流水線。多功能流水線:流水線的各段可以進(jìn)行不同的連接,以實(shí)現(xiàn)不同的功能。例:ASC的多功能流水線3.1.2流水線的分類3.1流水線的基本概念靜態(tài)流水線與動(dòng)態(tài)流水線(按照同一時(shí)間內(nèi)各段之間的連接方式對多功能流水線做進(jìn)一步的分類)靜態(tài)流水線:在同一時(shí)間內(nèi),多功能流水線中的各段只能按同一種功能的連接方式工作。對于靜態(tài)流水線來說,只有當(dāng)輸入的是一串相同的運(yùn)算任務(wù)時(shí),流水的效率才能得到充分的發(fā)揮。例如:ASC的8段流水線3.1流水線的基本概念動(dòng)態(tài)流水線:在同一時(shí)間內(nèi),多功能流水線中的各段可以按照不同的方式連接,同時(shí)執(zhí)行多種功能。動(dòng)畫優(yōu)點(diǎn)靈活,能夠提高流水線各段的使用率,從而提高處理速度。缺點(diǎn)控制復(fù)雜。靜、動(dòng)態(tài)流水線時(shí)空圖的對比3.1流水線的基本概念部件級、處理機(jī)級及處理機(jī)間流水線(按照流水的級別來進(jìn)行分類)部件級流水線(運(yùn)算操作流水線):把處理機(jī)的算術(shù)邏輯運(yùn)算部件分段,使得各種類型的運(yùn)算操作能夠按流水方式進(jìn)行。處理機(jī)級流水線(指令流水線):把指令的解釋執(zhí)行過程按照流水方式處理。把一條指令的執(zhí)行過程分解為若干個(gè)子過程,每個(gè)子過程在獨(dú)立的功能部件中執(zhí)行。例如:前面的4段指令流水線3.1流水線的基本概念處理機(jī)間流水線(宏流水線):它是由兩個(gè)或者兩個(gè)以上的處理機(jī)串行連接起來,對同一數(shù)據(jù)流進(jìn)行處理,每個(gè)處理機(jī)完成整個(gè)任務(wù)中的一部分。

動(dòng)畫解析3.1流水線的基本概念線性流水線與非線性流水線(按照流水線中是否有反饋回路來進(jìn)行分類)線性流水線:流水線的各段串行連接,沒有反饋回路。數(shù)據(jù)通過流水線中的各段時(shí),每一個(gè)段最多只流過一次。非線性流水線:流水線中除了有串行的連接外,還有反饋回路。(舉例)非線性流水線的調(diào)度問題確定什么時(shí)候向流水線引進(jìn)新的任務(wù),才能使該任務(wù)不會(huì)與先前進(jìn)入流水線的任務(wù)發(fā)生沖突——爭用流水段。

3.1流水線的基本概念3.1流水線的基本概念順序流水線與亂序流水線(根據(jù)任務(wù)流入和流出的順序是否相同來進(jìn)行分類)順序流水線:流水線輸出端任務(wù)流出的順序與輸入端任務(wù)流入的順序完全相同。每一個(gè)任務(wù)在流水線的各段中是一個(gè)跟著一個(gè)順序流動(dòng)的。亂序流水線:流水線輸出端任務(wù)流出的順序與輸入端任務(wù)流入的順序可以不同,允許后進(jìn)入流水線的任務(wù)先完成(從輸出端流出)。也稱為無序流水線、錯(cuò)序流水線、異步流水線3.1流水線的基本概念標(biāo)量處理機(jī)與向量流水處理機(jī)把指令執(zhí)行部件中采用了流水線的處理機(jī)稱為流水線處理機(jī)。標(biāo)量處理機(jī):處理機(jī)不具有向量數(shù)據(jù)表示和向量指令,僅對標(biāo)量數(shù)據(jù)進(jìn)行流水處理。向量流水處理機(jī):具有向量數(shù)據(jù)表示和向量指令的處理機(jī)。向量數(shù)據(jù)表示和流水技術(shù)的結(jié)合。

吞吐率:在單位時(shí)間內(nèi)流水線所完成的任務(wù)數(shù)量或輸出結(jié)果的數(shù)量。3.2流水線的性能指標(biāo)3.2.1吞吐率n:任務(wù)數(shù)Tk:處理完成n個(gè)任務(wù)所用的時(shí)間3.2流水線的性能指標(biāo)各段時(shí)間均相等的流水線各段時(shí)間均相等的流水線時(shí)空圖3.2流水線的性能指標(biāo)流水線完成n個(gè)連續(xù)任務(wù)所需要的總時(shí)間為(假設(shè)一條k段線性流水線)

Tk=kΔt+(n-1)Δt=(k+n-1)Δt

流水線的實(shí)際吞吐率最大吞吐率3.2流水線的性能指標(biāo)最大吞吐率與實(shí)際吞吐率的關(guān)系流水線的實(shí)際吞吐率小于最大吞吐率,它除了與每個(gè)段的時(shí)間有關(guān)外,還與流水線的段數(shù)k以及輸入到流水線中的任務(wù)數(shù)n等有關(guān)。只有當(dāng)n>>k時(shí),才有TP≈TPmax。

3.2流水線的性能指標(biāo)各段時(shí)間不完全相等的流水線各段時(shí)間不等的流水線及其時(shí)空圖舉例(時(shí)空圖)一條4段的流水線S1,S3,S4各段的時(shí)間:ΔtS2的時(shí)間:3Δt

(瓶頸段)流水線中這種時(shí)間最長的段稱為流水線的瓶頸段。

3.2流水線的性能指標(biāo)3.2流水線的性能指標(biāo)各段時(shí)間不等的流水線的實(shí)際吞吐率:(Δti為第i段的時(shí)間,共有k個(gè)段)流水線的最大吞吐率為3.2流水線的性能指標(biāo)

例如:一條4段的流水線中,S1,S2,S4各段的時(shí)間都是Δt,唯有S3的時(shí)間是3Δt。最大吞吐率為3.2流水線的性能指標(biāo)解決流水線瓶頸問題的常用方法舉例細(xì)分瓶頸段

例如:對前面的4段流水線把瓶頸段S3細(xì)分為3個(gè)子流水線段:S3a,S3b,S3c改進(jìn)后的流水線的吞吐率:3.2流水線的性能指標(biāo)重復(fù)設(shè)置瓶頸段舉例:時(shí)空圖缺點(diǎn):控制邏輯比較復(fù)雜,所需的硬件增加了。例如:對前面的4段流水線重復(fù)設(shè)置瓶頸段S3:S3a,S3b,S3c3.2流水線的性能指標(biāo)重復(fù)設(shè)置瓶頸段后的時(shí)空圖3.2流水線的性能指標(biāo)加速比:完成同樣一批任務(wù),不使用流水線所用的時(shí)間與使用流水線所用的時(shí)間之比。假設(shè):不使用流水線(即順序執(zhí)行)所用的間為Ts,使用流水線后所用的時(shí)間為Tk,則該流水線的加速比為3.2.2加速比3.2流水線的性能指標(biāo)流水線各段時(shí)間相等(都是△t)一條k段流水線完成n個(gè)連續(xù)任務(wù)所需要的時(shí)間為

Tk=(k+n-1)Δt順序執(zhí)行n個(gè)任務(wù)所需要的時(shí)間:

Ts=nk△t

(解釋)流水線的實(shí)際加速比為3.2流水線的性能指標(biāo)最大加速比當(dāng)n>>k時(shí),S

k

思考:流水線的段數(shù)愈多愈好?

3.2流水線的性能指標(biāo)流水線的各段時(shí)間不完全相等時(shí)一條k段流水線完成n個(gè)連續(xù)任務(wù)的實(shí)際加速比為3.2流水線的性能指標(biāo)效率:流水線中的設(shè)備實(shí)際使用時(shí)間與整個(gè)運(yùn)行時(shí)間的比值,即流水線設(shè)備的利用率。

由于流水線有通過時(shí)間和排空時(shí)間,所以在連續(xù)完成n個(gè)任務(wù)的時(shí)間內(nèi),各段并不是滿負(fù)荷地工作。各段時(shí)間相等各段的效率ei相同

3.2.3效率3.2流水線的性能指標(biāo)3.2流水線的性能指標(biāo)整條流水線的效率為

可以寫成

最高效率為

當(dāng)n>>k時(shí),E≈1。3.2流水線的性能指標(biāo)當(dāng)流水線各段時(shí)間相等時(shí),流水線的效率與吞吐率成正比。

E=TP△t

流水線的效率是流水線的實(shí)際加速比S與它的最大加速比k的比值。當(dāng)E=1時(shí),S=k,實(shí)際加速比達(dá)到最大。3.2流水線的性能指標(biāo)從時(shí)空圖上看,效率就是n個(gè)任務(wù)占用的時(shí)空面積和

k個(gè)段總的時(shí)空面積之比。當(dāng)各段時(shí)間不相等時(shí)舉例3.2流水線的性能指標(biāo)3.2流水線的性能指標(biāo)

例3.1

設(shè)在下圖所示的靜態(tài)流水線上計(jì)算:

流水線的輸出可以直接返回輸入端或暫存于相應(yīng)的流水寄存器中,試計(jì)算其吞吐率、加速比和效率。3.2.4流水線的性能分析舉例(每段的時(shí)間都為△t)3.2流水線的性能指標(biāo)解:(1)選擇適合于流水線工作的算法先計(jì)算A1+B1、A2+B2、A3+B3和A4+B4;再計(jì)算(A1+B1)×(A2+B2)和(A3+B3)×(A4+B4);然后求總的乘積結(jié)果。(2)畫出時(shí)空圖3.2流水線的性能指標(biāo)3.2流水線的性能指標(biāo)在18個(gè)△t時(shí)間中,給出了7個(gè)結(jié)果。吞吐率為:

不用流水線,由于一次求和需6△t,一次求積需4△t,則產(chǎn)生上述7個(gè)結(jié)果共需(4×6+3×4)△t=36△t

加速比為(3)計(jì)算性能3.2流水線的性能指標(biāo)

流水線的效率可以看出,在求解此問題時(shí),該流水線的效率不高。3.2流水線的性能指標(biāo)主要原因多功能流水線在做某一種運(yùn)算時(shí),總有一些段是空閑的。靜態(tài)流水線在進(jìn)行功能切換時(shí),要等前一種運(yùn)算全部流出流水線后才能進(jìn)行后面的運(yùn)算。運(yùn)算之間存在關(guān)聯(lián),后面有些運(yùn)算要用到前面運(yùn)算的結(jié)果。流水線的工作過程有建立與排空部分。3.2流水線的性能指標(biāo)

例3.2有一條動(dòng)態(tài)多功能流水線由5段組成,加法用1、3、4、5段,乘法用1、2、5段,第2段的時(shí)間為2△t,其余各段時(shí)間均為△t,而且流水線的輸出可以直接返回輸入端或暫存于相應(yīng)的流水寄存器中。若在該流水線上計(jì)算:

試計(jì)算其吞吐率、加速比和效率。3.2流水線的性能指標(biāo)解:(1)選擇適合于流水線工作的算法應(yīng)先計(jì)算A1×B1、A2×B2、A3×B3和A4×B4;再計(jì)算(A1×B1)+(A2×B2)(A3×B3)+(A4×B4);然后求總的累加結(jié)果。(2)畫出時(shí)空圖(3)計(jì)算性能3.2流水線的性能指標(biāo)3.2流水線的性能指標(biāo)瓶頸問題理想情況下,流水線在工作時(shí),其中的任務(wù)是同步地每一個(gè)時(shí)鐘周期往前流動(dòng)一段。當(dāng)流水線各段不均勻時(shí),機(jī)器的時(shí)鐘周期取決于瓶頸段的延遲時(shí)間。在設(shè)計(jì)流水線時(shí),要盡可能使各段時(shí)間相等。流水線的額外開銷流水寄存器延遲時(shí)鐘偏移開銷3.2.5流水線設(shè)計(jì)中的若干問題3.2流水線的性能指標(biāo)流水寄存器需要建立時(shí)間和傳輸延遲建立時(shí)間:在觸發(fā)寫操作的時(shí)鐘信號到達(dá)之前,寄存器輸入必須保持穩(wěn)定的時(shí)間。傳輸延遲:時(shí)鐘信號到達(dá)后到寄存器輸出可用的時(shí)間。時(shí)鐘偏移開銷流水線中,時(shí)鐘到達(dá)各流水寄存器的最大差值時(shí)間。(時(shí)鐘到達(dá)各流水寄存器的時(shí)間不是完全相同)3.2流水線的性能指標(biāo)幾個(gè)問題流水線并不能減少(而且一般是增加)單條指令的執(zhí)行時(shí)間,但卻能提高吞吐率。增加流水線的深度(段數(shù))可以提高流水線的性能。流水線的深度受限于流水線的額外開銷。當(dāng)時(shí)鐘周期小到與額外開銷相同時(shí),流水已沒意義。因?yàn)檫@時(shí)在每一個(gè)時(shí)鐘周期中已沒有時(shí)間來做有用的工作。沖突問題流水線設(shè)計(jì)中要解決的重要問題之一。介紹一個(gè)經(jīng)典的5段RISC流水線

首先討論在非流水情況下是如何實(shí)現(xiàn)的一條指令的執(zhí)行過程分為以下5個(gè)周期:取指令周期(IF)IR←Mem[PC]。PC值加4。(假設(shè)每條指令占4個(gè)字節(jié))

3.3流水線的相關(guān)與沖突3.3.1一個(gè)經(jīng)典的5段流水線3.3流水線的相關(guān)與沖突指令譯碼/讀寄存器周期(ID)譯碼。用IR中的寄存器編號去訪問通用寄存器組,讀出所需的操作數(shù)。執(zhí)行/有效地址計(jì)算周期(EX)不同指令所進(jìn)行的操作不同:存儲器訪問指令:ALU把所指定的寄存器的內(nèi)容與偏移量相加,形成用于訪存的有效地址。寄存器-寄存器ALU指令:ALU按照操作碼指定的操作對從通用寄存器組中讀取的數(shù)據(jù)進(jìn)行運(yùn)算。3.3流水線的相關(guān)與沖突寄存器-立即數(shù)ALU指令:ALU按照操作碼指定的操作對從通用寄存器組中讀取的第一操作數(shù)和立即數(shù)進(jìn)行運(yùn)算。分支指令:ALU把偏移量與PC值相加,形成轉(zhuǎn)移目標(biāo)的地址。同時(shí),對在前一個(gè)周期讀出的操作數(shù)進(jìn)行判斷,確定分支是否成功。存儲器訪問/分支完成周期(MEM)該周期處理的指令只有l(wèi)oad、store和分支指令。其他類型的指令在此周期不做任何操作。3.3流水線的相關(guān)與沖突load和store指令load指令:用上一個(gè)周期計(jì)算出的有效地址從存儲器中讀出相應(yīng)的數(shù)據(jù)。store指令:把指定的數(shù)據(jù)寫入這個(gè)有效地址所指出的存儲器單元。分支指令分支“成功”,就把轉(zhuǎn)移目標(biāo)地址送入PC。分支指令執(zhí)行完成。3.3流水線的相關(guān)與沖突寫回周期(WB)

ALU運(yùn)算指令和load指令在這個(gè)周期把結(jié)果數(shù)據(jù)寫入通用寄存器組。

ALU運(yùn)算指令:結(jié)果數(shù)據(jù)來自ALU。

load指令:結(jié)果數(shù)據(jù)來自存儲器系統(tǒng)。在這個(gè)實(shí)現(xiàn)方案中:分支指令需要4個(gè)時(shí)鐘周期(如果把分支指令的執(zhí)行提前到ID周期,則只需要2個(gè)周期)。store指令需要4個(gè)周期。其他指令需要5個(gè)周期才能完成。將上述實(shí)現(xiàn)方案修改為流水線實(shí)現(xiàn)一個(gè)經(jīng)典的5段流水線

每一個(gè)周期作為一個(gè)流水段。在各段之間加上鎖存器(流水寄存器)。3.3流水線的相關(guān)與沖突5段流水線的兩種描述方式第一種描述(類似于時(shí)空圖)

第二種描述(按時(shí)間錯(cuò)開的數(shù)據(jù)通路序列)

采用流水線方式實(shí)現(xiàn)時(shí),應(yīng)解決以下幾個(gè)問題:要保證不會(huì)在同一時(shí)鐘周期要求同一個(gè)功能段做兩件不同的工作。例如,不能要求ALU同時(shí)做有效地址計(jì)算和算術(shù)運(yùn)算。避免IF段的訪存(取指令)與MEM段的訪存(讀/寫數(shù)據(jù))發(fā)生沖突。可以采用分離的指令存儲器和數(shù)據(jù)存儲器;一般采用分離的指令Cache和數(shù)據(jù)Cache。ID段和WB段都要訪問同一寄存器文件。

ID段:讀WB段:寫3.3流水線的相關(guān)與沖突3.3流水線的相關(guān)與沖突如何解決對同一寄存器的訪問沖突?把寫操作安排在時(shí)鐘周期的前半拍完成,把讀操作安排在后半拍完成??紤]PC的問題流水線為了能夠每個(gè)時(shí)鐘周期啟動(dòng)一條新的指令,就必須在每個(gè)時(shí)鐘周期進(jìn)行PC值的加4操作,并保留新的PC值。這種操作必須在IF段完成,以便為取下一條指令做好準(zhǔn)備。

(需設(shè)置一個(gè)專門的加法器)但分支指令也可能改變PC的值,而且是在MEM段進(jìn)行,這會(huì)導(dǎo)致沖突。請考慮一下,如何處理分支指令?3.3流水線的相關(guān)與沖突相關(guān):兩條指令之間存在某種依賴關(guān)系。如果兩條指令相關(guān),則它們就有可能不能在流水線中重疊執(zhí)行或者只能部分重疊執(zhí)行。相關(guān)有3種類型數(shù)據(jù)相關(guān)(也稱真數(shù)據(jù)相關(guān))名相關(guān)控制相關(guān)3.3.2相關(guān)與流水線沖突1.相關(guān)3.3流水線的相關(guān)與沖突(1)數(shù)據(jù)相關(guān)對于兩條指令i(在前,下同)和j(在后,下同),如果下述條件之一成立,則稱指令j與指令i數(shù)據(jù)相關(guān)。

指令j使用指令i產(chǎn)生的結(jié)果;指令j與指令k數(shù)據(jù)相關(guān),而指令k又與指令i數(shù)據(jù)相關(guān)。數(shù)據(jù)相關(guān)具有傳遞性。數(shù)據(jù)相關(guān)反映了數(shù)據(jù)的流動(dòng)關(guān)系,即如何從其產(chǎn)生者流動(dòng)到其消費(fèi)者。3.3流水線的相關(guān)與沖突

例如:下面這一段代碼存在數(shù)據(jù)相關(guān)。Loop:L.DF0,0(R1) //F0為數(shù)組元素

ADD.DF4,F(xiàn)0,F(xiàn)2 //加上F2中的值

S.DF4,0(R1) //保存結(jié)果

DADDIUR1,R1,-8 //數(shù)組指針遞減8個(gè)字節(jié)

BNER1,R2,Loop //如果R1≠R2,則分支

3.3流水線的相關(guān)與沖突當(dāng)數(shù)據(jù)的流動(dòng)是經(jīng)過寄存器時(shí),相關(guān)的檢測比較直觀和容易。當(dāng)數(shù)據(jù)的流動(dòng)是經(jīng)過存儲器時(shí),檢測比較復(fù)雜。相同形式的地址其有效地址未必相同。形式不同的地址其有效地址卻可能相同。(2)名相關(guān)名:指令所訪問的寄存器或存儲器單元的名稱。如果兩條指令使用相同的名,但是它們之間并沒有數(shù)據(jù)流動(dòng),則稱這兩條指令存在名相關(guān)。3.3流水線的相關(guān)與沖突指令j與指令i之間的名相關(guān)有兩種:反相關(guān):如果指令j寫的名與指令i讀的名相同,則稱指令i和j發(fā)生了反相關(guān)。

指令j寫的名=指令i讀的名輸出相關(guān):如果指令j和指令i寫相同的名,則稱指令i和j發(fā)生了輸出相關(guān)。

指令j寫的名=指令i寫的名3.3流水線的相關(guān)與沖突名相關(guān)的兩條指令之間并沒有數(shù)據(jù)的傳送。如果一條指令中的名改變了,并不影響另外一條指令的執(zhí)行。換名技術(shù)換名技術(shù):通過改變指令中操作數(shù)的名來消除名相關(guān)。對于寄存器操作數(shù)進(jìn)行換名稱為寄存器換名。既可以用編譯器靜態(tài)實(shí)現(xiàn),也可以用硬件動(dòng)態(tài)完成。3.3流水線的相關(guān)與沖突例如:考慮下述代碼:

DIV.D F2,F(xiàn)6,F(xiàn)4ADD.D F6,F(xiàn)0,F(xiàn)12SUB.D F8,F(xiàn)6,F(xiàn)14

DIV.D和ADD.D存在反相關(guān)。進(jìn)行寄存器換名(F6換成S)后,變成:

DIV.D F2,F(xiàn)6,F(xiàn)4ADD.D S,F(xiàn)0,F(xiàn)12SUB.D F8,S,F(xiàn)143.3流水線的相關(guān)與沖突(3)控制相關(guān)控制相關(guān)是指由分支指令引起的相關(guān)。為了保證程序應(yīng)有的執(zhí)行順序,必須嚴(yán)格按控制相關(guān)確定的順序執(zhí)行。典型的程序結(jié)構(gòu)是“if-then”結(jié)構(gòu)。請看一個(gè)示例:ifp1{ S1;

};S;ifp2{ S2;

};3.3流水線的相關(guān)與沖突控制相關(guān)帶來了以下兩個(gè)限制:與一條分支指令控制相關(guān)的指令不能被移到該分支之前,否則這些指令就不受該分支控制了。

對于上述的例子,then

部分中的指令不能移到if語句之前。

如果一條指令與某分支指令不存在控制相關(guān),就不能把該指令移到該分支之后。對于上述的例子,不能把S移到if語句的then部分中。3.3流水線的相關(guān)與沖突

流水線沖突是指對于具體的流水線來說,由于相關(guān)的存在,使得指令流中的下一條指令不能在指定的時(shí)鐘周期執(zhí)行。流水線沖突有3種類型:結(jié)構(gòu)沖突:因硬件資源滿足不了指令重疊執(zhí)行的要求而發(fā)生的沖突。數(shù)據(jù)沖突:當(dāng)指令在流水線中重疊執(zhí)行時(shí),因需要用到前面指令的執(zhí)行結(jié)果而發(fā)生的沖突??刂茮_突:流水線遇到分支指令和其他會(huì)改變PC值的指令所引起的沖突。2.流水線沖突3.3流水線的相關(guān)與沖突帶來的幾個(gè)問題:導(dǎo)致錯(cuò)誤的執(zhí)行結(jié)果。流水線可能會(huì)出現(xiàn)停頓,從而降低流水線的效率和實(shí)際的加速比。我們約定當(dāng)一條指令被暫停時(shí),在該暫停指令之后流出的所有指令都要被暫停,而在該暫停指令之前流出的指令則繼續(xù)進(jìn)行(否則就永遠(yuǎn)無法消除沖突)。3.3流水線的相關(guān)與沖突(1)結(jié)構(gòu)沖突在流水線處理機(jī)中,為了能夠使各種組合的指令都能順利地重疊執(zhí)行,需要對功能部件進(jìn)行流水或重復(fù)設(shè)置資源。如果某種指令組合因?yàn)橘Y源沖突而不能正常執(zhí)行,則稱該處理機(jī)有結(jié)構(gòu)沖突。常見的導(dǎo)致結(jié)構(gòu)相關(guān)的原因:功能部件不是完全流水資源份數(shù)不夠3.3流水線的相關(guān)與沖突結(jié)構(gòu)沖突舉例:訪存沖突

有些流水線處理機(jī)只有一個(gè)存儲器,將數(shù)據(jù)和指令放在一起,訪存指令會(huì)導(dǎo)致訪存沖突。解決辦法Ⅰ:插入暫停周期(“流水線氣泡”或“氣泡”)

引入暫停后的時(shí)空圖解決方法Ⅱ:

設(shè)置相互獨(dú)立的指令存儲器和數(shù)據(jù)存儲器或設(shè)置相互獨(dú)立的指令Cache和數(shù)據(jù)Cache。3.3流水線的相關(guān)與沖突由于訪問同一個(gè)存儲器而引起的結(jié)構(gòu)沖突

3.3流水線的相關(guān)與沖突為消除結(jié)構(gòu)沖突而插入的流水線氣泡3.3流水線的相關(guān)與沖突引入暫停后的時(shí)空圖指令編號時(shí)鐘周期12345678910指令iIFIDEXMEMWB指令i+1IFIDEXMEMWB指令i+2IFIDEXMEMWBWB指令i+3stall

IFIDEXMEMWB指令i+4IFIDEXMEMWB指令i+5IFIDEXMEM3.3流水線的相關(guān)與沖突有時(shí)流水線設(shè)計(jì)者允許結(jié)構(gòu)沖突的存在主要原因:減少硬件成本如果把流水線中的所有功能單元完全流水化,或者重復(fù)設(shè)置足夠份數(shù),那么所花費(fèi)的成本將相當(dāng)高。(2)數(shù)據(jù)沖突當(dāng)相關(guān)的指令靠得足夠近時(shí),它們在流水線中的重疊執(zhí)行或者重新排序會(huì)改變指令讀/寫操作數(shù)的順序,使之不同于它們非流水實(shí)現(xiàn)時(shí)的順序,則發(fā)生了數(shù)據(jù)沖突。3.3流水線的相關(guān)與沖突舉例:

DADDR1,R2,R3DSUBR4,R1,R5XORR6,R1,R7ANDR8,R1,R9ORR10,R1,R113.3流水線的相關(guān)與沖突流水線的數(shù)據(jù)沖突舉例3.3流水線的相關(guān)與沖突根據(jù)指令讀訪問和寫訪問的順序,可以將數(shù)據(jù)沖突分為3種類型??紤]兩條指令i和j

,且i在j之前進(jìn)入流水線,可能發(fā)生的數(shù)據(jù)沖突有:寫后讀沖突(RAW)在

i

寫入之前,j

先去讀。

j

讀出的內(nèi)容是錯(cuò)誤的。這是最常見的一種數(shù)據(jù)沖突,它對應(yīng)于真數(shù)據(jù)相關(guān)。3.3流水線的相關(guān)與沖突寫后寫沖突(WAW)在

i

寫入之前,j

先寫。最后寫入的結(jié)果是

i

的。錯(cuò)誤!這種沖突對應(yīng)于輸出相關(guān)。寫后寫沖突僅發(fā)生在這樣的流水線中:流水線中不只一個(gè)段可以進(jìn)行寫操作。當(dāng)先前某條指令停頓時(shí),允許其后續(xù)指令繼續(xù)前進(jìn)。前面介紹的5段流水線不會(huì)發(fā)生寫后寫沖突。(只在WB段寫寄存器)3.3流水線的相關(guān)與沖突讀后寫沖突(WAR)在i

讀之前,j

先寫。

i

讀出的內(nèi)容是錯(cuò)誤的!由反相關(guān)引起。這種沖突僅發(fā)生在這樣的情況下:有些指令的寫結(jié)果操作提前了,而且有些指令的讀操作滯后了。指令被重新排序了。

讀后寫沖突在前述5段流水線中不會(huì)發(fā)生。(讀操作(在ID段)在寫結(jié)果操作(在WB段)之前)3.3流水線的相關(guān)與沖突通過定向技術(shù)減少數(shù)據(jù)沖突引起的停頓(定向技術(shù)也稱為旁路或短路)關(guān)鍵思想:在某條指令產(chǎn)生計(jì)算結(jié)果之前,其他指令并不真正立即需要該計(jì)算結(jié)果,如果能夠?qū)⒃撚?jì)算結(jié)果從其產(chǎn)生的地方直接送到其他指令需要它的地方,那么就可以避免停頓。采用定向技術(shù)消除上例中的相關(guān)

3.3流水線的相關(guān)與沖突采用定向技術(shù)后的流水線數(shù)據(jù)通路

3.3流水線的相關(guān)與沖突當(dāng)定向硬件檢測到前面某條指令的結(jié)果寄存器就是當(dāng)前指令的源寄存器時(shí),控制邏輯會(huì)將前面那條指令的結(jié)果直接從其產(chǎn)生的地方定向到當(dāng)前指令所需的位置。結(jié)果數(shù)據(jù)不僅可以從某一功能部件的輸出定向到其自身的輸入,而且還可以定向到其他功能部件的輸入。

舉例:DSUBR1,R2,R3LDR5,0(R1)SDR5,12(R1)3.3流水線的相關(guān)與沖突更多的定向路徑

3.3流水線的相關(guān)與沖突需要停頓的數(shù)據(jù)沖突并不是所有的數(shù)據(jù)沖突都可以用定向技術(shù)來解決。

舉例:

LDR1,0(R2)DADDR4,R1,R5ANDR6,R1,R7XORR8,R1,R9增加流水線互鎖硬件,插入“暫停”。作用:檢測發(fā)現(xiàn)數(shù)據(jù)沖突,并使流水線停頓,直至沖突消失。

舉例:演示A

演示B3.3流水線的相關(guān)與沖突無法將LD指令的結(jié)果定向到DADD指令

3.3流水線的相關(guān)與沖突流水線互鎖機(jī)制插入氣泡后的執(zhí)行過程

3.3流水線的相關(guān)與沖突LDR1,0(R2)IFIDEXMEMWBDADDR4,R1,R5IFIDEXMEMWBANDR6,R1,R7IFIDEXMEMWBXORR8,R1,R9IFIDEXMEMWBLDR1,0(R2)IFIDEXMEMWBDADDR4,R1,R5IFIDstallEXMEMWBANDR6,R1,R7IFstallIDEXMEMWBXORR8,R1,R9stallIFIDEXMEM插入停頓前后的流水線時(shí)空圖

3.3流水線的相關(guān)與沖突LDRb,BIFIDEXMEMWBLDRc,CIFIDEXEXMEMWBWBDADDRa,Rb,RcIFIDstall

EXMEMWBSDRa,AIFstall

IDEXMEMWB依靠編譯器解決數(shù)據(jù)沖突

讓編譯器重新組織指令順序來消除沖突,這種技術(shù)稱為指令調(diào)度或流水線調(diào)度。例如:采用典型的代碼生成方法,

表達(dá)式A=B+C的代碼會(huì)導(dǎo)致暫停調(diào)度前的代碼調(diào)度后的代碼LDRb,BLDRc,CDADDRa,Rb,RcSDRa,ALDRe,ELDRf,F(xiàn)DSUBRd,Re,RfSDRd,DLDRb,BLDRc,CLDRe,EDADDRa,Rb,RcLDRf,F(xiàn)SDRa,ADSUBRd,Re,RfSDRd,D舉例:

請為下列表達(dá)式生成沒有暫停的指令序列:

A=B+C;

D=E-F;

假設(shè)載入延遲為1個(gè)時(shí)鐘周期。

題解3.3流水線的相關(guān)與沖突(3)控制沖突執(zhí)行分支指令的結(jié)果有兩種分支成功:PC值改變?yōu)榉种мD(zhuǎn)移的目標(biāo)地址。在條件判定和轉(zhuǎn)移地址計(jì)算都完成后,才改變PC值。不成功或者失敗:PC的值保持正常遞增,指向順序的下一條指令。處理分支指令最簡單的方法:“凍結(jié)”或者“排空”流水線。

優(yōu)點(diǎn):簡單。前述5段流水線中,改變PC值是在MEM段進(jìn)行的。給流水線帶來了3個(gè)時(shí)鐘周期的延遲。分支指令I(lǐng)FIDEXMEMWB分支目標(biāo)指令I(lǐng)F

stall

stall

IFIDEXMEMWB分支目標(biāo)指令+1IFIDEXMEMWB分支目標(biāo)指令+2IFIDEXMEM分支目標(biāo)指令+3IFIDEX分支指令I(lǐng)FIDEXMEMWB分支后繼指令

IFstall

stall

IFIDEXMEMWB分支后繼指令+1

IFIDEXMEMWB分支后繼指令+2IFIDEXMEM分支后繼指令+3IFIDEX簡單處理分支指令:分支成功的情況

簡單處理分支指令:分支失敗的情況

3.3流水線的相關(guān)與沖突把由分支指令引起的延遲稱為分支延遲。分支指令在目標(biāo)代碼中出現(xiàn)的頻度每3~4條指令就有一條是分支指令。假設(shè):分支指令出現(xiàn)的頻度是30%,

流水線理想CPI=1,

那么:流水線的實(shí)際CPI=1.9??刹扇煞N措施來減少分支延遲。在流水線中盡早判斷出分支轉(zhuǎn)移是否成功;盡早計(jì)算出分支目標(biāo)地址。3.3流水線的相關(guān)與沖突下面的討論中,我們假設(shè):

這兩步工作被提前到ID段完成,即分支指令是在ID段的末尾執(zhí)行完成,所帶來的分支延遲為一個(gè)時(shí)鐘周期。3.3流水線的相關(guān)與沖突3種通過軟件(編譯器)來減少分支延遲的方法

共同點(diǎn):對分支的處理方法在程序的執(zhí)行過程中始終是不變的,是靜態(tài)的。要么總是預(yù)測分支成功,要么總是預(yù)測分支失敗。預(yù)測分支失敗

允許分支指令后的指令繼續(xù)在流水線中流動(dòng),就好象什么都沒發(fā)生似的。若確定分支失敗,將分支指令看作是一條普通指令,流水線正常流動(dòng)。3.3流水線的相關(guān)與沖突若確定分支成功,流水線就把在分支指令之后取出的所有指令轉(zhuǎn)化為空操作,并按分支目地重新取指令執(zhí)行。要保證:分支結(jié)果出來之前不會(huì)改變處理機(jī)的狀態(tài),以便一旦猜錯(cuò)時(shí),處理機(jī)能夠回退到原先的狀態(tài)。流水線的處理過程3.3流水線的相關(guān)與沖突預(yù)測分支成功假設(shè)分支轉(zhuǎn)移成功,并從分支目標(biāo)地址處取指令執(zhí)行。起作用的前題:先知道分支目標(biāo)地址,后知道分支是否成功。前述5段流水線中,這種方法沒有任何好處。3.3流水線的相關(guān)與沖突延遲分支主要思想:從邏輯上“延長”分支指令的執(zhí)行時(shí)間。把延遲分支看成是由原來的分支指令和若干個(gè)延遲槽構(gòu)成,不管分支是否成功,都要按順序執(zhí)行延遲槽中的指令。

具有一個(gè)分支延遲槽的流水線的執(zhí)行過程分支失敗分支指令iIFIDEXMEMWB延遲槽指令i+1

IFIDEXMEMWB指令i+2IFIDEXMEMWB指令i+3IFIDEXMEMWB指令i+4IFIDEXMEMWB分支延遲槽中的指令“掩蓋”了流水線原來必須插入的暫停周期。分支成功

分支指令iIFIDEXMEMWB

延遲槽指令i+1

IFIDEXMEMWB分支目標(biāo)指令jIFIDEXMEMWB分支目標(biāo)指令j+1IFIDEXMEMWB分支目標(biāo)指令j+2IFIDEXMEMWB3.3流水線的相關(guān)與沖突

分支延遲指令的調(diào)度任務(wù):在延遲槽中放入有用的指令。由編譯器完成。能否帶來好處取決于編譯器能否把有用的指令調(diào)度到延遲槽中。三種調(diào)度方法:從前調(diào)度從目標(biāo)處調(diào)度從失敗處調(diào)度調(diào)度前和調(diào)度后的代碼3.3流水線的相關(guān)與沖突三種方法的要求及效果調(diào)度策略對調(diào)度的要求什么情況下起作用從前調(diào)度從目標(biāo)處調(diào)度從失敗處調(diào)度必須保證在分支失敗時(shí)執(zhí)行被調(diào)度

的指令不會(huì)導(dǎo)致錯(cuò)誤。有可能需要

復(fù)制指令被調(diào)度的指令必須與分支無關(guān)必須保證在分支成功時(shí)執(zhí)行被調(diào)度

的指令不會(huì)導(dǎo)致錯(cuò)誤任何情況

分支成功時(shí)(但由于復(fù)制指令,有

可能會(huì)增大程序空間) 分支失敗時(shí)3.3流水線的相關(guān)與沖突分支延遲受到兩個(gè)方面的限制:可以被放入延遲槽中的指令要滿足一定的條件。編譯器預(yù)測分支轉(zhuǎn)移方向的能力。進(jìn)一步改進(jìn):分支取消機(jī)制(取消分支)當(dāng)分支的實(shí)際執(zhí)行方向和事先所預(yù)測的一樣時(shí),執(zhí)行分支延遲槽中的指令,否則就將分支延遲槽中的指令轉(zhuǎn)化成一個(gè)空操作?!邦A(yù)測成功-取消”分支的執(zhí)行過程分支失敗分支指令iIFIDEXMEMWB延遲槽指令i+1

IFidle

idleidleidle指令i+2IFIDEXMEMWB指令i+3IFIDEXMEMWB指令i+4IFIDEXMEMWB分支成功

分支指令iIFIDEXMEMWB

延遲槽指令i+1

IFIDEXMEMWB分支目標(biāo)指令jIFIDEXMEMWB分支目標(biāo)指令j+1IFIDEXMEMWB分支目標(biāo)指令j+2IFIDEXMEMWB預(yù)測分支成功的情況下,分支取消機(jī)制的執(zhí)行情況3.3流水線的相關(guān)與沖突實(shí)現(xiàn)MIPS指令子集的一種簡單數(shù)據(jù)通路。該數(shù)據(jù)通路的操作分成5個(gè)時(shí)鐘周期取指令指令譯碼/讀寄存器執(zhí)行/有效地址計(jì)算存儲器訪問/分支完成寫回只討論整數(shù)指令的實(shí)現(xiàn)(包括:load和store,等于0轉(zhuǎn)移,整數(shù)ALU指令等。)

3.4流水線的實(shí)現(xiàn)3.4.1MIPS的一種簡單實(shí)現(xiàn)3.4流水線的實(shí)現(xiàn)一條MIPS指令最多需要以下5個(gè)時(shí)鐘周期:取指令周期(IF)

操作IR←Mem[PC]NPC←PC+4指令譯碼/讀寄存器周期(ID)

操作A←

Regs[rs]B←

Regs[rt]Imm←

((IR16)16##IR16..31)指令的譯碼操作和讀寄存器操作是并行進(jìn)行的。原因:在MIPS指令格式中,操作碼字段以及rs、rt

字段都是在固定的位置。這種技術(shù)稱為固定字段譯碼技術(shù)。

3.4流水線的實(shí)現(xiàn)執(zhí)行/有效地址計(jì)算周期(EX)不同指令所進(jìn)行的操作不同:存儲器訪問指令操作

ALUo←A+Imm寄存器-寄存器ALU指令操作

ALUo←AfuncB寄存器-立即值A(chǔ)LU指令操作

ALUo←AopImm分支指令操作

ALUo←NPC+(Imm<<2);

cond←(A=

=0)3.4流水線的實(shí)現(xiàn)

將有效地址計(jì)算周期和執(zhí)行周期合并為一個(gè)時(shí)鐘周期,這是因?yàn)镸IPS指令集采用load/store結(jié)構(gòu),沒有任何指令需要同時(shí)進(jìn)行數(shù)據(jù)有效地址的計(jì)算、轉(zhuǎn)移目標(biāo)地址的計(jì)算和對數(shù)據(jù)進(jìn)行運(yùn)算。存儲器訪問/分支完成周期(MEM)所有指令都要在該周期對PC進(jìn)行更新。除了分支指令,其他指令都是做PC←NPC在該周期內(nèi)處理的MIPS指令僅僅有l(wèi)oad、store和分支三種指令。3.4流水線的實(shí)現(xiàn)存儲器訪問指令操作LMD←Mem[ALUo]或者M(jìn)em[ALUo]←B分支指令操作

if(cond)PC←ALUoelsePC←NPC寫回周期(WB)不同的指令在寫回周期完成的工作也不一樣。寄存器-寄存器ALU指令操作

Regs[rd]←ALUo寄存器-立即數(shù)ALU指令操作

Regs[rt]←ALUoload指令操作

Regs[rt]←LMD3.4流水線的實(shí)現(xiàn)不采用單周期實(shí)現(xiàn)方案的主要原因?qū)τ诖蠖鄶?shù)CPU來說,單周期實(shí)現(xiàn)效率很低,因?yàn)椴煌闹噶钏柰瓿傻牟僮鞑顒e相當(dāng)大,因而所需要的時(shí)鐘周期時(shí)間也大不一樣。單周期實(shí)現(xiàn)時(shí),需要重復(fù)設(shè)置某些功能部件,而在多周期實(shí)現(xiàn)方案中,這些部件是可以共享的。3.4流水線的實(shí)現(xiàn)每一個(gè)時(shí)鐘周期完成的工作看作是流水線的一段,每個(gè)時(shí)鐘周期啟動(dòng)一條新的指令。流水實(shí)現(xiàn)的數(shù)據(jù)通路設(shè)置了流水寄存器段與段之間設(shè)置流水寄存器流水寄存器的命名用其相鄰的兩個(gè)段的名稱拼合而成。例如:ID段與EX段之間的流水寄存器用ID/EX表示每個(gè)流水寄存器是由若干個(gè)寄存器構(gòu)成的3.4.2基本的MIPS流水線3.4流水線的實(shí)現(xiàn)流水實(shí)現(xiàn)的數(shù)據(jù)通路3.4流水線的實(shí)現(xiàn)寄存器的命名形式為:x.y所包含的字段的命名形式為:x.y[s]

其中:x:流水寄存器名稱

y:具體寄存器名稱

s:字段名稱例如:

ID/EX.IR:流水寄存器ID/EX中的子寄存器IRIRID/EX.IR[op]:該寄存器的op字段(即操作碼字段)流水寄存器的作用將各段的工作隔開,使得它們不會(huì)互相干擾。保存相應(yīng)段的處理結(jié)果。3.4流水線的實(shí)現(xiàn)例如:EX/MEM.ALUo:保存EX段ALU的運(yùn)算結(jié)果MEM/WB.LMD:保存MEM段從數(shù)據(jù)存儲器讀出的數(shù)據(jù)向后傳遞后面將要用到的數(shù)據(jù)或者控制信息所有有用的數(shù)據(jù)和控制信息每個(gè)時(shí)鐘周期會(huì)隨著指令在流水線中的流動(dòng)往后流動(dòng)一段。

增加了向后傳遞IR和從MEM/WB.IR回送到通用寄存器組的連接。將對PC的修改移到了IF段,以便PC能及時(shí)地加

4,為取下一條指令做好準(zhǔn)備。3.4流水線的實(shí)現(xiàn)每一個(gè)流水段進(jìn)行的操作IR[rs]=IR6..10IR[rt]=IR11..15IR[rd]=IR16..20

流水段流水線的每個(gè)流水段的操作所有指令類型ALU指令load/store指令分支指令I(lǐng)FIDEXIF/ID.IR←Mem[PC]IF/ID.NPC,PC←(if((EX/MEM.IR[op]==branch)&EX/MEM.cond){EX/MEM.ALUo}else{PC+4});

ID/EX.A←Regs[IF/ID.IR[rs]];ID/EX.B←Regs[IF/ID.IR[rt]];ID/EX.NPC←IF/ID.NPC;ID/EX.IR←IF/ID.IR;ID/EX.Imm←(IF/ID.IR16)16##IF/ID.IR16..31;

EX/MEM.IR←ID/EX.IR;EX/MEM.ALUo←ID/EX.AfuncID/EX.B或EX/MEM.ALUo←ID/EX.AopID/EX.Imm;

EX/MEM.IR←ID/EX.IR;EX/MEM.ALUo←ID/EX.A+ID/EX.Imm;EX/MEM.B←ID/EX.B;

EX/MEM.IR←ID/EX.IR;EX/MEM.ALUo←ID/EX.NPC+ID/EX.Imm<<2;EX/MEM.cond←

(ID/EX.A==0);

(動(dòng)畫演示)(動(dòng)畫演示)(動(dòng)畫演示)(動(dòng)畫演示)(動(dòng)畫演示)流水段任何指令類型ALU指令load/store指令分支指令MEMWBMEM/WB.IR←EX/MEM.IR;MEM/WB.ALUo←EX/MEM.ALUo;

MEM/WB.IR←EX/MEM.IR;MEM/WB.LMD←Mem[EX/MEM.ALUo];或Mem[EX/MEM.ALUo]←EX/MEM.B;

Regs[MEM/WB.IR[rd]]←MEM/WB.ALUo;或Regs[MEM/WB.IR[rt]]←MEM/WB.ALUo;

Regs[MEM/WB.IR[rt]]←MEM/WB.LMD;

流水線的每個(gè)流水段的操作(動(dòng)畫演示)(動(dòng)畫演示)(動(dòng)畫演示)(動(dòng)畫演示)3.4流水線的實(shí)現(xiàn)流水線的控制主要是如何控制4個(gè)多路選擇器。MUX2:若ID/EX.IR中的指令是分支指令,則選擇ID/EX.NPC,否則選ID/EX.A。MUX3:若ID/EX.IR中的指令是寄存器-寄存器型ALU指令,則選ID/EX.B,否則選ID/EX.Imm。MUX1:若EX/MEM.IR中的指令是分支指令,而且EX/MEM.cond為真,則選EX/MEM.ALUo,即分支目標(biāo)地址,否則選PC+4。MUX4:若MEM/WB.IR中的指令是load指令,則選MEM/WB.LMD,否則選MEM/WB.ALUo。3.4流水線的實(shí)現(xiàn)第5個(gè)多路器:從MEM/WB回傳至通用寄存器組的寫入地址應(yīng)該是從MEM/WB.IR[rd]

和MEM/WB.IR[rt]中選一個(gè)。寄存器-寄存器型ALU指令:選擇MEM/WB.IR[rd]

;寄存器-立即數(shù)型ALU指令和load指令:選擇MEM/WB.IR[rt]

。解決數(shù)據(jù)沖突的問題所有的數(shù)據(jù)沖突均可以在ID段檢測到。如果存在數(shù)據(jù)沖突,就在相應(yīng)的指令流出ID段之前將之暫停。完成該工作的硬件稱為流水線的互鎖機(jī)制。

3.4流水線的實(shí)現(xiàn)在ID段確定需要什么樣的定向,并設(shè)置相應(yīng)的控制。

降低流水線的硬件復(fù)雜度。不必掛起已經(jīng)改變了機(jī)器狀態(tài)的指令)也可以在使用操作數(shù)的那個(gè)時(shí)鐘周期的開始檢測沖突和確定必需的定向。檢測沖突是通過比較寄存器地址是否相等來實(shí)現(xiàn)的。舉例:load互鎖由于使用load的結(jié)果而引起的流水線互鎖稱為load互鎖。

3.4流水線的實(shí)現(xiàn)ID/EX中的操作碼(ID/EX.IR[op])IF/ID中的操作碼(IF/ID.IR[op])比較的操作數(shù)字段loadRRALUID/EX.IR[rt]=IF/ID.IR[rs]loadRRALUID/EX.IR[rt]=IF/ID.IR[rt]loadload、storeALU立即數(shù)或分支ID/EX.IR[rt]=IF/ID.IR[rs]在ID段檢測是否存在RAW沖突

(這時(shí)load指令在EX段)

3.4流水線的實(shí)現(xiàn)若檢測到RAW沖突,流水線互鎖機(jī)制必須在流水線中插入停頓,并使當(dāng)前正處于IF段和ID段的指令不再前進(jìn)。將ID/EX.IR中的操作碼改為全0

(全0表示空操作)IF/ID寄存器的內(nèi)容回送到自己的入口定向邏輯要考慮的情況更多通過比較流水寄存器中的寄存器地址來確定3.4流水線的實(shí)現(xiàn)例如:若(ID/EX.IR.op==RRALU)&(EX/MEM.IR.op==RRALU)&(ID/EX.IR[rt]==EX/MEM.IR[rd]),

則EX/MEM.ALUo定向到ALU的下面一個(gè)輸入。若(ID/EX.IR[op]==RRALU)&(MEM/WB.IR[op]==load)&(ID/EX.IR[rt]==MEM/WB.IR[rt]),

則把MEM/WB.LMD定向到ALU的下面一個(gè)輸入。流水線增設(shè)的定向路徑3.4流水線的實(shí)現(xiàn)控制沖突分支指令的條件測試和分支目標(biāo)地址計(jì)算在EX段完成,對PC的修改在MEM段完成。它所帶來的分支延遲是3個(gè)時(shí)鐘周期。減少分支延遲:(把上述工作提前到ID段進(jìn)行)在ID段增設(shè)一個(gè)加法器,用于計(jì)算分支目標(biāo)地址。把條件測試“=0?”的邏輯電路移到ID段。這些結(jié)果直接回送到IF段的MUX1。改進(jìn)后的流水線對分支指令的處理。3.4流水線的實(shí)現(xiàn)3.4流水線的實(shí)現(xiàn)流水段分支指令操作IFIDEXIF/ID.IR←Mem[PC];IF/ID.NPC,PC←(if((IF/ID.IR[op]==branch)&((Regs[IF/ID.IR[rs]]==0)){IF/ID.NPC+(IF/ID.IR16)16##(IF/ID.IR16..31<<2)}else{PC+4});

ID/EX.A←Regs[IF/ID.IR[rs]];ID/EX.B←Regs[IF/ID.IR[rt]];ID/EX.IR←IF/ID.IR;ID/EX.Imm←(IF/ID.IR16

)16##IF/ID.IR16..31;MEMWB改進(jìn)后流水線的分支操作

在流水線處理機(jī)中,設(shè)置向量數(shù)據(jù)表示和相應(yīng)的向量指令,稱為向量處理機(jī)。不具有向量數(shù)據(jù)表示和相應(yīng)的向量指令的流水線處理機(jī),稱為標(biāo)量處理機(jī)。3.5向量處理機(jī)3.5.1向量處理方式以計(jì)算表達(dá)式D=A×(B+C)為例

A、B、C、D──長度為N的向量3.5向量處理機(jī)橫向(水平)處理方式向量計(jì)算是按行的方式從左到右橫向地進(jìn)行。先計(jì)算:d1←a1×(b1+c1)再計(jì)算:d2←a2×(b2+c2)……最后計(jì)算:

dN←aN×(bN+cN)組成循環(huán)程序進(jìn)行處理。

ki←bi+ci

di←ki×ai數(shù)據(jù)相關(guān):N次功能切換:2N次不適合于向量處理機(jī)的并行處理。3.5向量處理機(jī)縱向(垂直)處理方式向量計(jì)算是按列的方式從上到下縱向地進(jìn)行。

k1←b1+c1

d1←k1×a1先計(jì)算……再計(jì)算……

kN←bN+cN

dN←kN×aN表示成向量指令:

K=B+CD=K×A兩條向量指令之間:數(shù)據(jù)相關(guān):1次功能切換:1次3.5向量處理機(jī)對處理機(jī)結(jié)構(gòu)的要求:存儲器-存儲器結(jié)構(gòu)向量指令的源向量和目的向量都存放在存儲器中,運(yùn)算的中間結(jié)果需要送回存儲器。存儲器-存儲器型操作的運(yùn)算流水線例如:STAR-100、CYBER-2053.5向量處理機(jī)縱橫(分組)處理方式又稱為分組處理方式。把向量分成若干組,組內(nèi)按縱向方式處理,依次處理各組。對于上述的例子,設(shè):

N=S×n+r其中N為向量長度,S為組數(shù),n為每組的長度,r為余數(shù)。若余下的r個(gè)數(shù)也作為一組處理,則共有S+1組。運(yùn)算過程為:3.5向量處理機(jī)先算第1組:

k1~n←b1~n+c1~n

d1~n←k1~n×a1~n再算第2組:

k(n+1)~2n←b(n+1)~2n+c(n+1)~2n

d(n+1)~2n←k(n+1)~2n×a(n+1)~2n依次進(jìn)行下去,直到最后一組:第S+1組。每組內(nèi)各用兩條向量指令。數(shù)據(jù)相關(guān):1次功能切換:2次3.5向量處理機(jī)對處理機(jī)結(jié)構(gòu)的要求:寄存器-寄存器結(jié)構(gòu)設(shè)置能快速訪問的向量寄存器,用于存放源向量、目的向量及中間結(jié)果,讓運(yùn)算部件的輸入、輸出端都與向量寄存器相聯(lián),構(gòu)成寄存器-寄存器型操作的運(yùn)算流水線。典型的寄存器-寄存器結(jié)構(gòu)的向量處理機(jī)

美國的CRAY-1、我國的YH-1巨型機(jī)3.5向量處理機(jī)以CRAY-1機(jī)為例美國CRAY公司1976年每秒1億次浮點(diǎn)運(yùn)算時(shí)鐘周期:12.5ns

CRAY-1的基本結(jié)構(gòu)功能部件共有12條可并行工作的單功能流水線,可分別流水地進(jìn)行地址、向量、標(biāo)量的各種運(yùn)算。3.5.2向量處理機(jī)的結(jié)構(gòu)3.5向量處理機(jī)6個(gè)單功能流水部件:進(jìn)行向量運(yùn)算整數(shù)加(3拍)邏輯運(yùn)算(2拍)移位(4拍)浮點(diǎn)加(6拍)浮點(diǎn)乘(7拍)浮點(diǎn)迭代求倒數(shù)(14拍)括號中的數(shù)字為其流水經(jīng)過的時(shí)間,每拍為一個(gè)時(shí)鐘周期,即12.5ns。3.5向量處理機(jī)向量寄存組V由512個(gè)64位的寄存器組成,分成8塊。編號:V0~V7每一個(gè)塊稱為一個(gè)向量寄存器,可存放一個(gè)長度(即元素個(gè)數(shù))不超過64的向量。每個(gè)向量寄存器可以每拍向功能部件提供一個(gè)數(shù)據(jù)元素,或者每拍接收一個(gè)從功能部件來的結(jié)果元素。標(biāo)量寄存器S和快速暫存器T標(biāo)量寄存器有8個(gè):S0~S764位快速暫存器T用于在標(biāo)量寄存器和存儲器之間提供緩沖。3.5向量處理機(jī)向量屏蔽寄存器VM64位,每一位對應(yīng)于向量寄存器的一個(gè)單元。作用:用于向量的歸并、壓縮、還原和測試操作、對向量某些元素的單獨(dú)運(yùn)算等。CRAY-1向量處理的一個(gè)顯著特點(diǎn)每個(gè)向量寄存器Vi都有連到6個(gè)向量功能部件的單獨(dú)總線。每個(gè)向量功能部件也都有把運(yùn)算結(jié)果送回向量寄存器組的總線。3.5向量處理機(jī)只要不出現(xiàn)Vi沖突和功能部件沖突,各Vi之間和各功能部件之間都能并行工作,大大加快了向量指令的處理。Vi沖突:并行工作的各向量指令的源向量或結(jié)果向量使用了相同的Vi。例如:源向量相同

V3←V1+V2V5←V4∧V1功能部件沖突:并行工作的各向量指令要使用同一個(gè)功能部件。例如:都需使用乘法功能部件

V3←V1×V2V5←V4×V63.5向量處理機(jī)CRAY-1向量指令類型Vk←ViopVjVk←SiopVjVk

←主存主存←Vi

3.5向量處理機(jī)提高向量處理機(jī)性能的方法設(shè)置多個(gè)功能部件,使它們并行工作。采用鏈接技術(shù),加快一串向量指令的執(zhí)行。采用循環(huán)開采技術(shù),加快循環(huán)的處理。采用多處理機(jī)系統(tǒng),進(jìn)一步提高性能。3.5.3提高向量處理機(jī)性能的方法3.5向量處理機(jī)設(shè)置多個(gè)功能部件設(shè)置多個(gè)獨(dú)立的功能部件。這些部件能并行工作,并各自按流水方式工作,從而形成了多條并行工作的運(yùn)算操作流水線。例如:CRAY-1向量處理機(jī)有4組12個(gè)單功能流水部件:向量部件:向量加,移位,邏輯運(yùn)算浮點(diǎn)部件:浮點(diǎn)加,浮點(diǎn)乘,浮點(diǎn)求倒數(shù)標(biāo)量部件:標(biāo)量加,移位,邏輯運(yùn)算,數(shù)“1”/計(jì)數(shù)地址運(yùn)算部件:整數(shù)加,整數(shù)乘3.5向量處理機(jī)鏈接技術(shù)鏈接特征:具有先寫后讀相關(guān)的兩條指令,在不出現(xiàn)功能部件沖突和源向量沖突的情況下,可以把功能部件鏈接起來進(jìn)行流水處理,以達(dá)到加快執(zhí)行的目的。鏈接特性的實(shí)質(zhì)把流水線定向的思想引入到向量執(zhí)行過程的結(jié)果。3.5向量處理機(jī)

例3.3

在CRAY-1上用鏈接技術(shù)進(jìn)行向量運(yùn)算

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論