指令級并行
編輯指令級并行 (ILP) 是計算機程序中指令序列的并行或同時執行。 更具體地說,ILP 是指此并行執行中每步運行的平均指令數。
討論
編輯ILP 不能與并發相混淆。 在 ILP 中,進程有一個特定的執行線程。 另一方面,并發涉及將多個線程嚴格交替分配給 CPU 的核心,或者如果有足夠的 CPU 核心,則以真正的并行方式分配,理想情況下每個可運行線程一個核心。
指令級并行有兩種方法:硬件和軟件。
硬件級別工作在動態并行性上,而軟件級別工作在靜態并行性上。 動態并行意味著處理器在運行時決定并行執行哪些指令,而靜態并行意味著編譯器決定并行執行哪些指令。 奔騰處理器在并行執行的動態序列上工作,而安騰處理器在靜態級并行上工作。
考慮以下程序:
e = a + bf = c + dm = e * f
操作 3 取決于操作 1 和操作 2 的結果,因此必須在它們都完成后才能計算。 但是,操作 1 和 2 不依賴于任何其他操作,因此可以同時計算它們。 如果我們假設每個操作可以在一個時間單位內完成,那么這三個指令總共可以在兩個時間單位內完成,ILP 為 3/2。
編譯器和處理器設計人員的目標是盡可能多地識別和利用 ILP。 普通程序通常是在順序執行模型下編寫的,其中指令一條接一條地執行,并按照程序員指定的順序執行。 ILP 允許編譯器和處理器重疊執行多條指令,甚至可以改變指令執行的順序。
程序中存在多少 ILP 是非常特定于應用程序的。 在某些領域,例如圖形和科學計算,數量可能非常大。 然而,密碼學等工作負載可能表現出更少的并行性。
- 指令流水線,多條指令的執行可以部分重疊。
- 超標量執行、VLIW 以及密切相關的顯式并行指令計算概念,其中多個執行單元用于并行執行多條指令。
- 亂序執行,其中指令以不違反數據依賴性的任何順序執行。 請注意,此技術獨立于流水線和超標量執行。 當前動態亂序執行的實現(即,當程序正在執行并且沒有編譯器的任何幫助時)從普通程序中提取 ILP。 另一種方法是在編譯時提取這種并行性,并以某種方式將此信息傳遞給硬件。 由于擴展亂序執行技術的復雜性,業界重新審視了指令集,這些指令集明確編碼每條指令的多個獨立操作。
- 寄存器重命名是指一種技術,用于避免因這些操作重用寄存器而強加的不必要的程序操作序列化,用于實現亂序執行。
- 推測執行,允許在確定是否應該執行之前執行完整指令或部分指令。 一種常用的推測執行形式是控制流推測,其中在確定控制流指令的目標之前執行通過控制流指令(例如,分支)的指令。 已經提出并正在使用其他幾種形式的推測執行,包括由值預測、內存依賴性預測和緩存延遲預測驅動的推測執行。
- 分支預測,用于避免拖延以解決控制依賴性。 分支預測與推測執行一起使用。
眾所周知,編譯器和硬件支持都利用了 ILP,但編譯器還通過編譯時優化為硬件提供了程序中固有和隱式的 ILP。 用于在程序中提取可用 ILP 的一些優化技術包括指令調度、寄存器分配/重命名和內存訪問優化。
數據流架構是另一類明確指定 ILP 的架構,最近的示例請參見 TRIPS 架構。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/196071/