第五章 重疊、流水及向量處理機(jī)1_第1頁(yè)
第五章 重疊、流水及向量處理機(jī)1_第2頁(yè)
第五章 重疊、流水及向量處理機(jī)1_第3頁(yè)
第五章 重疊、流水及向量處理機(jī)1_第4頁(yè)
第五章 重疊、流水及向量處理機(jī)1_第5頁(yè)
已閱讀5頁(yè),還剩114頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第五章第五章 重疊、流水和向量處理機(jī)重疊、流水和向量處理機(jī)1 重疊方式重疊方式通常提高指令執(zhí)行速度的途徑有如下三種:通常提高指令執(zhí)行速度的途徑有如下三種:提高處理機(jī)的工作主頻。提高處理機(jī)的工作主頻。采用更好的算法和設(shè)計(jì)更好的功能部件。采用更好的算法和設(shè)計(jì)更好的功能部件。多條指令并行執(zhí)行,稱為指令級(jí)并行技術(shù)。多條指令并行執(zhí)行,稱為指令級(jí)并行技術(shù)。 可以從兩個(gè)方面來(lái)開(kāi)發(fā)處理機(jī)內(nèi)部的并行性:可以從兩個(gè)方面來(lái)開(kāi)發(fā)處理機(jī)內(nèi)部的并行性:空間并行性:即在一個(gè)處理機(jī)內(nèi)設(shè)置多個(gè)獨(dú)空間并行性:即在一個(gè)處理機(jī)內(nèi)設(shè)置多個(gè)獨(dú)立的操作部件,并讓這些操作部件并行工作,立的操作部件,并讓這些操作部件并行工作,這種處理機(jī)稱為多

2、操作部件處理機(jī)或超標(biāo)量這種處理機(jī)稱為多操作部件處理機(jī)或超標(biāo)量處理機(jī)處理機(jī);時(shí)間并行性:就是采用流水線技術(shù)。流水線時(shí)間并行性:就是采用流水線技術(shù)。流水線技術(shù)是一種非常經(jīng)濟(jì)、對(duì)提高處理機(jī)的運(yùn)算技術(shù)是一種非常經(jīng)濟(jì)、對(duì)提高處理機(jī)的運(yùn)算速度非常有效的技速度非常有效的技 術(shù)。采用流水線技術(shù)可以術(shù)。采用流水線技術(shù)可以不增加硬件或只需要增加少量硬件就能夠把不增加硬件或只需要增加少量硬件就能夠把處理機(jī)的運(yùn)算速度提高幾倍處理機(jī)的運(yùn)算速度提高幾倍 它是目前使用非常普遍的一種并行處理它是目前使用非常普遍的一種并行處理方式。方式。 本章學(xué)習(xí)標(biāo)量計(jì)算機(jī)上使用的流水加速技術(shù)。主要內(nèi)本章學(xué)習(xí)標(biāo)量計(jì)算機(jī)上使用的流水加速技術(shù)。主

3、要內(nèi)容有流水技術(shù)的分類、流水線性能指標(biāo)計(jì)算、非線性流水容有流水技術(shù)的分類、流水線性能指標(biāo)計(jì)算、非線性流水線的調(diào)度算法。線的調(diào)度算法。 標(biāo)量計(jì)算機(jī)指只能直接進(jìn)行標(biāo)量運(yùn)算的計(jì)算機(jī),與能標(biāo)量計(jì)算機(jī)指只能直接進(jìn)行標(biāo)量運(yùn)算的計(jì)算機(jī),與能夠直接進(jìn)行向量運(yùn)算的向量計(jì)算機(jī)相對(duì)應(yīng)。夠直接進(jìn)行向量運(yùn)算的向量計(jì)算機(jī)相對(duì)應(yīng)。 流水處理方式的特征,是讓多個(gè)依次啟動(dòng)的任務(wù),盡流水處理方式的特征,是讓多個(gè)依次啟動(dòng)的任務(wù),盡量同時(shí)使用系統(tǒng)的不同部件,通過(guò)時(shí)間重疊來(lái)提高處理速量同時(shí)使用系統(tǒng)的不同部件,通過(guò)時(shí)間重疊來(lái)提高處理速率。這種技術(shù)理論上不增加成本。率。這種技術(shù)理論上不增加成本。 標(biāo)量計(jì)算機(jī)上使用的流水加速技術(shù)屬于指令級(jí)并

4、行技標(biāo)量計(jì)算機(jī)上使用的流水加速技術(shù)屬于指令級(jí)并行技術(shù)。術(shù)。 每條指令的處理過(guò)程,可以劃分為取指、譯碼每條指令的處理過(guò)程,可以劃分為取指、譯碼、取數(shù)、運(yùn)算、送結(jié)果、取數(shù)、運(yùn)算、送結(jié)果5 5個(gè)子過(guò)程,也可以分得更個(gè)子過(guò)程,也可以分得更細(xì)或更粗一些。劃分的原則是各部分時(shí)間長(zhǎng)度大細(xì)或更粗一些。劃分的原則是各部分時(shí)間長(zhǎng)度大致相等、并使用致相等、并使用CPUCPU中不同的部件,這樣才有利于中不同的部件,這樣才有利于多任務(wù)重疊處理。多任務(wù)重疊處理?;久~術(shù)語(yǔ)基本名詞術(shù)語(yǔ) 標(biāo)量處理機(jī),超標(biāo)量處理機(jī):標(biāo)量處理機(jī)指只能進(jìn)行標(biāo)量處理機(jī),超標(biāo)量處理機(jī):標(biāo)量處理機(jī)指只能進(jìn)行標(biāo)量運(yùn)算的處理機(jī),超標(biāo)量處理機(jī)指能在一個(gè)時(shí)鐘

5、周標(biāo)量運(yùn)算的處理機(jī),超標(biāo)量處理機(jī)指能在一個(gè)時(shí)鐘周期內(nèi)同時(shí)發(fā)射多條指令的處理機(jī);期內(nèi)同時(shí)發(fā)射多條指令的處理機(jī); 指令級(jí)并行技術(shù):指能使多條指令并行執(zhí)行的技術(shù),指令級(jí)并行技術(shù):指能使多條指令并行執(zhí)行的技術(shù),包括流水技術(shù)、多操作部件技術(shù)和超長(zhǎng)指令字技術(shù);包括流水技術(shù)、多操作部件技術(shù)和超長(zhǎng)指令字技術(shù); 流水線處理機(jī),超流水線處理機(jī):流水線處理機(jī)指用流水線處理機(jī),超流水線處理機(jī):流水線處理機(jī)指用流水作業(yè)方式并行解釋多條指令的處理機(jī),超流水線流水作業(yè)方式并行解釋多條指令的處理機(jī),超流水線處理機(jī)指能在一個(gè)時(shí)鐘周期內(nèi)分時(shí)發(fā)射多條指令的處處理機(jī)指能在一個(gè)時(shí)鐘周期內(nèi)分時(shí)發(fā)射多條指令的處理機(jī);理機(jī); 超長(zhǎng)指令字技術(shù)

6、超長(zhǎng)指令字技術(shù)VLIW:指讓一條指令包含多個(gè)獨(dú)立的:指讓一條指令包含多個(gè)獨(dú)立的操作字段,并且分別控制多個(gè)功能部件并行工作的技操作字段,并且分別控制多個(gè)功能部件并行工作的技術(shù)。術(shù)。 一重疊解釋方式一重疊解釋方式1.1.一條指令的幾個(gè)過(guò)程段一條指令的幾個(gè)過(guò)程段 1 1)取指令:根據(jù))取指令:根據(jù)PCPC(指令計(jì)數(shù)器)從(指令計(jì)數(shù)器)從M M(存儲(chǔ)器)(存儲(chǔ)器)取出指令送到取出指令送到IRIR(指令寄存器)(指令寄存器) 2 2)譯碼分析:譯出指令的操作性質(zhì),準(zhǔn)備好所需)譯碼分析:譯出指令的操作性質(zhì),準(zhǔn)備好所需數(shù)據(jù)數(shù)據(jù) 3 3)執(zhí)行:將準(zhǔn)備好的數(shù)按譯出性質(zhì)進(jìn)行處理,主)執(zhí)行:將準(zhǔn)備好的數(shù)按譯出性質(zhì)進(jìn)

7、行處理,主要涉及要涉及ALUALU(算術(shù)邏輯運(yùn)算部件)(算術(shù)邏輯運(yùn)算部件) 2. 2. 對(duì)指令執(zhí)行的幾種方式對(duì)指令執(zhí)行的幾種方式1 1)順序執(zhí)行)順序執(zhí)行 ( (傳統(tǒng)機(jī)采用傳統(tǒng)機(jī)采用) ) 只有在前一條指令的各過(guò)程段全部完成后,才只有在前一條指令的各過(guò)程段全部完成后,才從存儲(chǔ)器取出下一條指令從存儲(chǔ)器取出下一條指令 2) 僅兩條指令重疊:第僅兩條指令重疊:第i i條指令的執(zhí)行與第條指令的執(zhí)行與第i+1i+1條的取指條的取指重疊。重疊。3) 三條指令重疊:第三條指令重疊:第i i條指令的執(zhí)行與第條指令的執(zhí)行與第i+1i+1條的譯碼及條的譯碼及第第i+2i+2條的取指重疊條的取指重疊。 取 譯 執(zhí)

