MMX
MMX是由英特爾開發嘅一種SIMD多媒體指令集,一共有57條指令。佢喺1996年集成喺英特爾奔騰(Pentium)MMX處理器上,以提高多媒體數據嘅處理能力。
佢嘅優點係增加咗處理器關於多媒體方面嘅處理能力,缺點係佔用浮點數暫存器進行運算(64位MMX暫存器實際上就係浮點數暫存器嘅别名)以至於MMX指令同浮點數操作唔可以同時工作。為咗減少喺MMX同浮點數模式切換之間所用嘅時間,程序員儘可能咁減少模式切換嘅次數,亦即係話,呢兩種操作喺應用上係互斥的。AMD在呢個基礎上發展出3DNow!指令集。
3D Now!發佈咗一年之後,英特爾喺MMX基礎上發展出SSE(Streaming SIMD Extensions)指令集,用嚟取代MMX。依家,新開發嘅程式唔再用MMX嚟最佳化軟件執行效能,而係改用如SSE、3DNow!等更容易最佳化效能嘅新一代多媒體指令集,不過目前嘅處理器大多重可以執行針對MMX最佳化嘅早期軟件。
MMX嘅字面意思
[編輯]1997年,英特爾公司起訴AMD公司同Cyrix公司非法使用(misuse)咗商標MMX。随後呢個起訴訟庭外和解,AMD公司承認MMX係英特爾嘅商標,同意AMD公司使用MMX作為一項技術嘅名。喺呢場訴訟入面,AMD披露MMX係英特爾命名嘅矩陣數學擴展(Matrix Math eXtensions)嘅字母縮寫。
技術細節
[編輯]MMX暫存器,叫做MM0至MM7,實際上就係處理器内部80比特字長嘅浮點暫存器棧st(0)到st(7)嘅尾數部分(64位元長)嘅復用。由於浮點棧暫存器嘅高16位元未俾MMX技術使用,因此呢16位元都置為1,因此從棧暫存器嘅角度看,浮點值係NaN或者Infinities,呢個可以用喺區分暫存器係處於浮點數棧狀態定係MMX狀態。作為MMX寄存器都係直接訪問。利用咗裝配數據類型(packed data type)嘅概念,每個MMX寄存器嘅64位元可以睇做2個32位整數、或者4個16位整數、或者8個8位整數,從而可以執行整數SIMD運算。呢個對1990年代中期嘅2D、3D計算嘅加速都重係好有意義,因為當時嘅電腦嘅圖形處理器(GPU)重係好唔發達。但而家喺MMX整數SIMD運算對於圖形運算嚟講已經係多餘嘅技術啦。不過MMX嘅飽和算術運算(saturation arithmetic operations)對於一啲數字信號處理應用都重係有用嘅。
SIMD技術嘅發展
[編輯]繼MMX技術之後,Intel又喺1999年喺奔騰III處理器上推出SSE技術,引入咗新嘅128位元闊嘅暫存器集(register file),叫做XMM0到XMM7。呢啲XMM暫存器用喺4個單精度浮點數運算嘅SIMD執行,並可以同MMX整數運算或者x87浮點運算混合執行。2001年喺奔騰4上引入咗SSE2技術,進一步擴充咗指令集,令到XMM暫存器上可以執行8/16/32位元闊嘅整數SIMD運算或者雙精度浮點數嘅SIMD運算,令到SIMD技術基本完善。