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