8、取 譯 執(zhí) i條 i +1條 i條取譯執(zhí) i+1條取譯執(zhí) i+2條取譯執(zhí)i 條取譯執(zhí)取譯執(zhí) i+1條 若一條指令的過(guò)程段劃分更多時(shí),重疊組合方式更多。若一條指令的過(guò)程段劃分更多時(shí),重疊組合方式更多。 重疊解釋并不能加快一條指令的實(shí)現(xiàn),但能加快一段重疊解釋并不能加快一條指令的實(shí)現(xiàn),但能加快一段程序的解釋。程序的解釋。1 1)條件:設(shè)一條指令分為三個(gè)過(guò)程段,各過(guò)程段分別)條件:設(shè)一條指令分為三個(gè)過(guò)程段,各過(guò)程段分別用用t t取取、t t譯譯、t t執(zhí)執(zhí)表示。表示。 執(zhí)行執(zhí)行K K條指令,分別采用順序執(zhí)行、兩條重疊、條指令,分別采用順序執(zhí)行、兩條重疊、三條重疊。三條重疊。假設(shè)假設(shè): :各個(gè)功能段時(shí)間

9、相同各個(gè)功能段時(shí)間相同, ,公式見(jiàn)教材公式見(jiàn)教材P231P231各個(gè)功能段時(shí)間不相同各個(gè)功能段時(shí)間不相同, ,公式見(jiàn)公式見(jiàn)順序執(zhí)行順序執(zhí)行 k k* *(t t取取+t+t譯譯+t+t執(zhí))執(zhí))兩條重疊兩條重疊 t t取取+ k+ k* * t t譯譯+(k-1) +(k-1) * *( t( t取取,t,t執(zhí)執(zhí))max+ t)max+ t執(zhí)執(zhí)三條重疊三條重疊 t t取取+( t+( t譯譯, t, t取取)max+(k-2) )max+(k-2) * *(t t取取,t,t譯譯,t ,t 執(zhí))執(zhí))max+( tmax+( t執(zhí)執(zhí), t, t譯譯)max+ t)max+ t執(zhí)執(zhí)3) 3) 例子例

10、子 當(dāng)當(dāng)k=200k=200,t t取取=3t=3t,t t譯譯=4t=4t,t t執(zhí)執(zhí)=5t=5t,時(shí),分別計(jì)算上述三種執(zhí)行方式的時(shí)間。時(shí),分別計(jì)算上述三種執(zhí)行方式的時(shí)間。 順序執(zhí)行:順序執(zhí)行:200200(3+4+5)=2400t(3+4+5)=2400t 兩條重疊:兩條重疊:3+2003+2004+(200-1)4+(200-1)5+5=1803t5+5=1803t 三條重疊:三條重疊:3+4+(200-2)3+4+(200-2)5+5+5=1007t5+5+5=1007t4 4 重疊方式需要解決的問(wèn)題重疊方式需要解決的問(wèn)題1 1)對(duì)存儲(chǔ)器的頻繁訪問(wèn))對(duì)存儲(chǔ)器的頻繁訪問(wèn) 有哪些訪問(wèn):取指

11、令、取操作有哪些訪問(wèn):取指令、取操作數(shù)、存放執(zhí)行結(jié)果數(shù)、存放執(zhí)行結(jié)果, I/O, I/O通道訪問(wèn)通道訪問(wèn). . 希望存儲(chǔ)器為多體結(jié)構(gòu),以適希望存儲(chǔ)器為多體結(jié)構(gòu),以適應(yīng)多種訪問(wèn)源的需要。應(yīng)多種訪問(wèn)源的需要。 當(dāng)存儲(chǔ)器為單體結(jié)構(gòu)時(shí),需要當(dāng)存儲(chǔ)器為單體結(jié)構(gòu)時(shí),需要將訪問(wèn)源排隊(duì),先后順序?yàn)椋簩⒃L問(wèn)源排隊(duì),先后順序?yàn)椋?取指令、取數(shù)據(jù)、取指令、取數(shù)據(jù)、I/OI/O通道訪問(wèn)、存通道訪問(wèn)、存結(jié)果結(jié)果 先行控制(先行控制(look-ahead)技術(shù)最早在)技術(shù)最早在IBM公司研制的公司研制的STRETCH機(jī)器中采用。目前,許多處理機(jī)中都已經(jīng)采機(jī)器中采用。目前,許多處理機(jī)中都已經(jīng)采用了這種技術(shù),包括超流水處理機(jī)

12、和超標(biāo)量處理機(jī)等。用了這種技術(shù),包括超流水處理機(jī)和超標(biāo)量處理機(jī)等。 先行控制技術(shù)的關(guān)鍵是緩沖技術(shù)和預(yù)處理技術(shù),以及兩先行控制技術(shù)的關(guān)鍵是緩沖技術(shù)和預(yù)處理技術(shù),以及兩者的結(jié)合。者的結(jié)合。 緩沖技術(shù)是在工作速度不固定的兩個(gè)功能部件之間設(shè)置緩沖技術(shù)是在工作速度不固定的兩個(gè)功能部件之間設(shè)置緩沖棧,用以平滑它們的工作。緩沖棧,用以平滑它們的工作。 預(yù)處理技術(shù)是把進(jìn)入運(yùn)算器的指令都處理成寄存器寄預(yù)處理技術(shù)是把進(jìn)入運(yùn)算器的指令都處理成寄存器寄存器(存器(RR型)指令,為進(jìn)入運(yùn)算器的指令準(zhǔn)備好所需要型)指令,為進(jìn)入運(yùn)算器的指令準(zhǔn)備好所需要的全部操作數(shù)的全部操作數(shù)。5.1 5.1 先行控制技術(shù)先行控制技術(shù)采用先

13、行控制方式的處理機(jī)結(jié)構(gòu)采用先行控制方式的處理機(jī)結(jié)構(gòu)2)應(yīng)具有先行控制部件)應(yīng)具有先行控制部件 先行:在重疊操作中,當(dāng)前一條指令在執(zhí)行過(guò)程中先行:在重疊操作中,當(dāng)前一條指令在執(zhí)行過(guò)程中就需要提前取出后面的指令進(jìn)行相應(yīng)處理,這種提就需要提前取出后面的指令進(jìn)行相應(yīng)處理,這種提前取出后繼指令進(jìn)行相應(yīng)處理,稱為先行。前取出后繼指令進(jìn)行相應(yīng)處理,稱為先行。 先行控制部件的主要包括先行控制部件的主要包括 )先行地址站,包括先行指令地址站和先行操作數(shù))先行地址站,包括先行指令地址站和先行操作數(shù)地址站;地址站; )先行指令站,用來(lái)存放多條指令;先行指令站,用來(lái)存放多條指令; )先行操作數(shù)站先行操作數(shù)站,用來(lái)存放

14、多個(gè)操作數(shù);用來(lái)存放多個(gè)操作數(shù); )先行地址形成部件,用來(lái)形成先行指令地址先行地址形成部件,用來(lái)形成先行指令地址 以及先行操作數(shù)地址;以及先行操作數(shù)地址; )先行操作碼譯碼站,用來(lái)完成對(duì)多條指令的先行操作碼譯碼站,用來(lái)完成對(duì)多條指令的 譯碼并保留譯碼輸出狀態(tài)。譯碼并保留譯碼輸出狀態(tài)。 也應(yīng)具有后行部件也應(yīng)具有后行部件 后行部件:對(duì)指令執(zhí)行后的結(jié)果進(jìn)行處理的器件,稱后行部件:對(duì)指令執(zhí)行后的結(jié)果進(jìn)行處理的器件,稱 后行部件。包括:后行部件。包括:后行數(shù)地址站,提供后行數(shù)存放地址。后行數(shù)地址站,提供后行數(shù)存放地址。后行數(shù)站,存放運(yùn)行的結(jié)果,并且,這些結(jié)果需送存后行數(shù)站,存放運(yùn)行的結(jié)果,并且,這些結(jié)果

