基於mmx指令集的程式設計簡介
mmx技術簡介
intel 公司的mmx™(多**增強指令集)技術可以大大提高應用程式對二維三維圖形和圖象的處理能力。intel mmx技術可用於對大量資料和複雜陣列進行的複雜處理,使用mmx技術可處理的資料基本單位可以是位元組(byte)、字(word),或者是雙字(double-word)。
visual studio .net 2003提供了對mmx指令集特性的支援,從而可以不必編寫彙編**,直接使用c++**就可以實現mmx指令的功能。通過參考intel軟體說明書(intel software manuals)[1]以及閱讀msdn中有關mmx程式設計技術的主題會使你更好地把握mmx程式設計的要點。
mmx技術實現了單道指令多道資料流(simd,single-instruction, multiple-data)的執行模式。考慮下面乙個需要程式設計完成的任務,在乙個位元組(byte)陣列中使其中每乙個元素加上乙個數,在傳統的程式中,實現這個功能的演算法如下:
for each b in array //對陣列中的每乙個元素b
b = b + n //加上乙個數n
下面看看它的實現細節:
for each b in array //對陣列中的每乙個元素b
具有mmx指令集支援的處理器有八個64位的暫存器,每乙個暫存器可以存放8個位元組(byte)、4個字(word)或2個雙字(double-word)。mmx技術同時提供了乙個mmx指令集,其中的指令可以可以把乙個數值(其型別可以是位元組、字或雙字)載入到這些mmx暫存器中,在暫存器中進行算術或邏輯運算,然後把暫存器中的結果放回記憶體儲存單元。上面的例子採用mmx技術後的演算法是這樣的:
for each 8 members in array //把陣列中的8個位元組(其中乙個位元組為陣列中的乙個單位)作為一組取出
c++程式設計人員不必直接使用mmx指令集中的指令訪問這些mmx暫存器。你可以使用64位的資料型別__m64和一系列c++函式來進行相關的算術和邏輯運算。而決定程式使用哪個mmx暫存器以及**優化是c++編譯器的任務。
visual c++ mmxswarm [4]是msdn中提供的乙個很好的使用mmx技術進行圖象處理的例子,它包含了一些封裝好了的類簡化了使用mmx技術的操作,並向你展示了對各種不同格式圖象進行處理的操作(如單色24位象素rgb、32位象素rgb等)。本文只是對使用visual c++實現mmx程式設計的簡單介紹。如果你感興趣的話,可以參看msdn上mmxswarm的例子。
mmx程式設計詳細介紹
實現的功能
對應的mmx彙編指令
visual c++.net中的mmx函式
清除mmx暫存器中的內容,即初始化(以避免和浮點數操作發生衝突)。
emms
_mm_empty
將兩個64位數中對應的(8個)無符號(8位)位元組同時進行減法操作。
psubusb
_mm_subs_pu8
將兩個64位數中對應的(8個)無符號(8位)位元組同時進行加法操作。
paddusb
_mm_adds_pu8
mmx32專案可對32位象素的rgb圖象進行處理。進行的圖象處理工作是圖象顏色反相操作和更改圖象顏色的平衡度(將象素點的每一種顏色乘以一定的值)操作。
mmx的乘法實現起來比加減法複雜得多,因為乘法運算通常得出的結果的位數不再是以前位數的大小。比如,如果乘法的運算元有乙個位元組(8位的byte)大小,那麼結果會達到乙個字(16位的word)大小。這需要額外的轉換,並且使用mmx彙編指令和c++**進行圖象轉換花費時間的差別不是很大(時間差為5-10%)。
用visual c++.net的mmx指令函式實現的更改圖象顏色平衡度的函式:
void cimg32operations::colorsc_mmx( byte* psource, byte* pdest, int nnumberofpixels, float fredcoefficient, float fgreencoefficient, float fbluecoefficient )
_mm_empty();
}你可以參看示例專案的源**了解有關此專案的更多的細節。
sse2 技術
基於MMX指令集的程式設計簡介
基於mmx指令集的程式設計簡介 出處 http www.codeproject.com cpp mmxintro.asp mmx技術簡介 intel 公司的mmx 多 增強指令集 技術可以大大提高應用程式對二維三維圖形和圖象的處理能力。intel mmx技術可用於對大量資料和複雜陣列進行的複雜處理,...
基於MMX指令集的程式設計簡介
mmx技術簡介 intel 公司的mmx 多 增強指令集 技術可以大大提高應用程式對二維三維圖形和圖象的處理能力。intel mmx技術可用於對大量資料和複雜陣列進行的複雜處理,使用mmx技術可處理的資料基本單位可以是位元組 byte 字 word 或者是雙字 double word visual ...
MMX指令集(詳解)
emms mmx狀態置空 將fp特徵字置空 全1 使後續浮點指令可以使用浮點暫存器,其他mmx指令自動置fp為全0.本指令應在所有mmx例程結束和呼叫可含有fp指令的例程時使用,以清除mmx狀態.movd mm,r m32 movd r m32,mm 轉移32位資料 將32位資料從整型暫存器 記憶體...