計算機指令-流水線和吞吐率

  • 2021 年 6 月 28 日
  • 筆記

流水線

我們把計算機的一條指令抽象成三個步驟(實際不止這些)

 

 現在向計算機發送三條指令A,B,C,如果不採用流水線的方式傳輸,那麼在每個機器周期中的執行步驟如下圖所示(我們假設每個步驟都會耗費一個機器周期):

採用流水線的方式傳輸如下圖所示:

 

 對比上面兩張圖,我們可以看出,流水線是一種准並行處理技術:

第1個機器周期:處理A指令的取指步驟

第2個機器周期:處理A指令的分析步驟,同時也在處理B指令的取指步驟

以此類推,我們可以看出,同一機器周期只允許處理不同的步驟,不能處理相同的步驟,這樣在保證指令安全的同時也可以加快處理速度,提升了效率,這就是流水線帶來的好處

 

吞吐率

流水線理解了,吞吐率就好說了,這裡的吞吐率指的是流水線的吞吐率,簡單理解吞吐率就是通過數值來反應計算的處理速度,先列個公式:吞吐率 = 指令條數 / 流水線時間

指令條數:需要計算吞吐率的指令的總數

流水線時間:這裡的流水線時間指的並不是一個指令流水線花費的時間,而是跑完公式中指定的指令條數所需要的時間,對比上面兩個圖,一條指定所需要耗費的流水線時間是3個機器周期,而跑完ABC三條指令耗費的流水線時間是5個機器周期,對於流水線時間,有個計算公式:一條指令流水線所需要耗費的時間   + (指令條數 – 1)* 一條流水線中最耗時的步驟時間

吞吐率一般分為實際吞吐率和最大吞吐率,下面我從兩個案例來分別講述:

  實際吞吐率

  

    按照上面的公式,指令條數為8條,流水線時間=(1+2+3+1) + (8-1) * 3=28,結果就顯而易見是C了 

  

   最大吞吐率

  

 

 

 

   我們列個一元二次方程,設最大吞吐率為y,指令條數為x,按照上面的公式y=x /((2+1+3+1+2) + (x-1)* 3),簡化下就是y=x / (3x + 6)=1 / 3 – 2 / (3x-6),x為正整數,當x趨於無窮大的時候,y的最大值為1/3

 大家想要更加詳細的了解其中的原理,可以參考://blog.csdn.net/yi_zz/article/details/7479912

用通俗易懂的語言闡述複雜的概念,學無止境,共勉前進!!!