15、需送存 儲(chǔ)器。儲(chǔ)器。5.2.1 基本思想5.2 流水處理的概念5.2.2 流水技術(shù)流水技術(shù) 流水技術(shù)流水技術(shù):將一個(gè)重復(fù)的時(shí)序過(guò)程分解成為若干個(gè)子:將一個(gè)重復(fù)的時(shí)序過(guò)程分解成為若干個(gè)子過(guò)程,而每個(gè)子過(guò)程都可有效地在其專用功能段上與其過(guò)程,而每個(gè)子過(guò)程都可有效地在其專用功能段上與其他子過(guò)程同時(shí)執(zhí)行。他子過(guò)程同時(shí)執(zhí)行。 時(shí)空?qǐng)D時(shí)空?qǐng)D:從時(shí)間和空間兩個(gè)方面描述了流水線的工作從時(shí)間和空間兩個(gè)方面描述了流水線的工作過(guò)程。時(shí)空?qǐng)D中,橫坐標(biāo)代表時(shí)間,縱坐標(biāo)代表流水過(guò)程。時(shí)空?qǐng)D中,橫坐標(biāo)代表時(shí)間,縱坐標(biāo)代表流水線的各個(gè)段。線的各個(gè)段。 CPU中的各個(gè)部件按流水處理順序連接起來(lái),就稱為一中的各個(gè)部件按流水處理順

16、序連接起來(lái),就稱為一條條流水線流水線。5.2.3 流水線工作原理流水線工作原理流水線方式是把一個(gè)復(fù)雜的過(guò)程分解為若干個(gè)子過(guò)流水線方式是把一個(gè)復(fù)雜的過(guò)程分解為若干個(gè)子過(guò)程,每個(gè)子過(guò)程與其他子過(guò)程同時(shí)進(jìn)行。程,每個(gè)子過(guò)程與其他子過(guò)程同時(shí)進(jìn)行。處理機(jī)解釋程序的方式有順序方式、重疊方式、流處理機(jī)解釋程序的方式有順序方式、重疊方式、流水方式等水方式等 順序方式是解釋完一條指令再開(kāi)始解釋下一條順序方式是解釋完一條指令再開(kāi)始解釋下一條; 流水方式是把一個(gè)重復(fù)的過(guò)程分解為若干個(gè)子過(guò)流水方式是把一個(gè)重復(fù)的過(guò)程分解為若干個(gè)子過(guò)程,每個(gè)子過(guò)程可以與其它子過(guò)程同時(shí)進(jìn)行,以此程,每個(gè)子過(guò)程可以與其它子過(guò)程同時(shí)進(jìn)行,以此

17、提高單位時(shí)間內(nèi)解釋指令的數(shù)目提高單位時(shí)間內(nèi)解釋指令的數(shù)目; 重疊方式是一種簡(jiǎn)單的流水方式,它把指令分成重疊方式是一種簡(jiǎn)單的流水方式,它把指令分成2個(gè)子過(guò)程個(gè)子過(guò)程 每條指令只與下一條指令相重疊每條指令只與下一條指令相重疊。 重疊方式流水線重疊方式流水線當(dāng)分析部件完成上一條指令的當(dāng)分析部件完成上一條指令的“分析分析”后,就立即將之送入后,就立即將之送入執(zhí)行部件,同時(shí)分析部件可以開(kāi)始處理下一條指令。執(zhí)行部件,同時(shí)分析部件可以開(kāi)始處理下一條指令。雖然從執(zhí)行一條指令的全過(guò)程來(lái)看,仍需要雖然從執(zhí)行一條指令的全過(guò)程來(lái)看,仍需要2t的時(shí)間,但從的時(shí)間,但從機(jī)器的輸出端來(lái)看,卻是每隔一個(gè)機(jī)器的輸出端來(lái)看,卻是

18、每隔一個(gè)t就能給出一條指令的執(zhí)就能給出一條指令的執(zhí)行結(jié)果。行結(jié)果。 流水線結(jié)構(gòu)圖 流水線工作時(shí)空?qǐng)D流水線工作時(shí)空?qǐng)D 空間(段號(hào)) 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 16 時(shí)間(拍) (a) 順序方式 空間(段號(hào)) 1 2 3 4 1 2 3 4 10 時(shí)間(拍) (b) 重疊方式 空間(段號(hào)) 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 7 時(shí)間(拍) t (c) 流水方式 圖 3.2 CPU 工作時(shí)空?qǐng)D 5.2.4 5.2.4 流水線的特點(diǎn)流水線的特點(diǎn)流水過(guò)程由多個(gè)相聯(lián)系的子過(guò)程組成,每個(gè)子過(guò)程稱流水過(guò)程由多個(gè)相聯(lián)系的子過(guò)程組成,每個(gè)子過(guò)程稱

19、為流水線的級(jí)或段,段的數(shù)目稱為流水線的深度。為流水線的級(jí)或段,段的數(shù)目稱為流水線的深度。在流水線中處理的必須是連續(xù)任務(wù),只有不斷的提供在流水線中處理的必須是連續(xù)任務(wù),只有不斷的提供任務(wù)才能充分發(fā)揮流水線的效率。任務(wù)才能充分發(fā)揮流水線的效率。把一個(gè)任務(wù)分解為幾個(gè)有聯(lián)系的子任務(wù),每個(gè)子任務(wù)把一個(gè)任務(wù)分解為幾個(gè)有聯(lián)系的子任務(wù),每個(gè)子任務(wù)由一個(gè)專門(mén)的功能部件來(lái)實(shí)現(xiàn)。由一個(gè)專門(mén)的功能部件來(lái)實(shí)現(xiàn)。在流水線的每一個(gè)功能部件的后面都要有一個(gè)緩沖器在流水線的每一個(gè)功能部件的后面都要有一個(gè)緩沖器,用于保存本段的執(zhí)行結(jié)果。,用于保存本段的執(zhí)行結(jié)果。流水線需要有流水線需要有“裝入時(shí)間裝入時(shí)間”和和“排空時(shí)間排空時(shí)間”

20、。5.3 5.3 流水技術(shù)的分類流水技術(shù)的分類1)按各過(guò)程段用時(shí)是否全等劃分)按各過(guò)程段用時(shí)是否全等劃分 均勻流水線:各過(guò)程段用時(shí)全等均勻流水線:各過(guò)程段用時(shí)全等 非均勻流水線:各過(guò)程段用時(shí)不全等(如非均勻流水線:各過(guò)程段用時(shí)不全等(如上圖)上圖) )時(shí)間匹配的均勻流水線。)時(shí)間匹配的均勻流水線。 )時(shí)間不匹配的非均勻流水線。)時(shí)間不匹配的非均勻流水線。 1t2t32t4t2)按處理的數(shù)據(jù)類型)按處理的數(shù)據(jù)類型標(biāo)量流水線:用于對(duì)標(biāo)量數(shù)據(jù)進(jìn)行流水處標(biāo)量流水線:用于對(duì)標(biāo)量數(shù)據(jù)進(jìn)行流水處理。理。向量流水線:用于對(duì)向量數(shù)據(jù)進(jìn)行流水處向量流水線:用于對(duì)向量數(shù)據(jù)進(jìn)行流水處理。(向量很適合流水處理)理。(向

21、量很適合流水處理)3)按流水線的規(guī)模)按流水線的規(guī)模操作流水線:如將一條指令劃分為多個(gè)過(guò)操作流水線:如將一條指令劃分為多個(gè)過(guò)程段進(jìn)行流水處理。規(guī)模最小程段進(jìn)行流水處理。規(guī)模最小指令流水線:以指令為單位進(jìn)行處理,用指令流水線:以指令為單位進(jìn)行處理,用于多進(jìn)程、多任務(wù)。規(guī)模較大于多進(jìn)程、多任務(wù)。規(guī)模較大 宏流水線:以程序的邏輯功能段為單位宏流水線:以程序的邏輯功能段為單位進(jìn)行流水處理。規(guī)模最大進(jìn)行流水處理。規(guī)模最大4)按流水線具有功能的多少)按流水線具有功能的多少 單功能流水線:各過(guò)程段之間固定連接,單功能流水線:各過(guò)程段之間固定連接,不能重新構(gòu)成其它流水線不能重新構(gòu)成其它流水線固定流水線固定流水

22、線 多功能流水線分:多功能流水線分: 靜態(tài)流水線:各過(guò)程段之間可重新連接,靜態(tài)流水線:各過(guò)程段之間可重新連接,但不同時(shí)刻只能重構(gòu)成一種不同的流水線。但不同時(shí)刻只能重構(gòu)成一種不同的流水線。 動(dòng)態(tài)流水線:各過(guò)程段之間可重新連接,動(dòng)態(tài)流水線:各過(guò)程段之間可重新連接,不同時(shí)刻可重構(gòu)成多種流水線。不同時(shí)刻可重構(gòu)成多種流水線。 5)按部件在同一時(shí)刻送出支路數(shù)的多少來(lái)分。)按部件在同一時(shí)刻送出支路數(shù)的多少來(lái)分。一維一維流水線:在同一時(shí)刻,部件只能向流水線:在同一時(shí)刻,部件只能向一個(gè)地方傳送結(jié)果。一個(gè)地方傳送結(jié)果。 陣列流水線:在同一時(shí)刻,部件可同時(shí)陣列流水線:在同一時(shí)刻,部件可同時(shí)向多個(gè)地方傳送結(jié)果。向多個(gè)

