[超純量管線 Super-scale Pipeline]
晶片製程的提升不只是讓元件的反應變快,連帶的讓CPU晶片能塞入更多的元件。
如何讓多出來的元件數量也能幫助提升效能呢?
多出來的元件除了增加暫存器跟快取來提高資料命中率,
還能多開幾條生產線。
Intel 在 Pentium CPU 中加入了所謂超純量管線 (Super-scale Pipeline)的設計,
使用 64bits 的資料匯流排(Data Bus),跟兩條管線,
最好的情況可以在一個時脈同時執行兩個指令。(每條管線處理32bits運算)
前端有一個“排程單元”用來判斷抓進來的指令能不能同時執行,
再根據簡單的判斷將指令往兩條 pipeline 裡頭丟,
大幅降低管線中的出錯機率。
這個方法有點像是以量來換取效能,
生產線越多條,對效能越會有幫助,不過這跟加深管線不同的是,這是用電晶體數換來的,會直接反應到成本與製作難度上。
而且還有一個問題就是,生產線多一倍,效能並不會多一倍,
這跟排程單元的能力有關,優秀的排程可以讓每條生產線都能充分被利用到,
但是生產線越多條,排程要考慮的問題越多,
因為必須往後抓取更多指令來填生產線,但是如果排程單元花太多時間判斷,
就會讓效能變得很差。
所以在排程單元能力有限的情形下,生產線越多條利用效率會越差。
以有名的 AMD Athlon (K7) 處理器來說,
就算擁有當時相當優秀的排程單元,與令人驚異的9組超純量管線,
但在CPU滿載時,所有運算單元的平均使用率依然不到3成。
[多媒體指令集與 SIMD (Single-Instruction Multiple-Data)]
所以伴隨著超純量管線技術的,還有多媒體指令集。
當初 Pentium 出現後沒多久,就出現了支援 MMX 指令集的 Pentium MMX 處理器,
MMX 指令集提供 64bits 的暫存器與相關整數運算指令,
具有單一指令能夠平行處理2筆32bits,4筆16bits,或是8筆8bits資料,
充分利用了兩組超純量管線(碰到 MMX 指令連排程的工夫都省了)。
如果程式使用了這類指令集,就等於告訴了CPU哪些東西是可以同時處理的,
也不用擔心排程排錯,可以提高管線使用率,提高程式運作效率,一舉數得。
後來的 3D Now!,SSE,SSE2,SSE3,…等多媒體擴充指令集,
也都有單一指令同時處理多筆資料(SIMD)的能力(也支援浮點數計算)。
不過能平行處理的資料還是以多媒體用途居多,
因為這類指令不大量連續使用的話,對效能提升並不明顯,
很多情形下還是得靠排程單元來撐CPU的資源使用率。
接下篇....