Atiitt 流水線停頓問題與解決方法
?
1. 流水線技術方式分類 1
2. 但在實際中,會出現2種情況使流水線停頓下來或不能啟動: 2
2.1. 1、多個任務在同一時間周期內爭用同一個流水段 2
2.2. 數據依賴。 2
3. 處理器流水線中的沖突 2
3.1. 7.1?流水線中的資源沖突 2
3.2. 7.2?流水線中的數據沖突 3
4. 為了能夠盡可能的減少流水線停頓帶來的性能損失,可以使用“動態(tài)調度”的方法 3
?
?
1.?流水線技術方式分類
3、按連接的方式分類:
靜態(tài)流水線:同一時間內,多功能結構只能按一種功能的連接方式工作。
動態(tài)流水線:同一時間內,可以有多種功能的連接方式同時工作。
4、按處理的數據類型分類:
標量流水線:一般數據
向量流水線:矢量數據。X+Y=Z每一個代表一維數據。
5、流水線結構上分類:
線性流水線:指各功能模塊順序串行連接,無反饋回路,如前面介紹的。
非線性流水線:帶有反饋回路的流水線。
?
?
?
2.?但在實際中,會出現2種情況使流水線停頓下來或不能啟動:
流水線技術
2.1.?1、多個任務在同一時間周期內爭用同一個流水段
。例如,假如在指令流水線中,如果數據和指令是放在同一個儲存器中,并且訪問接口也只有一個,那么,兩條指令就會爭用儲存器;在一些算數流水線中,有些運算會同時訪問一個運算部件。
2.2.?數據依賴。
2、
比如,A運算必須得到B運算的結果,但是,B運算還沒有開始,A運算動作就必須等待,直到B運算完成,兩次運算不能同時執(zhí)行。
解決方案:
第一種情況,增加運算部件的數量來使他們不必爭用同一個部件;
第二種情況,用指令調度的方法重新安排指令或運算的順序。
3.?處理器流水線中的沖突
處理器的流水線設計中另外一個問題便是流水線中的沖突(Hazards),主要分為資源沖突和數據沖突。
?
3.1.?7.1?流水線中的資源沖突
?
資源沖突是指流水線中硬件資源的沖突,最常見的是運算單元的沖突,譬如除法器需要多個時鐘周期才能完成運算,因此在前一條除法指令運算完成之前,新的除法指令如果也需要除法器則會存在著資源沖突。在處理器的流水線中硬件資源沖突種類還有較多,在此不做一一贅述。解決資源沖突的方法可以通過復制硬件資源或者流水線停頓等待硬件資源的方法解決。
?
3.2.?7.2?流水線中的數據沖突
?
數據沖突是指不同的指令之間的操作數存在數據相關性造成的沖突。常見的數據相關性包括:
?
WAR(Write-After-Read)相關性,又稱先讀后寫相關性:表示“后序執(zhí)行的指令需要寫回的結果寄存器索引”與“前序執(zhí)行的指令需要讀取的源操作數寄存器索引”相同造成的數據相關性。因此,從理論上來講,在流水線中“后序指令”一定不能比和它有WAR相關性的“前序指令”先執(zhí)行,否則“后序指令”先寫回了結果至通用寄存器組中,“前序指令”再讀取操作數時,就會讀到錯誤的數值。
?
WAW(Write-After-Write)相關性,又稱先寫后寫相關性:表示“后序執(zhí)行的指令需要寫回的結果寄存器索引”與“前序執(zhí)行的指令需要寫回的結果寄存器索引”相同造成的數據相關性。因此,從理論上來講,在流水線中“后序指令”一定不能比和它有WAW相關性的“前序指令”先執(zhí)行,否則“后序指令”先寫回了結果至通用寄存器組中,“前序指令”再寫回結果至通用寄存器組中就會將其覆蓋。
?
RAW(Read-After-Write)相關性,又稱先寫后讀相關性:表示“后序執(zhí)行的指令需要讀取的源操作數寄存器索引”與“前序執(zhí)行的指令需要寫回的結果寄存器索引”相同造成的數據相關性。因此,從理論上來講,在流水線中“后序指令”一定不能比和它有RAW相關性的“前序指令”先執(zhí)行,否則“后序指令”便會從通用寄存器組中讀回錯誤的源操作數
?
4.?為了能夠盡可能的減少流水線停頓帶來的性能損失,可以使用“動態(tài)調度”的方法
?
之所以RAW稱之為真數據相關,是因為其沒有辦法通過寄存器重命名的方法將相關性去除。一旦產生RAW相關性,后序的指令一定要使用和它有RAW數據相關性的前序指令執(zhí)行完成的結果,從而造成流水線的等待停頓。為了能夠盡可能的減少流水線停頓帶來的性能損失,可以使用“動態(tài)調度”的方法。動態(tài)調度的思想本質上可以歸結于以下方面:
?
一方面采用數據旁路傳播(Data?Bypass?and?Forward)技術盡可能的讓前序指令的計算結果更快的旁路傳播給后序相關指令的操作數;
?
另一方面盡可能的讓后序相關指令在等待的過程中不阻塞流水線而讓其他無關的指令能夠繼續(xù)順利執(zhí)行。
?
早期的Tomasulo算法中通過保留站可以達到這兩方面的功效,但是保留站由于保存了操作數無法做到很大的深度(否則面積和時序的開銷巨大)。
?
最新的高性能處理器普遍采用在每個運算單元前配置亂序發(fā)射隊列(Issue?Queue)的方式,發(fā)射隊列僅追蹤RAW相關性而并不存放操作數,因此可以做的很深(譬如16個表項)。在發(fā)射隊列中的指令一旦相關性解除之后,再從發(fā)射隊列中發(fā)射出來讀取物理寄存器組(Physical?Register?File),然后發(fā)送給運算單元開始計算。
?
有關處理器的數據相關性問題和包括動態(tài)調度技術在內的解決方法,如果闡述清楚幾乎可以單獨成書,本文限于篇幅只能提綱挈領式的予以簡述。