23、地方傳送結(jié)果。5.4.5 “5.4.5 “瓶頸瓶頸”問(wèn)題及其解決方法問(wèn)題及其解決方法 瓶頸:瓶頸就是瓶頸:瓶頸就是titi最大的段,它使流水線最大的段,它使流水線“流流速速”減慢。減慢。S1S1S2S2S3S3S4S4tt3t3t tttt 方法方法1 1:再細(xì)分:再細(xì)分 將瓶頸設(shè)備再細(xì)分為下一級(jí)將瓶頸設(shè)備再細(xì)分為下一級(jí)流水線流水線S1S1S2aS2aS2bS2bS2cS2cS3S3S4S4tttttttttttt 方法方法2 2:并行設(shè)置:并行設(shè)置 將瓶頸設(shè)備重復(fù)設(shè)置多套。將瓶頸設(shè)備重復(fù)設(shè)置多套。衡量流水線的主要指標(biāo)有吞吐率,加速比和效率。衡量流水線的主要指標(biāo)有吞吐率,加速比和效率。5.4.

24、1 5.4.1 吞吐率吞吐率TPTP吞吐率(吞吐率(TP ThroughPut)指流水線在單位時(shí)間內(nèi)執(zhí)行的任務(wù)數(shù),)指流水線在單位時(shí)間內(nèi)執(zhí)行的任務(wù)數(shù),可以用輸入任務(wù)數(shù)或輸出任務(wù)數(shù)表示??梢杂幂斎肴蝿?wù)數(shù)或輸出任務(wù)數(shù)表示。 其中其中k表示流水線劃分的段數(shù)。表示流水線劃分的段數(shù)。 當(dāng)滿足當(dāng)滿足 條件時(shí),有條件時(shí),有 。5.4 5.4 線性流水線性能分析線性流水線性能分析kTnTP ttitknTk) 1( S4 1 2 3 4 N-1 N S3 1 2 3 4 N-1 N S2 1 2 3 4 N-1 N S1 1 2 3 4 N-1 N 時(shí)間 KT (N-1)T NT (K-1)T Tk 流水線產(chǎn)

25、生流水線產(chǎn)生n n個(gè)結(jié)果所需要的時(shí)間:個(gè)結(jié)果所需要的時(shí)間: 實(shí)際吞吐率實(shí)際吞吐率: 最大吞吐率:最大吞吐率: 最大吞吐率與實(shí)際吞吐率的關(guān)系:最大吞吐率與實(shí)際吞吐率的關(guān)系:(1 1)流水線各段的執(zhí)行時(shí)間相等流水線各段的執(zhí)行時(shí)間相等(1 )kTknt(1 )nT Pkntm a x1(1 )nnT PL imtknt m a x(1 )nT PT Pkn 實(shí)際吞吐率:實(shí)際吞吐率: 最大吞吐率:最大吞吐率: (2 2) 流水線各段的執(zhí)行時(shí)間不等流水線各段的執(zhí)行時(shí)間不等121(1) m ax(,)kikiT Ptntttn12m axm ax(,)1kT Pttt5.4.2 5.4.2 加速比(即吞吐

26、率之比,)加速比(即吞吐率之比,)koTTS kiiotnT1不使用流水線所用的時(shí)間與使用流水線所用的時(shí)間之比不使用流水線所用的時(shí)間與使用流水線所用的時(shí)間之比一般表示:一般表示:s=Ts=T0 0/T/TK K其中其中 實(shí)際加速比:實(shí)際加速比:最大加速比:最大加速比:(1)1kntknSkntkn m a x(1 )nknSL imkkn kiiotnT1段效率:,各段平均效率:其中 表示第i段設(shè)備量占整條流水線全部設(shè)備量的百分比當(dāng)滿足 條件(即等長(zhǎng)、等權(quán))時(shí),有:5.4.3 5.4.3 效率(設(shè)備利用率)效率(設(shè)備利用率)kiiTtnEkiiiEE1)(kttii1和ikSTkTtTknEk

27、Ekikikoiki11)(1上式指出,S=Ek,就是說(shuō)當(dāng)效率達(dá)到100%時(shí),流水方式(一個(gè)任務(wù)/t)吞吐率為順序方式(一個(gè)任務(wù)/(kt))的k倍。實(shí)際效率:實(shí)際效率:最大效率:最大效率:(1)1kntnEkkntkn max11nnELimkn瓶頸問(wèn)題用兩種方法改進(jìn)后的效率瓶頸問(wèn)題用兩種方法改進(jìn)后的效率和吞吐率和吞吐率靜態(tài)雙功能流水線的效率與吞吐率 教材P241非線性流水線的吞吐率和效率 教材P291 5.5 5.5 流水線中的相關(guān)流水線中的相關(guān)相關(guān)的定義:相關(guān)的定義: 流水線中的相關(guān)是指相鄰或相近的指令因存在某種關(guān)聯(lián),流水線中的相關(guān)是指相鄰或相近的指令因存在某種關(guān)聯(lián),后面的指令不能在原指定

28、的時(shí)鐘周期開(kāi)始執(zhí)行。后面的指令不能在原指定的時(shí)鐘周期開(kāi)始執(zhí)行。一般來(lái)說(shuō),流水線中的相關(guān)主要分為如下三種類型:一般來(lái)說(shuō),流水線中的相關(guān)主要分為如下三種類型:結(jié)構(gòu)相關(guān):當(dāng)硬件資源滿足不了指令重疊執(zhí)行的要求,結(jié)構(gòu)相關(guān):當(dāng)硬件資源滿足不了指令重疊執(zhí)行的要求,而發(fā)生資源沖突時(shí),就發(fā)生了結(jié)構(gòu)相關(guān)。而發(fā)生資源沖突時(shí),就發(fā)生了結(jié)構(gòu)相關(guān)。數(shù)據(jù)相關(guān):當(dāng)一條指令需要用到前面指令的執(zhí)行結(jié)果,數(shù)據(jù)相關(guān):當(dāng)一條指令需要用到前面指令的執(zhí)行結(jié)果,而這些指令均在流水線中重疊執(zhí)行時(shí),就可能引起數(shù)據(jù)而這些指令均在流水線中重疊執(zhí)行時(shí),就可能引起數(shù)據(jù)相關(guān)。相關(guān)。 3. 3. 控制相關(guān):當(dāng)流水線遇到分支指令和其它能夠改變控制相關(guān):當(dāng)流水

29、線遇到分支指令和其它能夠改變 PC PC 值的指令時(shí),就會(huì)發(fā)生控制相關(guān)。值的指令時(shí),就會(huì)發(fā)生控制相關(guān)。 一旦流水線中出現(xiàn)相關(guān),必然會(huì)給指令在流水線中一旦流水線中出現(xiàn)相關(guān),必然會(huì)給指令在流水線中的順利執(zhí)行帶來(lái)許多問(wèn)題,如果不能很好地解決的順利執(zhí)行帶來(lái)許多問(wèn)題,如果不能很好地解決相關(guān)問(wèn)題,輕則影響流水線的性能,重則導(dǎo)致錯(cuò)相關(guān)問(wèn)題,輕則影響流水線的性能,重則導(dǎo)致錯(cuò)誤的執(zhí)行結(jié)果。消除相關(guān)的基本方法是讓流水線誤的執(zhí)行結(jié)果。消除相關(guān)的基本方法是讓流水線暫停執(zhí)行某些指令,而繼續(xù)執(zhí)行其它一些指令。暫停執(zhí)行某些指令,而繼續(xù)執(zhí)行其它一些指令。 在后面的討論中,我們約定:當(dāng)一條指在后面的討論中,我們約定:當(dāng)一條指令

30、被暫停時(shí),在該暫停指令之后發(fā)射的所有指令令被暫停時(shí),在該暫停指令之后發(fā)射的所有指令都要被暫停,而在該暫停之前發(fā)射的指令則可繼都要被暫停,而在該暫停之前發(fā)射的指令則可繼續(xù)進(jìn)行,在暫停期間,流水線不會(huì)取新的指令續(xù)進(jìn)行,在暫停期間,流水線不會(huì)取新的指令。 5.5.1 5.5.1 結(jié)構(gòu)相關(guān)結(jié)構(gòu)相關(guān)如果某些指令組合在流水線中重疊執(zhí)行時(shí),產(chǎn)如果某些指令組合在流水線中重疊執(zhí)行時(shí),產(chǎn)生資源沖突,則稱該流水線有結(jié)構(gòu)相關(guān)。為了生資源沖突,則稱該流水線有結(jié)構(gòu)相關(guān)。為了能夠在流水線中順利執(zhí)行指令的所有可能組合,能夠在流水線中順利執(zhí)行指令的所有可能組合,而不發(fā)生結(jié)構(gòu)相關(guān),通常需要采用流水化功能而不發(fā)生結(jié)構(gòu)相關(guān),通常需要

31、采用流水化功能單元的方法或資源重復(fù)的方法。單元的方法或資源重復(fù)的方法。 許多流水線機(jī)器都是將數(shù)據(jù)和指令保存在同一存儲(chǔ)許多流水線機(jī)器都是將數(shù)據(jù)和指令保存在同一存儲(chǔ)器中。如果在某個(gè)時(shí)鐘周期內(nèi),流水線既要完成器中。如果在某個(gè)時(shí)鐘周期內(nèi),流水線既要完成某條指令對(duì)數(shù)據(jù)的存儲(chǔ)器訪問(wèn)操作,又要完成取某條指令對(duì)數(shù)據(jù)的存儲(chǔ)器訪問(wèn)操作,又要完成取指令的操作,那么將會(huì)發(fā)生存儲(chǔ)器訪問(wèn)沖突問(wèn)題指令的操作,那么將會(huì)發(fā)生存儲(chǔ)器訪問(wèn)沖突問(wèn)題 產(chǎn)生結(jié)構(gòu)相關(guān)。為了解決這個(gè)問(wèn)題,可以讓流水產(chǎn)生結(jié)構(gòu)相關(guān)。為了解決這個(gè)問(wèn)題,可以讓流水線完成前一條指令對(duì)數(shù)據(jù)的存儲(chǔ)器訪問(wèn)時(shí),暫停線完成前一條指令對(duì)數(shù)據(jù)的存儲(chǔ)器訪問(wèn)時(shí),暫停取后一條指令的操作

32、。該周期稱為流水線的一個(gè)取后一條指令的操作。該周期稱為流水線的一個(gè)暫停周期。暫停周期一般也稱為流水線氣泡,或暫停周期。暫停周期一般也稱為流水線氣泡,或簡(jiǎn)稱為簡(jiǎn)稱為“氣泡氣泡”。在流水線中插入暫停周期可以。在流水線中插入暫停周期可以消除這種結(jié)構(gòu)相關(guān)。消除這種結(jié)構(gòu)相關(guān)。 結(jié)構(gòu)相關(guān)舉例訪存沖突結(jié)構(gòu)相關(guān)舉例訪存沖突 為為消除結(jié)構(gòu)相關(guān)插入流水氣泡消除結(jié)構(gòu)相關(guān)插入流水氣泡 時(shí)空?qǐng)D來(lái)表示暫停情況時(shí)空?qǐng)D來(lái)表示暫停情況分析分析 為消除結(jié)構(gòu)相關(guān)而引入的暫停將影響流水線為消除結(jié)構(gòu)相關(guān)而引入的暫停將影響流水線的性能。為了避免結(jié)構(gòu)相關(guān),可以考慮采用資的性能。為了避免結(jié)構(gòu)相關(guān),可以考慮采用資源重復(fù)的方法。比如,在流水線機(jī)

