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