1

我們在機器上執行以下指令如何查找流水線機器的執行時間?

如果機器是流水線式的,則需要大約200 ps * 3 = 600 ps。

如果流水線機器運行1,000,003條指令,我希望執行時間是多少?它是1,000,000 * 200 ps + 600 ps?

+2

@ Yvette不,國際海事組織,這是一個非常多的計算機工程,計算機體系結構,計算機編程問題。任何人都會採用mips asm,希望能夠爲管道規劃獲得最佳性能。 –

+0

@CraigEstey是的,沒關係。我不確定SuperU是否進入了這個方面。謝謝。 –

回答

2

該圖適用於經典的5級MIPS流水線架構。現代芯片使用超標量設計,但我們忽略[至少現在]。

這裏的問題是,該圖顯示了各種類型的指令[對於每個T狀態T1-T5]的時間,但是沒有示例程序要執行,除非該圖也是循環的示例。如果是這樣,繼續...

另一個問題是管道「危險」。也就是說,特定指令的特定階段(T狀態)必須「停頓」,因爲它取決於先前指令的輸出。例如:

L1: add $t1,$t2,$t3 
L2: add $t6,$t4,$t1 

第二個指令必須拖延其「寄存器讀取」(T2),因爲它必須等待前一指令的「寄存器寫入」(T5)階段的完成,完成,[因爲它需要最終值爲$t1]。

因此,而不是像一個討人喜歡管道:

1:  L1:T1 
2:  L1:T2  L2:T1 
3:  L1:T3  L2:T2 
4:  L1:T4  L2:T3 
5:  L1:T5  L2:T4 
6:     L2:T5 

我們結束:

1:  L1:T1 
2:  L1:T2  L2:T1 
3:  L1:T3  L2:stall 
4:  L1:T4  L2:stall 
5:  L1:T5  L2:stall 
6:     L2:T2 
7:     L2:T3 
8:     L2:T4 
9:     L2:T5 

在現代的實現,也有建築技術,以避免這種情況(例如,「轉發」,亂序執行),但是我們必須知道特定的體系結構實現,以瞭解它具有哪些工具來緩解危害。


我最好的猜測如下...

再次,如果我們忽視的危害,我們需要一個特定的程序/順序上做了計算。

如果我們假設程序是圖表,對於1,000,000條指令,其循環迭代次數爲1,000,000/4250,000。而且...我們也忽略了分支延遲槽。

爲一個循環迭代中的時序圖的樣子:

label inst start exec end 
       time time time 
----- ---- ----- ---- ---- 

L1:  lw  0  800  800 
L2:  sw  200  700  900 
L3:  R  400  600  1000 
L4:  beq  600  500  1100 

注意,L4之前完成所有指令一樣。所以,主導時間是L4的結束時間。因此,250,000 * 1100 ps或275 us,或多或少。


UPDATE:

但是我的教授告訴我答案爲100萬* 200 PS + 1400個PS

那麼,你應該[顯然;-)]相信你的教授不是我[我確實強調「猜測」]。

但是,我們再次必須知道實現:分支預測等。在第1個循環中,假設第1個循環中的L1不能啓動,直到循環1中的L4完成。

如果循環/序列被完全展開[和沒有分支],如lw, sw, R, R重複25萬次,它1,000,000 * 200 ps,IMO。

我認爲教授的分析假定L1的T1爲環2可以就併發與L4的T2 for循環1.

一個例子有用序列可以是memmove序列重疊源/目的地[寄存器已經預設]:

L1:  lw  $t0,4($t1) 
L2:  sw  $t0,0($t1) 
L3:  addu $t1,$t1,$t2 
L4:  bne  $t1,$t3,L1 

再次,這假定沒有分支延遲槽。爲了使這項工作他們只是追加nop,序列將L1, L2, L4, L3

不過,我只是重讀小字:這種計算假設多路複用器,控制單元,PC訪問,並且符號擴展單元沒有延遲。

因此,這可能是爲什麼存在/有差異的關鍵。如果有疑問,再次相信你的教授。

+0

但我的教授告訴我答案是1,000,000 * 200 ps + 1400 ps –