什麼是控制依賴關係?
考慮以下程式碼序列:
mul r1, r2, r3; jz zproc; sub r4, r7, r1; : zproc:load r1, x; :
在這個例子中,實際的執行方向取決於乘法的結果。這表明,條件分支後的指令依賴於它。類似地,所有條件控制指令,包括條件分支、呼叫、跳過等,都會對邏輯上後續的指令產生依賴關係,這被稱為**控制依賴關係**。
術語“通用程式”指的是編譯器、作業系統或非數值應用程式。資料表明,通用程式具有高比例的分支,高達20-30%。相比之下,科學/技術程式包含的分支較少;可能的頻率低至5-10%。
條件分支與分支的比率在不同的程式中似乎相當穩定,保持在75-85%的範圍內。因此,通用程式碼中條件分支的預期頻率約為20%,而在科學程式中則僅為5-10%。
頻繁的條件分支對ILP處理器帶來了巨大的執行限制。ILP處理器主要透過並行執行越來越多的指令來提高效能。
為了實現這一點,處理器必須整合越來越多的執行單元(EU),並被迫提高指令發出率。但是,每個週期發出的指令越多,在每個週期遇到條件控制依賴的機率就越高。
例如,讓我們考慮一個程式碼序列,其中每第六條指令都是一個條件分支,如圖所示。讓我們假設程式碼序列不包含任何資料或資源依賴關係,因此指令發出機制可以隨意發出兩條、三條或六條指令。當發出率從每週期兩條指令提高時,每三條、兩條甚至每條發出指令都將包含一個條件分支,從而可能導致越來越嚴重的效能下降。

控制依賴圖
就像資料依賴關係一樣,控制依賴關係也可以用有向圖來定義。轉移控制依賴關係的指令通常由具有兩個後繼弧的節點定義,如圖所示。輸出弧定義真(T)和假(F)路徑,並通常相應地標記。

只有單個輸出弧的節點定義操作指令或一系列無條件分支的操作指令(直線程式碼)。表示控制依賴關係的有向圖的通用方法是控制依賴圖(CDG)。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP