2015-10-28 39 views
2

我必須創建一個執行以下MIPS代碼的管線圖。這是一個5階段管道。 muldiv指令都使用4條執行指令。報價爲MUL指令分配試圖瞭解創建MIPS管線圖

這意味着乘法指令通過流水線運行過程如下:F-D-X0-X1-X2-X3-M-W,並且一次也許在飛行多達四個乘法指令。所有其他指令類型在執行階段被阻止,而任何乘法階段正在使用。

和DIV

這意味着除法指令通過流水線運行過程如下:F-D-X0-X0-X0-X0-M-W。所有其他指令都在執行階段被阻止。

這是MIPS代碼。

xor $r0, $r0, $r0 
addiu $r1, $r0, 10 
j L1 
loop: 
    lw $r3, 0($r2) 
    mul $r4, $r3, $r3 
    mul $r3, $r3, $r1 
    addiu $r0, $r0, 1 
    div $r3, $r4, $r3 
    sw $r3, 0($r2) 
    addiu $r2, $r2, 4 
L1: 
bne $r0, $r1, -8 

全問題我來回答此是:

問:通過循環的第一次迭代繪製表示MIPS代碼的執行的流水線圖(表),沒有繞過。 假設數據危害和結構危害 只使用拖延解決。假定處理器假定分支不被採用,直到它們被解決。 整個計劃的CPI是多少?

這裏是我的了:

MIPS Pipeline Diagram

我最大的障礙來自於試圖理解做什麼,當它來到跳轉指令。正如你所看到的,我只是像往常一樣去做生意,但我知道這很可能是完全錯誤的。我相當有信心,我正確處理了muldiv之後的說明,這只是j L1指令,我對此沒有信心,因爲我沒有示例可以參考。雖然我假設我只是把總週期除以指令的數量,但CPI是一個後來的想法?所以在這種情況下,它會是(32 cycles)/(11 instructions)那麼CPI = 2.91

謝謝你的時間。

+0

我會回答這個問題,因爲我認爲這個問題很好。但我認爲你的MIPS代碼是錯誤的。它跳轉到「L1」,然後在退回「-8」的'bne'線無限循環。 –

+0

@Konrad這只是給出的例子,代碼直接從作業中複製。瞭解它的第一次迭代就夠了。除非另有說明,否則如果存在任何循環,我們所有的分配一直基於第一次迭代。感謝您的幫助。 – user5496677

+0

沒錯。但第一次迭代顯然不符合你的想法。 'mul'指令永遠不會運行。 –

回答

1

在回答您的問題之前,您應該首先了解分支預測。分支可能會導致您從新位置獲取數據,或繼續按照正常方式繼續提取數據。等待分支條件來解決你應該從中獲取的地址經常導致拖延並浪費一些週期。爲了克服處理器使用分支預測或推測,他們假定分支採取或不採取,並繼續基於這個假設獲取和執行。一旦分支條件得到解決,處理器就知道它的假設是正確的還是錯誤的,如果它是正確的,你繼續正常執行,並且你節省了一些寶貴的週期而不是拖延。如果假設結果是錯誤的,則將錯誤地執行的指令從流水線中清除,並且通常與停止等待分支解決的情況相同。更好的分支預測算法具有更高的正確猜測是否分支的概率。

正如你在你的問題

陳述假設處理器假設分支不採取,直到它們被解決。

您的處理器使用靜態分支預測。它總是假定分支不被採用。如果發現該假設是錯誤的,則從流水線中清除指令。

這適用於分支但不跳轉,因爲只有分支依賴於條件。跳躍無條件地執行並且不預測。所以執行該跳轉指令後,您應該直接從L1繼續。