fpe wrote:
關於紅字的部份要參考"亂序執行(Out-Of-Order Execution)"架構
亂序執行的重要依據是把所有待發送指令先加以整理
然後把 "可以先執行的指令" 分送至各個電路加以處理 :
也就是說, 若這排指令裡面有 A B C D E F G
A 與 B 相依, B 與 G 相依, D 與 F 相依, 但 A與B與G 跟 D與F 不相依
則可以先執行 A , C , D , E 四個指令
其後 A , D 指令出來後再執行 B 及 F , 並在 B 結果出來後再執行 G
在空間與處理單元設定為兩個核心處理情況下
亂序執行的組合可以為此 :
Core1 : A , B , C , G
Core2 : D , E , F , -
或其他排列... 但無論如何, 需要至少四個單位時間
可是若沒有亂序執行來排列的話...
就可能會形成這樣 :
Core1 : A , B , C , E , G
Core2 : B , B , D , F , -
其中 Core2 會出現兩個 B 是因為第一個 B 與 A 依存,
Core1 尚未給出 A 的結果, Core2 手上的 B 就必須等待到 A 完成才能做 B ...
因此整體就會形成了五個單位時間的等待
亂序執行的概念上應該是這樣
但還是逃不了一定得面對的 A 與 B 依存性的問題...
這也是將所有運算平行化為何極端困難的原因.