Anonymous
Anonymous asked in 電腦與網際網路其他:電腦 · 2 decades ago

何謂MMX??

如題

2 Answers

Rating
  • かぜ
    Lv 4
    2 decades ago
    Favorite Answer

    MMX是什麼?

    提供MMX技術架構之INTEL處理器擴展了程式發展之新空間,其技術是針對處理多媒體工作發展出之一套高度最佳化指令集;在軟體發展之生命週期如昔之情況下,發展者現在必須去思考在程式設計之何處及如何應用MMX指令才能顯著提昇應用程式之執行效能。

    規劃之考量

    在改變一串程式碼前,首先應該對你的應用程式作一整體性之概要描述,此描述是處理連接特殊程式庫進入你的程式,或是使用系統公用程式去測度你的程式執行的時間花在何處最多。一般來講,你應將描述工作放在計算成本昂貴的程式碼區段,或放在佔用應用執行時間較大比率之部份。在多媒體及通訊應用領域,通常著重的描述區段在過濾器(filter)及語言壓縮演算法,影像顯示處理程序,以及譯文呈現程序。這些程序通常包含以8或16-bit整數運作之小而重複的一些迴圈,就靠著這些程序就能在轉換成MMX最佳化程式碼時,大大的提高了整體執行之效能。

    這些演算法必須經過分析才能與MMX指令相互配合;因此MMX技術增加了57個新的運算元,用以去處理對於封包資料之高速數學,邏輯及比較運算。由於MMX指令提供對8-bit及16-bit整數型資料的最佳支援;故在某些情況下,使用MMX指令去改寫原來之演算法,應有可能改善執行效能,茲舉一例,略加說明。

    假使一多媒體演算法使用了整數型資料,則首先使用描述工具去找出那裡消耗了最多的處理週期;一當找到,只要用MMX整數指令去改寫原來的程式碼區段,即可改善執行效能。

    浮點數或整數?

    若一演算法使用了浮點數指令,應該思考為何使用了它,一般來講,會用到浮點數有兩種原因,其一為執行效能之考慮;因為要保持乘法運算結果之大小及精準度,浮點數的執行效率比整數要快上三倍以上,若果真如此,則應將你的演算法用MMX之指令改寫。當在編輯MMX碼式,必須記住此時處理器64-bit的MMX暫存器化名為80-bit之浮點數暫存器,正如圖一所示,如此之巧計可讓增加的8個64-bit直接可定址MMX暫存器而不必增加新的處理器狀態或以軟體的相容作為妥協。

    因為暫存器實體上是一樣的;然而,你並不能同時將浮點數及封包的整數存在同一個暫存器內。另外僅有很小的處理花費為發生當交換產生於浮點數與MMX指令間時,但切記須避免損耗程式之執行效能,並且不要混雜浮點數指令及MMX碼在指令層;若一個程式經常在浮點數及MMX碼之間交換,則應考慮延展停留在MMX指令串或在浮點指令串之時間;這樣將會較佳的分配交換的花費。

    因為浮點運算之慣例限定浮點之堆疊於使用後會被清除,故必須在發出浮點指令之前先行清除MMX暫存器,ZMMS指令就為此清除目地而設,它會清除MMX暫存器,並且將浮點標籤字之值設為空。

    在用它時須將其設在MMX程式碼之尾端以避免浮點滿溢之例外發生。

    當在寫一應用程式時,同時用到浮點及MMX指令,請參考下列指引,以得最好的結果。

    1. 將MMX指令串及浮點指令串分成不同之區段。

    2. 跳出MMX程式碼區段時,使用ZMMS指令將浮點標籤字之值設為空的。

    3. 將浮點指令碼區段留為空白堆疊。

    4. 不要將MMX或浮點暫存器之內容接轉至前段之交換。

    資料排列

    INTEL處理器之執行效能,其關鍵就在於資料排列,錯誤的排列將致成額外的資料存取時間並且耗損執行效益,如何會有這樣的結果,請參看圖二,

    若一16-bit之整數設置在一4-bit之範圍內,它須要三倍的時鐘週期存取資料,此問題只要用正確的資料排列就可決解決,許多編譯器允許作使用編譯的一些控制來限定變數的排列,若一自行的變數排列有需要,通常都是很匆忙地安排記憶體區塊,你可以用下面所列的C寫成的演算法去強行安排資料排列,此段常式安排一64-bit變數在一64-bit範圍內,一當按照此排列,則對此變數之於Pentium處理器上對此變數之每一存取將省三個時鐘週期較未排列之存取。

    if (NULL = = (new_ptr = malloc

    (new_value+1)*sizeof

    (var_struct))mem_tmp =

    new_ptr);mem_tmp /= 8;

    new_tmp_ptr = (var_sturct*)

    ((Mem_tmp+1)*8);

    在慣例上,編譯器對在推疊上及有被宣告為靜態者,皆會作分派,當使用此種揮發性的64-bit資料,則必須確認堆疊是被排列的。圖三之C程式碼,當被放置在函數的開始及尾端將會強行使堆疊排列,從上所述;可知,使用MMX技術來加速程式之執行速度是非常簡易地。

    Maintaining Stack Alignment

    Prologue:

    push ebp ;save old frame ptr

    mov ebp,esp ;make new frame ptr

    sub ebp,4 ;make room for stack ptr

    and ebp, ;align to 64 bits

    OFFFFFFFC

    mov [ebp],esp ;save old stack ptr

    mov esp,ebp ;copy aligned ptr

    sub esp, ;allocate space

    FRAMESIZE

    ..callee saves state,etc.

    Epilogue:

    ..callee restores state,etc.

    mov esp,[ebp]

    pop ebp

    ret

    Source(s): 知識+
  • Anonymous
    2 decades ago

    何謂MMX?

    --------------------------------------------------------------------------------

    P55C 為一顆多媒體的 Pentium CPU MMX (Multi Media eXtension) 多媒體延伸指令架構 是 Pentium CPU 的一種新指令, 是特別為了提升 PC 上的 多媒體應用速度而設計的。 基本上, Pentium / Pentium PRO CPU 加上了 MMX , 就相當於加入一顆數位訊號處理器 (DSP) 成為執行多媒體時的好幫手。

    Intel 更稱之為發明 386 CPU 以來,其處理器技術方面最重要的改進, Intel 宣稱因軟體應用 MMX的多寡不同, 執行速度可以提昇 50~400℅, 可以由此項技術獲利的程式, 如雙向影像通訊, 3D 圖形, 這技術對遊戲玩家的意義在於, 日後玩遊戲可以採用高速的畫面更新率, 以 24Bit 全彩 1677 萬色的色彩來執行遊戲。

    MMX 指令集將會加入一顆代號為 P55C 的 Intel Pentium 166Mhz CPU 內, 預計年底上市, 而第一顆加入 MMX 指令的 Pentium Pro CPU 將於 1997 出現。

Still have questions? Get your answers by asking now.