33、器中設(shè)置相源重復(fù)的方法。比如,在流水線機(jī)器中設(shè)置相互獨(dú)立的指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器;也可以將互獨(dú)立的指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器;也可以將 Cache Cache 分割成指令分割成指令 Cache Cache 和數(shù)據(jù)和數(shù)據(jù) CacheCache。 假設(shè)不考慮流水線其它因素對(duì)流水線性能的假設(shè)不考慮流水線其它因素對(duì)流水線性能的影響,顯然如果流水線機(jī)器沒(méi)有結(jié)構(gòu)相關(guān),那么影響,顯然如果流水線機(jī)器沒(méi)有結(jié)構(gòu)相關(guān),那么其其 CPI CPI 也較小。然而,為什么有時(shí)流水線設(shè)計(jì)者也較小。然而,為什么有時(shí)流水線設(shè)計(jì)者卻允許結(jié)構(gòu)相關(guān)的存在呢?主要有兩個(gè)原因:一卻允許結(jié)構(gòu)相關(guān)的存在呢?主要有兩個(gè)原因:一是為了減少硬件代價(jià),二

34、是為了減少功能單元的是為了減少硬件代價(jià),二是為了減少功能單元的延遲。如果為了避免結(jié)構(gòu)相關(guān)而將流水線中的所延遲。如果為了避免結(jié)構(gòu)相關(guān)而將流水線中的所有功能單元完全流水化,或者設(shè)置足夠的硬件資有功能單元完全流水化,或者設(shè)置足夠的硬件資源,那么所帶來(lái)的硬件代價(jià)必定很大。源,那么所帶來(lái)的硬件代價(jià)必定很大。 5.5.2 5.5.2 數(shù)據(jù)相關(guān)數(shù)據(jù)相關(guān)當(dāng)指令在流水線中重疊執(zhí)行時(shí),流水線有可能改變指令當(dāng)指令在流水線中重疊執(zhí)行時(shí),流水線有可能改變指令讀讀/寫(xiě)操作數(shù)的順序,使得讀寫(xiě)操作數(shù)的順序,使得讀/寫(xiě)操作順序不同于它們非寫(xiě)操作順序不同于它們非流水實(shí)現(xiàn)的順序,這將導(dǎo)致數(shù)據(jù)相關(guān)。流水實(shí)現(xiàn)的順序,這將導(dǎo)致數(shù)據(jù)相關(guān)。

35、 ADD R1,R2,R3SUBR4,R5,R1AND R6,R1,R7ORR8,R1,R9XORR10,R1, R11 ADD ADD指令后的所有指令都要用到指令后的所有指令都要用到ADDADD指指令的計(jì)算結(jié)果,令的計(jì)算結(jié)果,ADD ADD 指令在指令在 WB WB 段才將計(jì)段才將計(jì)算結(jié)果寫(xiě)入寄存器算結(jié)果寫(xiě)入寄存器 R1 R1 中,但是中,但是 SUB SUB 指令指令在其在其 ID ID 段就要從寄存器段就要從寄存器 R1 R1 中讀取該計(jì)中讀取該計(jì)算結(jié)果,這種情況就叫做數(shù)據(jù)相關(guān)。除非算結(jié)果,這種情況就叫做數(shù)據(jù)相關(guān)。除非有措施防止這一情況出現(xiàn),否則有措施防止這一情況出現(xiàn),否則 SUB SU

36、B 指令指令讀到的是錯(cuò)誤的值。所以,為了保證上述讀到的是錯(cuò)誤的值。所以,為了保證上述指令序列的正確執(zhí)行,流水線只好暫停指令序列的正確執(zhí)行,流水線只好暫停 ADD ADD 指令之后的所有指令,直到指令之后的所有指令,直到 ADD ADD 指令指令將計(jì)算結(jié)果寫(xiě)入寄存器將計(jì)算結(jié)果寫(xiě)入寄存器 R1 R1 之后,再啟動(dòng)之后,再啟動(dòng) ADD ADD 指令之后的指令繼續(xù)執(zhí)行。指令之后的指令繼續(xù)執(zhí)行。 數(shù)據(jù)相關(guān)舉例數(shù)據(jù)相關(guān)舉例例子分析例子分析 從上圖還可以看到,從上圖還可以看到, AND AND 指令同樣也將受到這種相關(guān)關(guān)指令同樣也將受到這種相關(guān)關(guān)系的影響。系的影響。 ADD ADD 指令只有到第五個(gè)時(shí)鐘周期

37、末尾才能結(jié)束對(duì)指令只有到第五個(gè)時(shí)鐘周期末尾才能結(jié)束對(duì)寄存器寄存器 R1 R1 的寫(xiě)操作,所以的寫(xiě)操作,所以 AND AND 指令在第四個(gè)時(shí)鐘周期從寄指令在第四個(gè)時(shí)鐘周期從寄存器存器 R1 R1 中讀出的值也是錯(cuò)誤的。而中讀出的值也是錯(cuò)誤的。而 XOR XOR 指令則可以正常操指令則可以正常操作,因?yàn)樗窃诘诹鶄€(gè)時(shí)鐘周期讀寄存器作,因?yàn)樗窃诘诹鶄€(gè)時(shí)鐘周期讀寄存器 R1 R1 的內(nèi)容。的內(nèi)容。另外,利用流水線的一種簡(jiǎn)單技術(shù),可以使流水線順利另外,利用流水線的一種簡(jiǎn)單技術(shù),可以使流水線順利執(zhí)行執(zhí)行 OR OR 指令。這種技術(shù)就是:在流水線中,約定在時(shí)鐘周指令。這種技術(shù)就是:在流水線中,約定在時(shí)鐘周

