流水線衝突的型別有哪些?


流水線是一種將順序過程分解成小的片段或子操作的技術。每個子程式的執行發生在一個特定的專用段中,該段與所有其他段一起工作。流水線衝突主要有三種類型:

資源衝突

這些衝突是由於資源不足引起的,在這種情況下,無法重疊操作。流水線處理器的效能取決於以下兩種情況:

  • 功能單元是否流水線化?
  • 多個執行單元是否允許流水線中所有可用的指令組合?

如果對於特定組合,流水線停滯以避免資源衝突,則存在結構性冒險。

如果兩條指令需要同時使用給定的硬體資源,則會發生結構性冒險。這種冒險最常見的情況是資源請求記憶體。

考慮一種情況,其中一條指令需要訪問記憶體以儲存結果,而另一條指令正在被提取。如果指令和資料位於同一個快取單元中,則只有一條指令可以繼續執行,另一條指令將被延遲。為了避免這種衝突,許多處理器使用單獨的指令快取和資料快取。

資料相關衝突

當流水線中的指令依賴於先前指令的結果,而這些指令仍在流水線中尚未執行時,就會出現這些衝突。

當指令的源運算元或目標運算元在流水線中的預期時間不可用時,流水線就會停滯。這種情況被稱為資料冒險或資料衝突。

考慮一個程式,其中包含兩條指令 I1 和 I2。當此程式在流水線中執行時,這兩條指令的執行是併發進行的。如果 I1 和 I2 的結果相互依賴,則 I1 的結果可能無法用於 I2 的執行。

分支難題

當分支和其他指令更改程式計數器的內容時,就會遇到這種難題。有兩種分支:條件分支和無條件分支。條件分支可能導致也可能不導致分支,但無條件分支總是導致分支。這種難題被稱為控制冒險。

在流水線過程中,可以遵循以下關鍵操作來處理控制冒險:

  • 及時檢測分支指令
  • 提前計算分支地址
  • 對於條件分支指令,提前測試分支條件(結果)。

更新於:2021年7月27日

12K+ 瀏覽量

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.