摘 要: 在簡(jiǎn)要介紹IA(Intel Architecture) MMXTM技術(shù)的基礎(chǔ)上,重點(diǎn)討論了應(yīng)用IA MMXTM技術(shù)的DCT快速算法及其優(yōu)越性能,。
關(guān)鍵詞: Intel體系結(jié)構(gòu) IA MMXTM技術(shù) 快速算法 離散余弦變換(DCT)和離散余弦反變換(IDCT)
1 IA MMXTM技術(shù)簡(jiǎn)介
個(gè)人計(jì)算機(jī)處理數(shù)據(jù)的復(fù)雜度和數(shù)量的急劇增長(zhǎng),,對(duì)微處理器的性能提出了更高的要求。其中以視頻,、3D圖形,、動(dòng)畫,、音頻和虛擬現(xiàn)實(shí)為特征的應(yīng)用更是對(duì)微處理器的性能提出嶄新的要求。IA MMXTM技術(shù)應(yīng)運(yùn)而生,。它的設(shè)計(jì)目的就是用來加強(qiáng)多媒體和通信方面的應(yīng)用,。這一技術(shù)包括新的指令和數(shù)據(jù)類型。IA MMXTM技術(shù)介紹了一些新的通用指令,,這些指令以并行處理的方式完成對(duì)一個(gè)64位數(shù)據(jù)組中的多個(gè)數(shù)據(jù)元素的操作,。IA MMXTM指令集在不增加新的模式并保持對(duì)操作系統(tǒng)的透明性的基礎(chǔ)上,形成了一個(gè)簡(jiǎn)單而靈活的軟件模型,。IA MMXTM技術(shù)定義了57條新的指令,、8個(gè)64位寬度的IA MMXTM 寄存器和四種新數(shù)據(jù)類型。
IA MMXTM 技術(shù)最重要的特點(diǎn)是單指令多操作數(shù)據(jù)(SIMD),,這一技術(shù)允許一條指令并行處理多個(gè)數(shù)據(jù)元素,。正是這種并行處理的能力極大地提高了應(yīng)用程序的性能。IA MMXTM指令處理定點(diǎn)數(shù),,多個(gè)整數(shù)字節(jié),、字或雙字被組合在一個(gè)單獨(dú)的64位IA MMXTM寄存器中。定點(diǎn)值的小數(shù)點(diǎn)位置由程序員自己決定,,這樣保證了處理數(shù)據(jù)精度的靈活性,。在IA MMXTM技術(shù)中支持有符號(hào)和無符號(hào)的定點(diǎn)整數(shù)字節(jié)、字,、雙字和四字的各種運(yùn)算,。
Intel Pentium處理器是先進(jìn)的超標(biāo)量處理器,它建立在兩個(gè)通用整數(shù)流水線和一個(gè)可流水作業(yè)的浮點(diǎn)處理單元之上,。一個(gè)軟件透明的動(dòng)態(tài)分支預(yù)測(cè)機(jī)制使得流水線阻塞降低到最小,。帶有IA MMXTM 技術(shù)的Intel Pentium處理器給流水線加入新的處理階段。Intel Pentium處理器能在一個(gè)時(shí)鐘周期內(nèi)執(zhí)行兩條指令,,每條流水線執(zhí)行一條指令,。第一條邏輯流水線稱為U流水線,第二條稱為V流水線,。在任何指令的解碼期間,,下兩條指令被檢查,如果可能,,它們被分別送入U(xiǎn)、V流水線,;否則,,下一條指令送入U(xiǎn)流水線,而沒有指令送入V流水線,。IA MMXTM技術(shù)指令通過指令調(diào)度可以充分利用Intel Pentium處理器的雙流水線機(jī)制以提高程序的運(yùn)行速度,。IA MMXTM 寄存器和狀態(tài)是IA浮點(diǎn)寄存器和狀態(tài)的別名,,這保證了IA MMXTM技術(shù)與現(xiàn)有的操作系統(tǒng)和應(yīng)用的完全兼容性。但是應(yīng)用浮點(diǎn)操作和IA MMXTM指令混合編程時(shí),,浮點(diǎn)操作指令流和IA MMXTM指令流必須分開并且在執(zhí)行完離開時(shí)要進(jìn)行必要的清理工作,,在IA MMXTM技術(shù)指令后要寫一條EMMS指令,在浮點(diǎn)操作完成后要清空浮點(diǎn)寄存器堆棧,。IA MMXTM技術(shù)指令集如表1所示,。
由于IA 體系的復(fù)雜性和IA MMXTM技術(shù)的本身特點(diǎn),開發(fā)一個(gè)應(yīng)用IA MMXTM技術(shù)的應(yīng)用程序?qū)⑹潜容^復(fù)雜的,,涉及到許多方面,。其中主要有應(yīng)用的特點(diǎn)是否適應(yīng)IA MMXTM技術(shù)的要求,算法是否具有強(qiáng)的并行特點(diǎn),。這是決定應(yīng)用IA MMXTM技術(shù)的前提條件,。具體在編程時(shí)要進(jìn)行優(yōu)化,一般的優(yōu)化策略包括地址生成互鎖(AGI)優(yōu)化,、代碼及數(shù)據(jù)對(duì)齊,、避免部分寄存器阻塞、分支預(yù)測(cè)信息和指令的合理調(diào)度,。另外指令選擇優(yōu)化,、內(nèi)存優(yōu)化和高速緩存優(yōu)化也極大地制約了應(yīng)用的性能。
2 圖象處理中的DCT和IDCT
在圖象處理中,,離散余弦變換(DCT)及其反變換(IDCT)一直是運(yùn)動(dòng)估計(jì)/補(bǔ)償變換編解碼系統(tǒng)的速度瓶頸,。盡管出現(xiàn)了大量的快速算法,但是由于圖象處理數(shù)據(jù)量非常大,,使得這一系統(tǒng)在實(shí)時(shí)應(yīng)用中性能不佳,。注意到圖象處理的DCT中,輸入數(shù)據(jù)和輸出數(shù)據(jù)都是整數(shù),,基于這一特點(diǎn)本文介紹了應(yīng)用奔騰處理器IA MMXTM技術(shù),,選擇特定的快速算法,將8×8塊的DCT和IDCT的速度提高了3倍以上,。限于篇幅,,這里只介紹DCT。
2.1采用行列快速算法DCT
在計(jì)算二維N×N點(diǎn)DCT時(shí),、一種常用的算法是采用行列快速算法,。該算法首先按行計(jì)算N個(gè)一維DCT,再按列計(jì)算N個(gè)一維DCT,,從而把乘法的計(jì)算量減少到直接計(jì)算的一半,,其算法規(guī)律性強(qiáng),便于程序?qū)崿F(xiàn)。
c(u)=α(u)∑f(n)cos[πu(2n+1)/2N] (1)
(1)式給出了計(jì)算公式,、這里,、α(0)=1/、 α(u)=
,,u≠0,。直接計(jì)算一個(gè)1D N點(diǎn)DCT的乘法次數(shù)為N2次。通過研究DCT的特點(diǎn),,Chun-Yen Lu和Kuei-Ann Wen提出了系數(shù)選擇8點(diǎn)一維DCT模式,,現(xiàn)在簡(jiǎn)單介紹其方法。實(shí)數(shù)序列{f(n):n=0,、1,、...、N-1}的1D DCT-II可以表述如下:
在這里我們?cè)O(shè)定N=8,、對(duì)于(1)式我們定義如下的系數(shù)矩陣F(n)和數(shù)據(jù)矩陣D(n):
從(2)式可以看出,,1D8點(diǎn)DCT的計(jì)算可以分解為以下幾步:
·計(jì)算數(shù)據(jù)向量D;
·通過排列矩陣P重新排列D0,,D1,,D2和D3,即:D’=PD,;
·計(jì)算SFD’,,相應(yīng)的余弦系數(shù)集通過選擇矩陣Si從F中選擇。
通過這一過程,,我們不難看出,,系數(shù)選擇模式1D 8點(diǎn)DCT具有簡(jiǎn)明的規(guī)律性,便于程序?qū)崿F(xiàn),。
2.2 算法的IA MMXTM技術(shù)實(shí)現(xiàn)
2.2.1 對(duì)上述算法的改進(jìn)
簡(jiǎn)單地利用(2)式來計(jì)算DCT,,并不能充分發(fā)揮IA MMXTM技術(shù)的優(yōu)越性能,我們對(duì)(2)式做如下變形:
u=0,、1...7,。[D′(u)]T是8點(diǎn)數(shù)據(jù)的規(guī)律性組合(見D(u)、區(qū)別是分別去掉了系數(shù)1,、p(n),、q(n)、r(n)),,是DCT的固定部分,,對(duì)于不同數(shù)據(jù)的DCT保持不變。 從而將DCT分為固定部分[[SuF] [PuDc(u)]]T,,和數(shù)據(jù)部分D′(u),。這樣計(jì)算時(shí)可以首先計(jì)算[[SuF][PuDc(u)]]T并制成表存儲(chǔ)起來,程序中通過查表獲取乘法因子。從而使得1D8點(diǎn)DCT的計(jì)算變得適合IA MMXTM技術(shù)的實(shí)現(xiàn),。
2.2.2 將浮點(diǎn)運(yùn)算轉(zhuǎn)換為整數(shù)運(yùn)算
雖然通過算法的改進(jìn)使之適合程序?qū)崿F(xiàn)、但是在算法中仍然存在浮點(diǎn)乘法,、對(duì)于數(shù)字視頻,,其象素的各個(gè)分量一般為8位整數(shù),為了消除浮點(diǎn)運(yùn)算,,將余弦系數(shù)擴(kuò)大65536倍,,相當(dāng)于左移16位,因?yàn)檫@里的余弦系數(shù)都小于1/2,,因此擴(kuò)大后的數(shù)據(jù)不會(huì)超出16位有符號(hào)短整型數(shù)據(jù)的范圍,。這樣就把浮點(diǎn)運(yùn)算轉(zhuǎn)化為整型運(yùn)算。制定如下數(shù)組:
short A[8][4]={{iA1,、iA1,、iA1、iA1},、{iC1,、iC2、iC3,、iC4},、{iB1、iB2,、-iB2,、-iB1}、{iC2,、-iC4,、-iC1、-iC3},、{iA1,、-iA1、-iA1,、iA1},、{iC3、-iC1,、iC4,、iC2}、{iB2,、-iB1,、iB1、-iB2}、{iC4,、-iC3,、iC2、-iC1}};
其中iA1=A1×65536,,iBu=Bu×65536,,iCj=Cj×65536,u=1,,2,;j=1,2,,3,,4。注意到該數(shù)組共占用8×4×2=64個(gè)字節(jié),,正好是奔騰處理器高速緩存線的整數(shù)倍,,并且要把數(shù)組的起始位置放在32字節(jié)邊界上,這樣就可以優(yōu)化高速緩存的線讀入,。
2.2.3 輸入數(shù)據(jù)格式
假設(shè)輸入是按自然順序的8點(diǎn)數(shù)據(jù),,由D(n)的定義、在處理前要對(duì)后四點(diǎn)進(jìn)行反序調(diào)整,、既將前四點(diǎn)按順序放入MMXTM寄存器中,、并將其擴(kuò)展成16位數(shù)據(jù)、將后四位反序后以同樣的格式放入另一個(gè)MMXTM寄存器中,。這樣可以用以下三條指令得出f(i)±f(7-i),、i=0、1,、2,、3。(設(shè)前四個(gè)放在MM0中,、后四個(gè)放在MM2中),。
MOVQ MM1、MM0
PADDSW MM0,、MM2 //MM0存放四個(gè)和值
PSUBSW MM1,、MM2 //MM1存放四個(gè)差值
這樣、MM0和MM1為分別對(duì)應(yīng)n為偶數(shù)和奇數(shù)的情況,。調(diào)整好輸入數(shù)據(jù)的格式將為IA MMXTM技術(shù)指令的應(yīng)用提供極大方便,。
2.2.4 乘法運(yùn)算與精度問題
通過以上的準(zhǔn)備工作,接下來就是依次計(jì)算8個(gè)DCT系數(shù)C(u)(u=0,、1...7)了,。這涉及到指令選擇的優(yōu)化問題,,從公式(3)我們知道,對(duì)于每個(gè)DCT系數(shù)C(u)是四個(gè)并行16位×16位的整數(shù)乘積的和,,為了保證精度要求結(jié)果保留32位,。在IA MMXTM技術(shù)指令集中,PMADDWD 正好完成這一并行乘法運(yùn)算和兩個(gè)乘積的和值計(jì)算,,只要再做一次和就可以得出結(jié)果,。另外,要根據(jù)n是偶數(shù)或奇數(shù)選擇f(i)±f(7-i),。下面是PMADDWD的操作示例:
在做完乘法和加法以后,要對(duì)數(shù)據(jù)進(jìn)行右移16位,,相當(dāng)于除以65536,,這樣就將數(shù)據(jù)還原為其真實(shí)值了。如果要進(jìn)一步提高精度可以對(duì)數(shù)據(jù)進(jìn)行四舍五入處理,,關(guān)于這一點(diǎn)在此不做詳細(xì)說明,。鑒于程序流程簡(jiǎn)單明了,其流程圖和程序清單就不在此占用篇幅了,。
在實(shí)際編程中,,必須注意指令的調(diào)度問題,這也是程序優(yōu)化的很關(guān)鍵的一個(gè)方面,。下面就IA MMXTM技術(shù)指令與整型指令的配對(duì)規(guī)則做簡(jiǎn)要介紹,。
· 整型指令的配對(duì)規(guī)則如表2
· MMXTM技術(shù)指令的配對(duì)
(1)由于僅有一個(gè)MMXTM移位單元,所以兩條MMXTM移位單元的MMXTM指令不能配對(duì),。移位操作可以在U流水線或V流水線中進(jìn)行,,但不能在同一個(gè)時(shí)鐘周期內(nèi)的兩個(gè)流水線中處理。
(2) 同樣,,兩條MMXTM乘法指令不能配對(duì),。
(3) 無論是對(duì)內(nèi)存還是對(duì)整數(shù)寄存器的文件訪問的MMXTM指令僅被U流水線處理,。
(4) U流水線指令的MMXTM目的寄存器不與V流水線指令的源或目的寄存器配對(duì),。
(5) EMMS指令不可配對(duì)。
· U流水線中的整數(shù)指令和V流水線中的MMXTM技術(shù)指令配對(duì)規(guī)則
(1)在浮點(diǎn)指令之后的第一條指令不能是MMXTM技術(shù)指令,。
(2)V流水線的MMXTM指令不能訪問內(nèi)存或整數(shù)寄存器文件,。
(3)U流水線整數(shù)指令是可配對(duì)的U流水線整數(shù)指令。
· U流水線中的MMXTM技術(shù)指令和V流水線中的整數(shù)指令配對(duì)規(guī)則
(1)V流水線整數(shù)指令是可配對(duì)的V流水線整數(shù)指令,。
(2)U流水線MMXTM指令不能對(duì)內(nèi)存或整數(shù)寄存器存取,。
根據(jù)以上配對(duì)原則,相信讀者可以自己安排程序中的指令配對(duì),。
該程序雖然占用了不多的存儲(chǔ)單元,,但是(接上頁(yè))
卻極大地提高了運(yùn)算速度,,由于大存儲(chǔ)量的存儲(chǔ)體價(jià)格較低,因此這一點(diǎn)并不重要,。
除此之外,,筆者還在運(yùn)動(dòng)估計(jì)搜索算法中應(yīng)用IA MMXTM技術(shù),同樣性能顯著地提高了,。
總之,,IA MMXTM技術(shù)在數(shù)據(jù)處理的許多算法中都能發(fā)揮優(yōu)越的性能,能夠成倍地提高運(yùn)行速度,。目前在多媒體應(yīng)用中,,離散余弦變換(DCT)是經(jīng)常用到的變換編碼技術(shù),因此提高DCT的速度一直是這一應(yīng)用領(lǐng)域中的關(guān)鍵,。利用IA MMXTM技術(shù)在不增加其他硬件的情況下,,充分發(fā)揮Intel Pentium處理器的性能可以輕松地完成這一任務(wù)。在多媒體應(yīng)用中,,IA MMXTM技術(shù)大大降低了程序?qū)μ幚砥鞯恼加寐?,使處理器能夠同時(shí)更有效地執(zhí)行其他任務(wù)。
參考文獻(xiàn)
1 Intel Architecture MMXTM Technology Programmer's Reference Manual.1996
2 Intel Architecture MMXTM Technology Manual.1996.
3 [美]Intel公司著,,李暉譯.Intel體系結(jié)構(gòu)MMXTM技術(shù)開發(fā)指南.北京:電子工業(yè)出版社,1997
4 Chung-Yen Lu,,Kuei-Ann Wen.On the Design of Selective Coefficient DCT Module.IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY,、1998;8(2)(收稿日期:1999-12-29)