指令層級平行與亂序執行
超純量處理器(superscalar processor)
基本管線像商店裡的單一結帳通道:顧客一個接一個通過,順暢地重疊,但每一刻仍只有一個人完成。超純量處理器同時開了好幾條結帳通道。它不再是每週期提取、解碼、發射一道指令,而是每週期提取並啟動好幾道指令,於是同一個時脈滴答內可以有不只一道指令完成。
具體來說,一個「兩寬」(或 4 寬、6 寬⋯⋯)的超純量核心每週期提取一小束指令,平行解碼,再把它們導向多個執行單元——也許是兩個整數 ALU、一個載入/儲存單元和一個浮點單元。如果這束指令彼此獨立(ILP 夠),就有好幾道同時執行,處理器的每週期指令數(IPC)便升到 1 以上。困難之處在於每一個週期都要檢查:候選指令中哪些真的能一起走?硬體必須即時偵測它們之間的相依與危障。這套相依檢查與導向邏輯,正是超純量前端昂貴的核心。
誠實的提醒:「寬度」是上限,不是保證。一台 4 寬機器每週期最多能發射四道指令,但前提是該時刻程式碼正好提供四道就緒、獨立、無危障的指令,且對應的執行單元都空著。真實程式很少能維持在峰值,所以 4 寬核心並不會比 1 寬核心快四倍。現代超純量幾乎都同時是亂序的,因為當排在最前面那道指令卡住時,正是靠重新排序才能持續餵飽各條通道。
一個 2 寬核心看到指令束「add x3=x1+x2; sub x6=x4+x5」。兩者獨立,於是這個週期一起發射:一道去 ALU0、另一道去 ALU1,兩者一起退役——這個週期的 IPC 為 2。
每週期發射並完成數道指令——前提是其中夠多道彼此獨立。
更寬既不免費也不自動:要達到峰值 IPC,程式得每週期都供應那麼多獨立工作,而它很少做到。峰值 IPC 與實際維持 IPC 之間的落差,正是 ILP 極限的一個面向。
又称
另见