# Superscalar and dynamic pipelining ## Multiple Issue Static multiple issue 和Dynamic multiple issue 是現代電腦處理器中用於提高性能的兩種技術。 * Static multiple issue: 在Static multiple issue中,編譯器負責將可以同時執行的指令進行分組。這些指令然後被打包到“發行插槽”中,這些插槽代表處理器可以同時發行的指令數量。編譯器檢測並避免發生危害,即某個指令由於依賴於前一個指令的結果而無法進行。通過仔細的指令調度和分配,編譯器旨在最大程度地利用處理器的資源。 * Dynamic multiple issue: 在Dynamic multiple issue中,處理器本身 Dynamic地檢查指令流,並決定每個周期發布哪些指令。這個決定是基於各種因素,包括資源的可用性、指令之間的依賴關係以及處理器的當前狀態。編譯器可以通過重新排序指令來幫助這個過程,以減少依賴關係並提高並行執行的潛力。在運行時,CPU使用先進的技術來解決危害,例如無序執行、推測和依賴跟蹤。 #### 比較: Static multiple issue主要依賴於編譯器的優化和指令調度,這些工作在編譯階段完成。處理器按照編譯器分組的指令執行。 Dynamic multiple issue將更多的決策權交給處理器本身,使其能夠適應程序執行的 Dynamic性。這可能會導致更有效的資源利用,但需要更複雜的硬體支援來重新排序指令和解決依賴關係。 ## Speculation 推測是一種處理指令的方法,它「猜測」該指令應該做什麼。這樣可以盡快開始操作,然後檢查猜測是否正確: 如果猜測正確,則完成操作。 如果猜測錯誤,則回滾並執行正確的操作。 這種方法在 Static 和 Dynamic多重發行中都很常見。以下是一些例子: 對分支結果進行推測:如果實際執行的路徑與預測的不同,則進行回滾。 對加載進行推測:如果加載的位置在後續有更新,則進行回滾。 編譯器和硬體的推測是針對指令執行的兩種不同方式: * 編譯器推測: * 編譯器可以重新排序指令,例如將加載指令放在分支指令之前。 * 它可以包含「修正」指令,以從不正確的推測中恢復。 * 硬體推測: * 硬體可以提前查找要執行的指令,並將結果緩存直到確定實際需要它們為止。 * 在不正確的推測時,硬體可以清空緩存,以確保不會使用錯誤的結果。 當在一個被推測執行的指令上發生異常時,可能會引發一些問題: * Static 推測: * 在 Static 推測中,可以通過新增指令集架構(ISA)支持來推遲異常的發生。這意味著在執行推測指令時,當檢測到異常情況時,不立即處理異常,而是將其標記為待處理狀態,直到確定這個指令是實際執行的。如果最終確定執行該指令,則會處理異常;如果不執行,則可以丟棄標記的異常。 * Dynamic 推測: * 在 Dynamic 推測中,當異常發生在一個推測執行的指令上時,可以將異常緩存,直到該指令的執行完成。然而,由於 Dynamic推測可能導致指令的執行順序與程序控制流的實際執行順序不一致,因此可能永遠不會執行完該指令,導致異常無法被處理。在這種情況下,需要機制來檢測並適當地處理這些未處理的異常。 Static multiple issue是指編譯器將指令分組成“發行封包”的過程: * 發行封包是一組指令,它們可以在同一個時脈周期內發布。 * 發行封包的組成取決於所需的流水線資源。 * 可以將發行封包想象為一個非常長的指令: * 它指定了多個並行操作。 * 因此,這種概念類似於非常長指令字(VLIW)架構。 ## Scheduling Static Multiple Issue 在進行靜態多重發行的調度時,編譯器必須處理以下問題: * 消除危害(Hazards):編譯器必須移除或解決指令之間的相依關係,以確保在發行封包中不存在相依關係。這可以透過重新排序指令來實現,將相依關係低的指令放在同一個發行封包中或者不同的發行封包中。 * 發布封包內部無相依性:在每個發布封包內部,指令之間不應該存在相依關係。這意味著在同一個發布封包中的指令應該是獨立的,可以並行執行。 * 可能的跨封包相依性:雖然在發布封包內部沒有相依關係,但可能會存在跨封包的相依關係。在某些指令集架構中,跨封包的相依關係是允許的,但在其他架構中可能是不允許的。編譯器必須了解目標指令集架構的規範,以確保正確處理跨封包相依性。 * 必要時填充 nop 指令:為了保持發布封包的結構完整性,有時候可能需要在指令之間插入 nop(No Operation)指令。這些 nop 指令可以填充空間或等待其他指令的完成。
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.