38、期的后半部分進(jìn)行寄存器文件的讀操作,而在時(shí)鐘周期的前期的后半部分進(jìn)行寄存器文件的讀操作,而在時(shí)鐘周期的前半部分進(jìn)行寄存器文件的寫(xiě)操作。在圖中,我們將寄存器文半部分進(jìn)行寄存器文件的寫(xiě)操作。在圖中,我們將寄存器文件的邊框適當(dāng)?shù)禺?huà)成虛線來(lái)表示這種技術(shù)。件的邊框適當(dāng)?shù)禺?huà)成虛線來(lái)表示這種技術(shù)。通過(guò)定向技術(shù)減少數(shù)據(jù)相關(guān)帶來(lái)的暫停通過(guò)定向技術(shù)減少數(shù)據(jù)相關(guān)帶來(lái)的暫停數(shù)據(jù)相關(guān)問(wèn)題可以采用一種稱為定向(也稱為旁數(shù)據(jù)相關(guān)問(wèn)題可以采用一種稱為定向(也稱為旁路或短路)的簡(jiǎn)單技術(shù)來(lái)解決路或短路)的簡(jiǎn)單技術(shù)來(lái)解決 。定向技術(shù)的主要。定向技術(shù)的主要思想是:在某條指令(如圖中的思想是:在某條指令(如圖中的 ADD ADD 指令

39、)產(chǎn)生指令)產(chǎn)生一個(gè)計(jì)算結(jié)果之前,其它指令(如圖中的一個(gè)計(jì)算結(jié)果之前,其它指令(如圖中的 SUB SUB 和和 AND AND 指令)并不真正需要該計(jì)算結(jié)果,如果能夠指令)并不真正需要該計(jì)算結(jié)果,如果能夠?qū)⒃撚?jì)算結(jié)果從其產(chǎn)生的地方(寄存器文件將該計(jì)算結(jié)果從其產(chǎn)生的地方(寄存器文件 EX/MEMEX/MEM)直接送到其它指令需要它的地方()直接送到其它指令需要它的地方(ALU ALU 的輸入寄存器),那么就可以避免暫停的輸入寄存器),那么就可以避免暫停. . 基于這種考慮,定向技術(shù)的要點(diǎn)可以歸納基于這種考慮,定向技術(shù)的要點(diǎn)可以歸納為:為: 寄存器文件寄存器文件 EX/MEM EX/MEM 中的中

40、的 ALU ALU 的運(yùn)算結(jié)果總的運(yùn)算結(jié)果總是回送到是回送到 ALU ALU 的輸入寄存器;的輸入寄存器;當(dāng)定向硬件檢測(cè)到前一個(gè)當(dāng)定向硬件檢測(cè)到前一個(gè) ALU ALU 運(yùn)算結(jié)果的寫(xiě)運(yùn)算結(jié)果的寫(xiě)入寄存器就是當(dāng)前入寄存器就是當(dāng)前 ALU ALU 操作的源寄存器時(shí),操作的源寄存器時(shí),那么控制邏輯將前一個(gè)那么控制邏輯將前一個(gè) ALU ALU 運(yùn)算結(jié)果定向到運(yùn)算結(jié)果定向到 ALU ALU 的輸入端,后一個(gè)的輸入端,后一個(gè) ALU ALU 操作就不必從源操作就不必從源寄存器中讀取操作數(shù)。寄存器中讀取操作數(shù)。 流水線中的指令所需要的定向結(jié)果可能并流水線中的指令所需要的定向結(jié)果可能并不僅僅是前一條指令的計(jì)算結(jié)

41、果,而且還不僅僅是前一條指令的計(jì)算結(jié)果,而且還有可能是前面與其不相鄰指令的計(jì)算結(jié)果有可能是前面與其不相鄰指令的計(jì)算結(jié)果采用定向技術(shù)消除數(shù)據(jù)相關(guān)采用定向技術(shù)消除數(shù)據(jù)相關(guān)定向技術(shù)的推廣定向技術(shù)的推廣上述定向技術(shù)可以推廣到更一般的情況,可以將上述定向技術(shù)可以推廣到更一般的情況,可以將一個(gè)結(jié)果直接傳送到所有需要它的功能單元。也一個(gè)結(jié)果直接傳送到所有需要它的功能單元。也就是說(shuō),一個(gè)結(jié)果不僅可以從某一功能單元的輸就是說(shuō),一個(gè)結(jié)果不僅可以從某一功能單元的輸出定向到其自身的輸入,而且還可以從某一功能出定向到其自身的輸入,而且還可以從某一功能單元的輸出定向到其它功能單元的輸入單元的輸出定向到其它功能單元的輸入

42、。前面的一些數(shù)據(jù)相關(guān)的實(shí)例均是有關(guān)寄存器操作前面的一些數(shù)據(jù)相關(guān)的實(shí)例均是有關(guān)寄存器操作數(shù)的,但是數(shù)據(jù)相關(guān)也有可能發(fā)生在一對(duì)指令對(duì)數(shù)的,但是數(shù)據(jù)相關(guān)也有可能發(fā)生在一對(duì)指令對(duì)存儲(chǔ)器同一單元進(jìn)行讀寫(xiě)的時(shí)候。不過(guò),本章僅存儲(chǔ)器同一單元進(jìn)行讀寫(xiě)的時(shí)候。不過(guò),本章僅討論有關(guān)寄存器的數(shù)據(jù)相關(guān)。討論有關(guān)寄存器的數(shù)據(jù)相關(guān)。到數(shù)據(jù)存儲(chǔ)器和到數(shù)據(jù)存儲(chǔ)器和ALUALU的定向路徑的定向路徑數(shù)據(jù)相關(guān)分類數(shù)據(jù)相關(guān)分類根據(jù)指令對(duì)寄存器的讀寫(xiě)順序,可以將數(shù)據(jù)相關(guān)分為三根據(jù)指令對(duì)寄存器的讀寫(xiě)順序,可以將數(shù)據(jù)相關(guān)分為三類。習(xí)慣上,這些相關(guān)是根據(jù)流水線所必須保持的訪問(wèn)類。習(xí)慣上,這些相關(guān)是根據(jù)流水線所必須保持的訪問(wèn)順序來(lái)命名的??紤]

43、流水線中的兩條指令順序來(lái)命名的。考慮流水線中的兩條指令 i i 和和 j j ,且,且 i i 在在 j j 之前進(jìn)入流水線,由此可能帶來(lái)的數(shù)據(jù)相關(guān)有:之前進(jìn)入流水線,由此可能帶來(lái)的數(shù)據(jù)相關(guān)有: 寫(xiě)后讀相關(guān)(寫(xiě)后讀相關(guān)(Read After Write,RAW):):j 的執(zhí)行要的執(zhí)行要用到用到 i 的計(jì)算結(jié)果,當(dāng)它們?cè)诹魉€中重疊執(zhí)行時(shí),的計(jì)算結(jié)果,當(dāng)它們?cè)诹魉€中重疊執(zhí)行時(shí),j 可能在可能在 i 寫(xiě)入其計(jì)算結(jié)果之前就先行對(duì)保存該結(jié)果的寄寫(xiě)入其計(jì)算結(jié)果之前就先行對(duì)保存該結(jié)果的寄存器進(jìn)行讀操作,從而得到錯(cuò)誤的值。這是最常見(jiàn)的存器進(jìn)行讀操作,從而得到錯(cuò)誤的值。這是最常見(jiàn)的一種數(shù)據(jù)相關(guān),采用定向技

44、術(shù)消除的數(shù)據(jù)相關(guān)就屬于一種數(shù)據(jù)相關(guān),采用定向技術(shù)消除的數(shù)據(jù)相關(guān)就屬于這種類型。這種類型。 寫(xiě)后寫(xiě)相關(guān)(寫(xiě)后寫(xiě)相關(guān)(Write After WriteWrite After Write,WAWWAW):):j j 和和 i i 的目的寄存器相同,當(dāng)它們?cè)诹魉€中重疊執(zhí)的目的寄存器相同,當(dāng)它們?cè)诹魉€中重疊執(zhí)行時(shí),行時(shí),j j 可能在可能在 i i 寫(xiě)入其計(jì)算結(jié)果之前就先行對(duì)寫(xiě)入其計(jì)算結(jié)果之前就先行對(duì)該結(jié)果寄存器進(jìn)行寫(xiě)操作,從而導(dǎo)致寫(xiě)入順序錯(cuò)該結(jié)果寄存器進(jìn)行寫(xiě)操作,從而導(dǎo)致寫(xiě)入順序錯(cuò)誤,在目的寄存器中留下的是誤,在目的寄存器中留下的是 i i 寫(xiě)入的值,而不寫(xiě)入的值,而不是是 j j 寫(xiě)入的值。寫(xiě)

