跳至內容

AltiVec

維基百科,自由的百科全書

AltiVec是一個浮點和整型單指令流多數據流(SIMD)指令集,其由蘋果IBMFreescale Semiconductor(早先的摩托羅拉的半導體部,合稱AIM聯盟),創建並擁有,並由PowerPC版本實現,包括摩托羅拉的G4,IBM的G5POWER6,還有P.A. SemiPWRficient PA6T。AltiVec其實是由Freescale公司擁的一個商標,所有這個系統也被看作是蘋果的Velocity引擎和IBMP.A. Semi的VMX,雖然IBM今天也在使用AltiVec。

值得注意的是,AltiVec指的是一個指令集,而IBM和摩托羅拉在中央處理器的實現上有不同的邏輯設計。現在,IBM的核心沒有包含摩托羅拉授權的AltiVec邏輯設計,反之亦然。

AltiVec是Power ISA v.2.03詳述的一個標準部分。在這個詳述出現之前,AltiVec一直不是PowerPC的正式組件,雖然其使用PowerPC的指令格式和語法並擁有專門為此目的而分配的作業碼空間。

特點與相似性

[編輯]

AltiVec和SSE都擁有可以表述16個8比特的有符號或無符號字符,8個16比特有符號或無符號短整型,4個32比特整型或4個32位浮點型變量的128比特暫存器。兩者都提供緩存控制指令以使得當處理數據流時的緩存污染最小。

他們也表現出重要的不同。不像SSE2,AltiVec支持一個特別的RGB像素數據類型,但其不在64比特的雙精度浮點上操作,並且沒有辦法在純量和向量暫存器之間直接移動數據。為了保持和PowerPC的RISC設計中的「載入/儲存」模式一致,向量暫存器,如同純量暫存器,只能從內存中載入並存儲到內存中去。但是,AltiVec提供了更多的「水平」操作的集合,其跨越所有的向量元素;許可的數據類型和操作的結合也更加完整。AltiVec提供了32個128比特向量暫存器,與之相比,SSE和SSE2隻提供了8個。大多數AltiVec指令採用3個暫存器運算對象,而在IA-32中只有兩個暫存器/暫存器或暫存器/內存操作對象。

AltiVec也是唯一支持靈活向量排列的指令,在其中,一個結果向量值的每個字節都可以從兩個其他向量中的任何一個提取,並被另一個向量參數化。這就允許了在一條指令中的複雜操控。

最新版本的GCCIBM VisualAge編譯器和其他編譯器提供了本徵函數以直接從C和C++程序訪問AltiVec指令。在版本4中,GCC也包含了「自動向量化」的能力,其試圖智能地創建AltiVec加速二進制代碼而程式設計師無須直接使用本徵函數。「向量」存儲類的引入允許了原向量類型的聲明,比如「vector unsigned char foo;」聲明了一個名為「foo」的128比特的向量變量,其包含了16個8比特無符號字符。載入的本徵函數例如「vec_add」發出了基於向量內的元素類型的合適的作業代碼,並強制了嚴格的類型檢查。而與之相比,Intel為IA-32 SIMD暫存器所定義的數據類型僅僅聲明了向量暫存器(128或64比特)的大小並且在128比特暫存器時定義其包含整型或浮點型數值。程式設計師必須位次數據類型選擇合適的本徵函數,如「_mm_add_epil6(x,y)」以求兩個包含8個16比特整型的向量之和。

VMX128

[編輯]

IBM為Xbox 360 Xenon處理器加強了VMX ,這些增強包含新routines, 以遊戲為目標(加速3D圖形和遊戲物理),總共128 registers, VMX128和VMX/Altivec不完全兼容,一部分整數operations被移除,以給更大的register file和additional application-specific operations提供空間