【计算机系统】指令流水线
前言 ??????
????????流水線是指在程序執(zhí)行時(shí)多條指令重疊進(jìn)行操作的一種準(zhǔn)并行處理實(shí)現(xiàn)技術(shù)。各部件同時(shí)處理是針對(duì)不同指令而言的,比如說,指令流水線把一條指令分為取指、分析和執(zhí)行3部分,可以同時(shí)處理取指和分析,但是不能同時(shí)處理一個(gè)部分,如不能同時(shí)處理取指操作。
????????指令流水線是將指令執(zhí)行分成幾個(gè)子過程,每一個(gè)子過程對(duì)應(yīng)一個(gè)工位,我們稱之為流水級(jí)或流水節(jié)拍,如下圖所示。該工位在計(jì)算機(jī)中就是可以重疊工作(相同時(shí)間同時(shí)工作)的功能部件,稱為流水部件。流水線要求所有指令在每個(gè)部件上執(zhí)行的時(shí)間是一樣的。在流水線中,機(jī)器周期的長(zhǎng)度由最慢的流水級(jí)部件處理子過程所需的時(shí)間來決定。
????????IF部件、ID部件、EX部件、WD部件可同時(shí)都執(zhí)行有操作,每條指令按圖中一步步執(zhí)行。在部件執(zhí)行操作的過程中,允許上一個(gè)指令進(jìn)入,它只能等待當(dāng)前指令操作執(zhí)行完成后方可進(jìn)入此部件。
????????流水線這種可同時(shí)為多條指令的不同部件進(jìn)行工作的方式,提高了各部件的利用率和指令的平均執(zhí)行速度。它是怎么提高利用率的呢?下面看兩個(gè)圖來分析。
???????從圖2可以看到,任意一個(gè)系統(tǒng)時(shí)間都有大量的設(shè)備處于空閑狀態(tài),例如第一個(gè)時(shí)間段有ID、EX、WB空閑,則第二個(gè)時(shí)間段有IF、EX、WB空閑。
???????從圖3可以看到,系統(tǒng)空閑的時(shí)間只是執(zhí)行第一條指令的時(shí)候有,后面就都沒有了,大大提升系統(tǒng)資源的利用率及整個(gè)系統(tǒng)的吞吐量。
計(jì)算流水線執(zhí)行時(shí)間:?Nt+(k-1)*▲t。
???????假定有某種類型的任務(wù),共分成N個(gè)子任務(wù),執(zhí)行每個(gè)子任務(wù)需要時(shí)間t,則完成該任務(wù)所需時(shí)間為Nt。若以傳統(tǒng)的串行方式,則完成K個(gè)任務(wù)所需時(shí)間為KNt;而使用流水線技術(shù)執(zhí)行,時(shí)間是Nt+(k-1)t。我們可以根據(jù)圖3加以理解,第一個(gè)任務(wù)需要完整的時(shí)間,余下任務(wù)開始周期執(zhí)行,然后根據(jù)最慢的流水部件得出周期,再乘以(總指令數(shù)-1)就得到任務(wù)的執(zhí)行總時(shí)間了。
兩個(gè)術(shù)語
????????流水線的吞吐率:任務(wù)數(shù)/完成時(shí)間。如:在流水線執(zhí)行方式下,完成3個(gè)任務(wù)花費(fèi)了6s,則此流水線的吞吐率為3/6,等于0.5。
????????加速比:不采用流水線的執(zhí)行時(shí)間/采用流水線的執(zhí)行時(shí)間。如:圖2和圖3,執(zhí)行兩個(gè)任務(wù),采用流水線的執(zhí)行時(shí)間為5s,不采用流水線的執(zhí)行時(shí)間為8s,則加速比為8/5。
影響流水線的主要因素
???????流水線的關(guān)鍵在于同一時(shí)間軸,多個(gè)部件同時(shí)執(zhí)行,因此如果這個(gè)條件不能得到滿足,則流水線就會(huì)被破壞。這種破壞主要來自以下3種情況:轉(zhuǎn)移指令、共享資源訪問的沖突、響應(yīng)中斷。
思考
???????在學(xué)習(xí)流水線的時(shí)候,不太明白為什么是最慢的那一個(gè)決定流水線的周期,所以我做了一個(gè)假設(shè)來判斷周期,步驟如下:
???????我們先假設(shè)t2所需時(shí)間最長(zhǎng),第一條指令用F表示,第二條指令用S表示,則有:
???????①F執(zhí)行完A階段后,S開始執(zhí)行A階段,此時(shí)歷時(shí)為t1 秒。
???????②F執(zhí)行B階段執(zhí)行了t1秒后,S等待。F執(zhí)行完B階段后,S開始執(zhí)行B階段,此時(shí)已經(jīng)歷時(shí)t1+t2秒。
???????③F執(zhí)行完C階段后,S執(zhí)行了在B階段執(zhí)行了t3秒,此時(shí)已經(jīng)歷時(shí)t1+t2+t3秒。
???????④S執(zhí)行又執(zhí)行了(t2-t3)+ t3 = t2秒后,完成整個(gè)過程。
???????可知,因?yàn)榱魉€是同一時(shí)間軸的,S執(zhí)行完后的時(shí)間點(diǎn)減去F執(zhí)行完后的時(shí)間點(diǎn)就是周期,也就是我們得出來的t2。所以說,周期還得看最慢的流水部件。
總結(jié)
???????計(jì)算時(shí)間的時(shí)候要清楚一點(diǎn),就是時(shí)間軸就同一個(gè),就能看明白計(jì)算的過程了。注意兩個(gè)術(shù)語的意思,吞吐率和加速比。
————————————————
版權(quán)聲明:本文為CSDN博主「琚建飛」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/gnd15732625435/article/details/53034354
總結(jié)
以上是生活随笔為你收集整理的【计算机系统】指令流水线的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tensorflow随笔-读取图像文件数
- 下一篇: 单行文字、多行文字溢出时省略号表示的多种