45、入的值。如果在流水線中不只一個(gè)段可以進(jìn)行寫(xiě)操作,或如果在流水線中不只一個(gè)段可以進(jìn)行寫(xiě)操作,或者當(dāng)流水線暫停某條指令時(shí),允許該指令之后的者當(dāng)流水線暫停某條指令時(shí),允許該指令之后的指令繼續(xù)前進(jìn),就可能會(huì)產(chǎn)生這種類型的數(shù)據(jù)相指令繼續(xù)前進(jìn),就可能會(huì)產(chǎn)生這種類型的數(shù)據(jù)相關(guān)。關(guān)。 讀后寫(xiě)相關(guān)(讀后寫(xiě)相關(guān)(Write After ReadWrite After Read,WARWAR):):j j 可可能在能在 i i 讀取某個(gè)源寄存器的內(nèi)容之前就先對(duì)該寄讀取某個(gè)源寄存器的內(nèi)容之前就先對(duì)該寄存器進(jìn)行寫(xiě)操作,導(dǎo)致存器進(jìn)行寫(xiě)操作,導(dǎo)致 i i 后來(lái)讀取到的值是錯(cuò)誤后來(lái)讀取到的值是錯(cuò)誤的。的。需要暫停的數(shù)據(jù)相關(guān)需

46、要暫停的數(shù)據(jù)相關(guān)前面我們討論了如何利用定向技術(shù)消除由于數(shù)據(jù)相關(guān)帶前面我們討論了如何利用定向技術(shù)消除由于數(shù)據(jù)相關(guān)帶來(lái)的暫停。但是,并不是所有數(shù)據(jù)相關(guān)帶來(lái)的暫停都可來(lái)的暫停。但是,并不是所有數(shù)據(jù)相關(guān)帶來(lái)的暫停都可以通過(guò)定向技術(shù)消除。以通過(guò)定向技術(shù)消除。對(duì)數(shù)據(jù)相關(guān)的編譯器調(diào)度方法對(duì)數(shù)據(jù)相關(guān)的編譯器調(diào)度方法流水線常常會(huì)遇到許多種類型的暫停。比如,采用典型的代碼流水線常常會(huì)遇到許多種類型的暫停。比如,采用典型的代碼生成方法對(duì)生成方法對(duì)A=BC這種常用的表達(dá)式進(jìn)行處理,可以得到如圖這種常用的表達(dá)式進(jìn)行處理,可以得到如圖所示的指令序列。從圖中可以看出,在所示的指令序列。從圖中可以看出,在 ADD 指令的流水

47、過(guò)程中指令的流水過(guò)程中必須插入一個(gè)暫停時(shí)鐘周期,以保證變量必須插入一個(gè)暫停時(shí)鐘周期,以保證變量C的讀入值有效。既然的讀入值有效。既然定向無(wú)法消除指令序列中所包含的這種暫停,那么能否讓編譯定向無(wú)法消除指令序列中所包含的這種暫停,那么能否讓編譯器在進(jìn)行代碼生成時(shí)就消除這些潛在的暫停呢?器在進(jìn)行代碼生成時(shí)就消除這些潛在的暫停呢?指令級(jí)調(diào)度指令級(jí)調(diào)度實(shí)際上,編譯器的確可以通過(guò)重新組織代碼順序來(lái)消除實(shí)際上,編譯器的確可以通過(guò)重新組織代碼順序來(lái)消除這種暫停。通常稱這種重新組織代碼順序消除暫停的技這種暫停。通常稱這種重新組織代碼順序消除暫停的技術(shù)為流水線調(diào)度(術(shù)為流水線調(diào)度(pipeline schedul

48、ingpipeline scheduling)或指令調(diào)度)或指令調(diào)度(instruction schedulinginstruction scheduling)。)。 5.5.3 5.5.3 控制相關(guān)控制相關(guān)在流水線上執(zhí)行分支指令時(shí),在流水線上執(zhí)行分支指令時(shí),PC 值有兩種可能值有兩種可能的變化情況。一種是的變化情況。一種是 PC 值發(fā)生改變(為分支轉(zhuǎn)值發(fā)生改變(為分支轉(zhuǎn)移的目標(biāo)地址);一種是移的目標(biāo)地址);一種是 PC 值保持正常。如果值保持正常。如果一條分支指令將一條分支指令將PC值改變?yōu)榉种мD(zhuǎn)移的目標(biāo)地值改變?yōu)榉种мD(zhuǎn)移的目標(biāo)地址,那么我們稱分支轉(zhuǎn)移成功;如果分支轉(zhuǎn)移址,那么我們稱分支轉(zhuǎn)移

49、成功;如果分支轉(zhuǎn)移條件不成立,條件不成立,PC 值保持正常,我們稱分支轉(zhuǎn)移值保持正常,我們稱分支轉(zhuǎn)移失敗。失敗。處理分支指令最簡(jiǎn)單的方法是:一旦在流水線中處理分支指令最簡(jiǎn)單的方法是:一旦在流水線中檢測(cè)到某條指令是分支指令,就暫停執(zhí)行該分支檢測(cè)到某條指令是分支指令,就暫停執(zhí)行該分支指令之后的所有指令,直到分支指令到達(dá)流水線指令之后的所有指令,直到分支指令到達(dá)流水線的的 MEM 段,確定了新的段,確定了新的 PC 值為止。我們當(dāng)然值為止。我們當(dāng)然不希望流水線還沒(méi)有確定某條指令是分支指令之不希望流水線還沒(méi)有確定某條指令是分支指令之前就暫停執(zhí)行指令,所以對(duì)分支指令而言,當(dāng)流前就暫停執(zhí)行指令,所以對(duì)分支

50、指令而言,當(dāng)流水線完成其譯碼操作(水線完成其譯碼操作(ID段)之后才會(huì)暫停執(zhí)行段)之后才會(huì)暫停執(zhí)行其后繼指令。其后繼指令。根據(jù)上述處理分支指令的方法,可以得到如根據(jù)上述處理分支指令的方法,可以得到如圖所示流水線時(shí)空?qǐng)D圖所示流水線時(shí)空?qǐng)D 。從圖中可以看出,在流水。從圖中可以看出,在流水線中插入了兩個(gè)暫停周期,當(dāng)分支指令在線中插入了兩個(gè)暫停周期,當(dāng)分支指令在 MEM 段確定新的段確定新的 PC 值后,流水線作廢分支直接后繼值后,流水線作廢分支直接后繼指令的指令的 IF 周期(相當(dāng)于一個(gè)暫停周期),按照周期(相當(dāng)于一個(gè)暫停周期),按照新的有效新的有效 PC 值取指令。值取指令。減少分支暫停時(shí)鐘周期數(shù)

51、減少分支暫停時(shí)鐘周期數(shù)減少流水線處理分支指令時(shí)的暫停時(shí)鐘周期數(shù)有如下減少流水線處理分支指令時(shí)的暫停時(shí)鐘周期數(shù)有如下兩種途徑:兩種途徑:在流水線中盡早判斷出分支轉(zhuǎn)移是否成功;在流水線中盡早判斷出分支轉(zhuǎn)移是否成功;盡早計(jì)算出分支轉(zhuǎn)移成功時(shí)的盡早計(jì)算出分支轉(zhuǎn)移成功時(shí)的 PC 值(即分支的目值(即分支的目標(biāo)地址)。標(biāo)地址)。 為了優(yōu)化處理分支指令,在流水線中應(yīng)該同時(shí)為了優(yōu)化處理分支指令,在流水線中應(yīng)該同時(shí)采用上述兩條途徑,缺一不可。即使知道分支轉(zhuǎn)移采用上述兩條途徑,缺一不可。即使知道分支轉(zhuǎn)移的目標(biāo)地址,而不知道分支轉(zhuǎn)移是否成功對(duì)減少暫的目標(biāo)地址,而不知道分支轉(zhuǎn)移是否成功對(duì)減少暫停是徒勞的;知道分支轉(zhuǎn)移

52、是否成功,而不知道分停是徒勞的;知道分支轉(zhuǎn)移是否成功,而不知道分支轉(zhuǎn)移的目標(biāo)地址,同樣對(duì)降低分支損失毫無(wú)幫助。支轉(zhuǎn)移的目標(biāo)地址,同樣對(duì)降低分支損失毫無(wú)幫助。下面讓我們看看如何基于這些思想,從硬件上改進(jìn)下面讓我們看看如何基于這些思想,從硬件上改進(jìn)流水線,達(dá)到降低分支損失的目的。流水線,達(dá)到降低分支損失的目的。在流水線中,分支指令通常需要測(cè)試分支條件寄在流水線中,分支指令通常需要測(cè)試分支條件寄存器的值是否為存器的值是否為0,所以可以把測(cè)試分支條件寄,所以可以把測(cè)試分支條件寄存器的操作移到存器的操作移到 ID 段完成,從而使得在段完成,從而使得在 ID 周期周期末就完成分支轉(zhuǎn)移成功與否的檢測(cè)。末就完

