3

考慮與問題一VLIW處理器寬度等於Ñ:這意味着它能夠啓動同時Ñ操作,所以每個超長指令可以由最多N操作組成。超長指令,其由操作的具有不同延遲

假設VLIW處理器加載超長指令其由操作具有不同的等待時間:屬於相同超長指令操作可以在不同的時間結束。如果某個操作在屬於相同的很長的指令的其他操作之前完成其執行,會發生什麼情況?在執行當前很長指令的剩餘操作之前,後續操作(即屬於下一個很長指令的操作)是否可以開始執行?還是非常長的指令等待所有操作的完成屬於當前的非常長的指令

+0

你有沒有一個特定的ISA例子? – 2012-07-11 15:34:43

+0

不,我想知道後續非常長的指令的讀取 - 解碼 - 執行步驟是否嚴格順序。例如,當一個操作完成它的執行時,它釋放一個資源:該資源是否保存直到完成整個_very long指令_?或者是否可以在管道中輸入屬於下一個_very long指令的操作來代替完成的操作? – enzom83 2012-07-11 16:09:46

回答

1

VLIW背後的想法是,編譯器會爲處理器並行執行很多操作,並將它們打包在名爲「非常長的指令字」的捆綁包中。 Amhdahl定律告訴我們並行程序(例如,VLIW指令的並行部分)的加速受到最慢部分(例如,最長持續時間子指令)的限制。

VLIW和「長時間延遲」的簡單答案是「不要混合使用不同延遲的子指令」。實際的答案是VLIW機器儘量不要有不同延遲的子指令;理想情況下,你想要「一個時鐘」的子指令。通常,即使內存提取由於被分爲「存儲器提取開始(這裏是一個要提取的地址)」只有一個時鐘,其中唯一的可變延遲子指令是「等待先前提取到達」,想法是編譯器會盡可能多地生成其他計算,以便其他指令能夠監視內存讀取延遲。

+0

簡言之,編譯器應該避免混合具有不同延遲的子指令,因爲VLIW指令的並行部分受最慢的子指令限制。我理解你正確嗎? – enzom83 2012-07-11 16:18:56

+1

一般。它的真正含義是,如果你有一個很長的延遲指令,那麼只需要在下一步完成,試着只爲這個特定的數據包添加其他相等或更短的延遲指令。一般來說,如果您有短暫的延遲指令來填充數據包,請這樣做。如果您有一組長時間延遲指令,您只需執行一些操作即可獲得進度,那麼可以將短延遲指令打包,直到用完爲止,然後打包長時間延遲指令,這些指令無法再避免: - } – 2012-07-11 20:41:11

2

我見過的大多數VLIW處理器都支持具有不同延遲的操作。

編譯器需要調度這些指令,並確保操作數在操作執行前可用。一個VLIW處理器是 愚蠢的,並且不檢查操作之間的任何依賴關係。當執行一個長字指令 時,字中的每個操作只是簡單地從寄存器 文件中讀取其輸入數據,並將其結果寫回到同一週期的末尾,或者如果操作需要兩個或三個週期,則將其寫回。

這隻適用於指令是確定性的,並且總是採用相同的週期數。我見過的所有VLIW體系結構的操作都是固定的循環次數,不能少於,不多於 。如果它們需要更長的時間,比如 實例是外部存儲器提取,那麼整個機器就會停滯不前。

現在有一個關鍵的事情是限制具有不同延遲的指令調度:到寄存器文件的端口數。端口是操作的寄存器文件和執行單元之間的連接。 在VLIW處理器中,每個操作都在一個發行插槽中執行,並且每個發行插槽 都有其自己的端口連接到寄存器文件。端口在硬件方面是昂貴的。 端口越多,實現寄存器文件所需的硅就越多。

現在考慮下面的情況,其中兩個週期的操作要在同一時間爲一個週期的操作, 在後馬上安排其 結果寫入寄存器文件。現在有一個衝突,因爲兩個操作都希望 通過相同的端口寫入相同的寄存器文件。再次,編譯器的任務 確保不會發生。在許多VLIW體系結構中,在相同問題槽中執行的操作數 都具有相同的延遲。這避免了這種衝突。

現在回答你的問題:

你說:「如果在手術前屬於同一超長指令等 操作完成它的執行,會發生什麼?」

沒有什麼特別的事情發生。處理器只是繼續執行下一個非常長的指令字 。

你說過:「在執行當前非常長的指令的其餘操作 之前,後續操作(屬於 下一個非常長的指令的操作)是否可以開始執行?

是的,但是這可能會在稍後出現註冊端口衝突。這取決於編譯器 以防止這種情況。

你說過:「或者是否有很長的指令等待所有屬於當前非常長的指令的所有 操作的完成?

不需要。每個週期的處理器只需進入下一個非常長的指令 字。有一個例外,那就是當一個操作比正常時間長 ,例如因爲有一個高速緩存未命中,然後管道 停滯,並且機器不會繼續下一個長指令字。

+0

它也可能是注意到在一些經典的VLIW中,稍後的指令可以讀取與先前的高延遲指令要寫入的寄存器相關的舊值。 – 2013-06-09 00:28:29