最近因為PS2上市20週年,又讓人想起當年滿山滿谷「PS2的心臟Emotion Engine是128位元喔,你不懂啦」讓人感到極度無力的高談闊論。
如果按照這個神奇的標準,Intel早在1997年的Pentium MMX就是「64位元x86處理器」,時下支援AVX-512的產品就是「512位元」了,怎麼看都讓人感到莫名其妙。如此簡單的道理,相信各位科科都懂。
事實上,Emotion Engine的核心是「64位元通用暫存器和指令指標器(基於CPU位元數的正常解釋)」的MIPS R4000,「128位元」的是Sony在MIPS標準的的64位元資料寬度SIMD整數運算指令集MDMX(MaDMaX)之外,自行定義107個處理128位元資料寬度的SIMD整數指令,以及兩個自訂的128位元SIMD向量浮點運算處理單元(VPU)。
這也剛好是個簡單回顧x86指令集SIMD擴展的好機會。很多有點資歷的科科第一時間會想到的絕對是Intel的MMX,但MMX概念的起源,卻是Intel在1990年代中期提出的NSP(Native Signal Processing,原生訊號處理),在今天還記得這件陳年往事的人恐怕幾乎絕跡了。
延伸閱讀:
淺談GPU到底是什麼(上):不同的運算型態
在各路人馬預期Windows 95會刺激個人電腦銷售量的同時,也會激發「多媒體應用」需求的心理關鍵時刻,Intel試圖推動「主機板上加掛1顆來自第三方的數位訊號處理器(DSP,最有名廠商的莫過於TI),專門處理即時性的影音應用程式,但微軟拒絕支援此規格(NSP的運作獨立於作業系統,等於需要作業系統開後門),因此胎死腹中。
一開始57個指令集MMX則繼承了NSP的「精神」而生,只是作法不同,成本、效果也不同,斯斯保肝... 呃,為了確保作業系統相容性,意思就是可能來不及跟微軟「喬好」。MMX「借用」80x87浮點指令集80位元暫存器中的64位元,存放2個32位元整數、或者4個16位元整數、或者8個8位元整數,從而執行整數SIMD運算,以便用於語音合成、語音識別、音頻視頻編解碼、圖像處理和串流媒體等領域。
當然,要享受SIMD的好處前,能夠迅速載入並回存「一堆」資料的高效能記憶體子系統,肯定是必備的條件。
在1990年代中後期,繪圖晶片技術仍不完善、特別是涉及幾何轉換的部分,此類SIMD整數運算能力或多或少有些用處(請記住,即使是1999年首度內建硬體幾何轉換和光源的NVIDIA GeForce 256,這部分仍是「整數運算」),而數位訊號處理需要的飽和算術運算就更不用提了。但MMX與80x87共用暫存器,頻繁地切換狀態將因反覆清除暫存器資料而嚴重影響性能,限制MMX指令在大量浮點運算的應用。
Intel進一步在1999年的Pentium III,追加了70個代號KNI(Katmai New Instructions)的SSE(Streaming SIMD Extension)指令與新定義了8個全新的128位元XMM暫存器,讓x86處理器的SIMD「可處理標準的IEEE 754單倍精確度浮點術」,踏出了「取代古怪堆疊架構80x87浮點指令集」的第一步。
一定會有博學的科科跳出來替AMD和Cyrix發出不平之鳴:AMD在1998年推出的K6-2,擁有21條指令的3DNow!指令集,才是第一個能執行浮點SIMD指令的x86處理器,1999年的K7再追加了5個增強數位訊號處理指令的「擴展3DNow!」。
此外,Intel另一個老對手Cyrix,不僅在6x86MX(M2)加入12個Cyrix自訂的EMMI(Extendted Multi-Media Instructions)以強化MMX,並在M2的完全體「Cayenne(後來的VIA Cyrix III)」補完3DNow!,更藉由15個MMXFP指令,讓1個MMX暫存器可存放兩個32位元單精確度浮點數,並進行浮點運算。
但無論AMD還是Cyrix,都不完全對應IEEE 754,無法擔負「消滅80x87」的重責大任,隨著SSE的演進,AMD最終也在2010年放棄了3DNow!,而Cyrix的遺產更默默的被淹沒於歷史的洪流之中。
至於傳說中Intel原先打算讓MMX染指浮點運算的「MMX2」,為何會還沒開始就結束了,就一切盡在不言中了,科科。
2 則回應