53、成分支轉(zhuǎn)移成功與否的檢測(cè)。另外,由于要盡早計(jì)算出兩個(gè)另外,由于要盡早計(jì)算出兩個(gè) PC 值(分支值(分支轉(zhuǎn)移成功和失敗時(shí)的轉(zhuǎn)移成功和失敗時(shí)的 PC 值),也可以將計(jì)算分值),也可以將計(jì)算分支目標(biāo)地址的操作移到支目標(biāo)地址的操作移到 ID 段完成。為此,需要段完成。為此,需要在在 ID 段增設(shè)一個(gè)加法器(注意,為了避免結(jié)構(gòu)段增設(shè)一個(gè)加法器(注意,為了避免結(jié)構(gòu)相關(guān),不能用相關(guān),不能用EX段的段的 ALU 功能部件來(lái)計(jì)算分支功能部件來(lái)計(jì)算分支轉(zhuǎn)移目標(biāo)地址)。下圖是對(duì)流水線進(jìn)行上述改進(jìn)轉(zhuǎn)移目標(biāo)地址)。下圖是對(duì)流水線進(jìn)行上述改進(jìn)后的流水線數(shù)據(jù)通路。容易看出,基于上述改進(jìn)后的流水線數(shù)據(jù)通路。容易看出,基于上述

54、改進(jìn)后的流水線數(shù)據(jù)通路,處理分支指令只需要一個(gè)后的流水線數(shù)據(jù)通路,處理分支指令只需要一個(gè)時(shí)鐘周期的暫停。時(shí)鐘周期的暫停。減少分支暫停時(shí)鐘周期數(shù)減少分支暫停時(shí)鐘周期數(shù)降低流水線分支損失的方法有許多種。前面論降低流水線分支損失的方法有許多種。前面論述了改進(jìn)流水線硬件減少流水線暫停周期的方述了改進(jìn)流水線硬件減少流水線暫停周期的方法。這里主要從編譯技術(shù)的角度,論述四種降法。這里主要從編譯技術(shù)的角度,論述四種降低流水線分支損失的簡(jiǎn)單方法。首先需要說(shuō)明低流水線分支損失的簡(jiǎn)單方法。首先需要說(shuō)明的是,這些方法對(duì)分支轉(zhuǎn)移成功與否進(jìn)行的預(yù)的是,這些方法對(duì)分支轉(zhuǎn)移成功與否進(jìn)行的預(yù)測(cè)都是靜態(tài)的,并在整個(gè)程序的執(zhí)行過(guò)程

55、中保測(cè)都是靜態(tài)的,并在整個(gè)程序的執(zhí)行過(guò)程中保持這種預(yù)測(cè)結(jié)論,即:要么總是認(rèn)為分支轉(zhuǎn)移持這種預(yù)測(cè)結(jié)論,即:要么總是認(rèn)為分支轉(zhuǎn)移成功,要么總是認(rèn)為分支轉(zhuǎn)移失敗。成功,要么總是認(rèn)為分支轉(zhuǎn)移失敗。凍結(jié)(凍結(jié)(freezefreeze)或排空()或排空(flushflush)流水線的方法)流水線的方法在流水線中,處理分支最簡(jiǎn)單的方法是凍結(jié)或在流水線中,處理分支最簡(jiǎn)單的方法是凍結(jié)或排空流水線,保持或清除流水線在分支指令之排空流水線,保持或清除流水線在分支指令之后讀入的任何指令,直到知道分支指令的目標(biāo)后讀入的任何指令,直到知道分支指令的目標(biāo)地址以及分支轉(zhuǎn)移是否成功為止。這種方法優(yōu)地址以及分支轉(zhuǎn)移是否成功為止

56、。這種方法優(yōu)點(diǎn)在于其對(duì)硬件和軟件的要求都十分簡(jiǎn)單,我點(diǎn)在于其對(duì)硬件和軟件的要求都十分簡(jiǎn)單,我們前面采用的就是這種方法。們前面采用的就是這種方法。預(yù)測(cè)分支失敗的方法預(yù)測(cè)分支失敗的方法 如果流水線采用預(yù)測(cè)分支失敗的方法處理分支如果流水線采用預(yù)測(cè)分支失敗的方法處理分支指令,那么當(dāng)流水線譯碼到一條分支指令時(shí),流水指令,那么當(dāng)流水線譯碼到一條分支指令時(shí),流水線繼續(xù)取指令,并允許該分支指令后的指令繼續(xù)在線繼續(xù)取指令,并允許該分支指令后的指令繼續(xù)在流水線中流動(dòng)。當(dāng)流水線確定分支轉(zhuǎn)移成功與否以流水線中流動(dòng)。當(dāng)流水線確定分支轉(zhuǎn)移成功與否以及分支的目標(biāo)地址之后,如果分支轉(zhuǎn)移成功,流水及分支的目標(biāo)地址之后,如果分支

57、轉(zhuǎn)移成功,流水線必須將在分支指令之后取出的所有指令轉(zhuǎn)化為空線必須將在分支指令之后取出的所有指令轉(zhuǎn)化為空操作,并在分支的目標(biāo)地址處重新取出有效的指令;操作,并在分支的目標(biāo)地址處重新取出有效的指令;如果分支轉(zhuǎn)移失敗,那么可以將分支指令看作是一如果分支轉(zhuǎn)移失敗,那么可以將分支指令看作是一條普通指令,流水線正常流動(dòng),無(wú)需將在分支指令條普通指令,流水線正常流動(dòng),無(wú)需將在分支指令之后取出的所有指令轉(zhuǎn)化為空操作。之后取出的所有指令轉(zhuǎn)化為空操作。預(yù)測(cè)分支成功的方法預(yù)測(cè)分支成功的方法另一種降低流水線分支損失的方法便是預(yù)測(cè)分另一種降低流水線分支損失的方法便是預(yù)測(cè)分支成功,一旦流水線譯碼到一條指令是分支指支成功,一

58、旦流水線譯碼到一條指令是分支指令,且完成了分支目標(biāo)地址的計(jì)算,我們就假令,且完成了分支目標(biāo)地址的計(jì)算,我們就假設(shè)分支轉(zhuǎn)移成功,并開(kāi)始在分支目標(biāo)地址處取設(shè)分支轉(zhuǎn)移成功,并開(kāi)始在分支目標(biāo)地址處取指令執(zhí)行。指令執(zhí)行。 在某些流水線中,特別是那些具有隱含在某些流水線中,特別是那些具有隱含設(shè)置條件碼或分支條件更復(fù)雜指令的流水線機(jī)設(shè)置條件碼或分支條件更復(fù)雜指令的流水線機(jī)器中,在確定分支轉(zhuǎn)移成功與否之前,便可以器中,在確定分支轉(zhuǎn)移成功與否之前,便可以知道分支的目標(biāo)地址,這時(shí)采用這種方法便可知道分支的目標(biāo)地址,這時(shí)采用這種方法便可以降低這些流水線的分支損失。以降低這些流水線的分支損失。 4.4.延遲分支(延遲

59、分支(delayed branchdelayed branch)方法)方法 為降低流水線分支損失而采用的第四種方法就是延遲分為降低流水線分支損失而采用的第四種方法就是延遲分支方法。其主要思想是從邏輯上支方法。其主要思想是從邏輯上“延長(zhǎng)延長(zhǎng)”分支指令的執(zhí)行時(shí)分支指令的執(zhí)行時(shí)間。延遲長(zhǎng)度為間。延遲長(zhǎng)度為 n n 的分支指令的執(zhí)行順序是:的分支指令的執(zhí)行順序是: 分支指令分支指令 順序后繼指令順序后繼指令1 1順序后繼指令順序后繼指令 n n如果分支成功,分支目標(biāo)處指令如果分支成功,分支目標(biāo)處指令 所有順序后繼指令都處于分支延遲槽(所有順序后繼指令都處于分支延遲槽(branch-branch-del

60、ay slotsdelay slots)中,無(wú)論分支成功與否,流水線都會(huì)執(zhí)行這些)中,無(wú)論分支成功與否,流水線都會(huì)執(zhí)行這些指令。指令。 基于延遲分支方法,無(wú)論分支成功與基于延遲分支方法,無(wú)論分支成功與否,其流水線時(shí)空?qǐng)D所描述的流水線的行否,其流水線時(shí)空?qǐng)D所描述的流水線的行為是類似的,流水線中均沒(méi)有插入暫停周為是類似的,流水線中均沒(méi)有插入暫停周期,從而極大地降低了流水線分支損失。期,從而極大地降低了流水線分支損失。從圖中可以看出,實(shí)際上是處于分支延遲從圖中可以看出,實(shí)際上是處于分支延遲槽中的指令槽中的指令“掩蓋掩蓋”了流水線原來(lái)所必需了流水線原來(lái)所必需插入的暫停周期。插入的暫停周期。5.6 5.

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論