流水線衝突的型別有哪些?
流水線是一種將順序過程分解成小的片段或子操作的技術。每個子程式的執行發生在一個特定的專用段中,該段與所有其他段一起工作。流水線衝突主要有三種類型:
資源衝突
這些衝突是由於資源不足引起的,在這種情況下,無法重疊操作。流水線處理器的效能取決於以下兩種情況:
- 功能單元是否流水線化?
- 多個執行單元是否允許流水線中所有可用的指令組合?
如果對於特定組合,流水線停滯以避免資源衝突,則存在結構性冒險。
如果兩條指令需要同時使用給定的硬體資源,則會發生結構性冒險。這種冒險最常見的情況是資源請求記憶體。
考慮一種情況,其中一條指令需要訪問記憶體以儲存結果,而另一條指令正在被提取。如果指令和資料位於同一個快取單元中,則只有一條指令可以繼續執行,另一條指令將被延遲。為了避免這種衝突,許多處理器使用單獨的指令快取和資料快取。
資料相關衝突
當流水線中的指令依賴於先前指令的結果,而這些指令仍在流水線中尚未執行時,就會出現這些衝突。
當指令的源運算元或目標運算元在流水線中的預期時間不可用時,流水線就會停滯。這種情況被稱為資料冒險或資料衝突。
考慮一個程式,其中包含兩條指令 I1 和 I2。當此程式在流水線中執行時,這兩條指令的執行是併發進行的。如果 I1 和 I2 的結果相互依賴,則 I1 的結果可能無法用於 I2 的執行。
分支難題
當分支和其他指令更改程式計數器的內容時,就會遇到這種難題。有兩種分支:條件分支和無條件分支。條件分支可能導致也可能不導致分支,但無條件分支總是導致分支。這種難題被稱為控制冒險。
在流水線過程中,可以遵循以下關鍵操作來處理控制冒險:
- 及時檢測分支指令
- 提前計算分支地址
- 對於條件分支指令,提前測試分支條件(結果)。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP