專利名稱:在分組數(shù)據(jù)上執(zhí)行乘-加運算的裝置的制作方法
本專利申請為Alexander D.Peleg、Millind Mittal、Larry M.Mennemeier、Benny Eitan、Andrew F.Glew、Carole Dulong、Eiichi Kowashi與Wolf Witt 1995年8月31日提交的名為“在分組數(shù)據(jù)上執(zhí)行乘-加運算地方法與操作”的申請序號08/522,067的部分繼續(xù)申請。
具體地,本發(fā)明涉及計算機系統(tǒng)領(lǐng)域。更具體地,本發(fā)明涉及分組數(shù)據(jù)操作領(lǐng)域。
在典型的計算機系統(tǒng)中,處理器是實現(xiàn)為使用產(chǎn)生一個結(jié)果的指令在用大量的位(如64)表示的值上操作的。例如,加法指令的執(zhí)行將第一個64位值與第二個64位值相加并作為第三個64位值存儲其結(jié)果。然而,多媒體應(yīng)用(諸如用于計算機支持的協(xié)作(CSC-電話會議與混合媒體數(shù)據(jù)處理的綜合)的應(yīng)用、2D/3D圖形、圖象處理、視頻壓縮/解壓、識別算法及音頻處理)要求處理大量可以用少數(shù)位表示的數(shù)據(jù)。例如,圖形數(shù)據(jù)通常需要8或16位及聲音數(shù)據(jù)通常需要8或16位。這些多媒體應(yīng)用的每一個需要一種或多種算法,每種需要若干操作。例如,一種算法可能需要加法、比較及移位操作。
為了增進多媒體應(yīng)用的效率(以及具有相同特征的其它應(yīng)用的效率),處理器可提供分組數(shù)據(jù)格式。分組數(shù)據(jù)格式便是將通常用來表示一個值的位分解成若干固定長度的數(shù)據(jù)元素,每一個表示一個單獨的值。例如,可將64位寄存器分成兩個32位元素,各表示一個單獨的32位值。此外,這些處理器提供用于響應(yīng)單一的指令并行地分開處理這些分組數(shù)據(jù)類型中的各元素的指令。例如,分組加法指令將來自第一分組數(shù)據(jù)及第二分組數(shù)據(jù)的對應(yīng)數(shù)據(jù)元素相加。從而,如果多媒體算法需要包含必須在大量數(shù)據(jù)元素上執(zhí)行的五個操作的循環(huán),組裝這些數(shù)據(jù)并用分組數(shù)據(jù)指令并行執(zhí)行這些操作是所希望的。以這一方式,這些處理器便能更高效地處理多媒體應(yīng)用。
然而,如果操作循環(huán)中包含處理器不能在分組數(shù)據(jù)上執(zhí)行的操作(即,處理器缺乏適當(dāng)?shù)闹噶?,則必須分解該數(shù)據(jù)以便執(zhí)行這一操作。例如,如果多媒體算法需要加法運算而不能使用上述分組加法指令,則程序員必須分解第一分組數(shù)據(jù)及第二分組數(shù)據(jù)(即分開第一分組數(shù)據(jù)及第二分組數(shù)據(jù)所包含的元素),單個地將分開的元素相加,然后將結(jié)果組裝成分組結(jié)果供進一步分組處理。執(zhí)行這種組裝與分解所需的處理時間往往抵消提供分組數(shù)據(jù)格式的性能優(yōu)點。因此,希望在計算機系統(tǒng)中加入提供典型多媒體算法所有所需要的操作的分組數(shù)據(jù)指令集。然而由于現(xiàn)今通用處理器上有限的芯片面積,可以增加的指令數(shù)目是有限的。因此,希望發(fā)明出既提供通用性(即可用在多種多樣多媒體算法中的指令)又具有極大性能優(yōu)點的指令。
提供在多媒體算法中使用的操作的一種技術(shù)為將一個獨立的數(shù)字信號處理器(DSP)耦合在現(xiàn)有的通用處理器(如加州Santa Clara的Intel公司制造的Intel486)上。通用處理器將能用分組數(shù)據(jù)執(zhí)行的任務(wù)(如視頻處理)分配給DSP。
一種DSP包含將兩個值相乘的結(jié)果加到累加值上的乘累加指令(見Kawakami、Yuichi等人的“用于話音頻帶應(yīng)用的單片數(shù)字信號處理器”,IEEE國際固態(tài)電路會議,1980,pp.40-41)。下面表1中示出這一DSP的乘累加運算的一個示例,其中指令是在分別作為Source1與Source2存取的數(shù)據(jù)值A(chǔ)1與B1上執(zhí)行的。
表1
Multiply-Accumulate Source1,Source2
Source1Source2Result1
這一指令的一個限制是其有限的效率--即它只在兩個值及一個累計值上運算。例如,為了相乘與累計兩組兩個值需要串行執(zhí)行下述兩條指令1)乘累加來自第一組的第一值、來自第二組的第一值及為0的一個累計值以生成中間累計值;2)乘累加來自第一組的第二值、來自第二組的第二值及中間累計值以生成結(jié)果。
另一DSP包含在兩組兩個值及一個累計值上運算的乘累加指令(見“帶并行乘法器的數(shù)字信號處理器”,專利號4,771,470,這里稱作“Ando等人”對比文件)。表2中示出用于這一DSP的乘累加指令的一個示例,其中該指令在分別作為Source1-4存取的數(shù)據(jù)值A(chǔ)1、A2、B1及B2上執(zhí)行。
表2
Source1Source3
乘累加
Source2Source4
= Result1
采用這一技術(shù),在一條指令中相乘兩組兩個值然后加到一個累計值上。
這一乘累加指令具有有限的通用性,因為它總是加在累加值上。結(jié)果,難于將該指令用在乘累加以外的運算上。例如,復(fù)數(shù)乘法是在多媒體應(yīng)用中經(jīng)常使用的。兩個復(fù)數(shù)(諸如,r1 i1與r2 i2)的乘法是按照下述等式執(zhí)行的
實部=r1·r2-i1·i2
虛部=r1·i2+r2·i1
這一DSP不能用一條乘累加指令執(zhí)行將兩個復(fù)數(shù)相乘的功能。
當(dāng)這一計算的結(jié)果在隨后的乘法運算而不是在累加中需要時,這一乘累加指令的局限性可以更清楚地看出。例如,如果實部是用該DSP計算的,則為了正確地計算結(jié)果必須將累加值初始化成零。此后為了計算虛部還必須將累加值重新初始化成零。為了在得出的復(fù)數(shù)與第三復(fù)數(shù)(諸如r3,i3)上執(zhí)行另一次復(fù)數(shù)乘法,必須將得出的復(fù)數(shù)再定標(biāo)及存儲在可接受的存儲格式中并且必須再次將累加值初始化成零。然后才能執(zhí)行上述復(fù)數(shù)乘法。在這些運算的各個中,專用于累加值的ALU是多余的硬件并需要額外的指令來重新初始化這一累加值。否則這些額外指令是不需要的。
這一技術(shù)的進一步限制是數(shù)據(jù)必須通過昂貴的多端口存儲器存取。這是因為乘法器是直接與數(shù)據(jù)存儲器相連的。因此可利用的并行性量被互連的成本及這一互連不從指令上斷開這一事實限制在很小的數(shù)量上。
Ando等人的對比文件還描述了對這一昂貴的互連的一種替代是為各個要相乘的隨后的數(shù)據(jù)對引入延時。這一解決方案消除了前面表1中所示的解決方案所提供的任何性能優(yōu)點。
此外,多端口存儲器或?qū)Υ鎯ζ鞯牧魉€存取的想法要求使用多個地址。每一數(shù)據(jù)一個地址的明確使用清楚地顯示在這一技術(shù)中不采用分組數(shù)據(jù)這一關(guān)鍵性概念。
處理器具有分別包含第一與第二分組數(shù)據(jù)的第一與第二存儲器。各分組數(shù)據(jù)包含第一、第二、第三與第四數(shù)據(jù)元素。
一個乘-加電路耦合在第一與第二存儲區(qū)上。該乘-加電路包含第一、第二、第三與第四乘法器,其中各乘法器接收對應(yīng)的所述數(shù)據(jù)元素組。乘-加電路還包含耦合在第一與第二乘法器上的第一加法器及耦合在第三與第四乘法器上的第二加法器。第三存儲區(qū)耦合在這些加法器上。第三存儲區(qū)包含分別用于保存第一與第二加法器的輸出的第一與第二字段,作為第三分組數(shù)據(jù)的第一與第二數(shù)據(jù)元素。
圖1示出具有本發(fā)明的一個實施例的計算機系統(tǒng)。
圖2示出按照本發(fā)明的一個實施例的處理器的寄存器文件。
圖3為展示按照本發(fā)明的一個實施例的處理器處理數(shù)據(jù)所使用的總步驟的流程圖。
圖4示出按照本發(fā)明的一個實施例的分組數(shù)據(jù)類型。
圖5a示出按照本發(fā)明的一個實施例的寄存器分組數(shù)據(jù)表示。
圖5b示出按照本發(fā)明的一個實施例的寄存器分組數(shù)據(jù)表示。
圖5c示出按照本發(fā)明的一個實施例的寄存器分組數(shù)據(jù)表示。
圖6a示出按照本發(fā)明的一個實施例的用于指示分組數(shù)據(jù)的使用的控制信號格式。
圖6b示出按照本發(fā)明的一個實施例的用于指示分組數(shù)據(jù)的使用的第二控制信號格式。
圖7為展示按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行乘-加運算的步驟的流程圖。
圖8示出按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行乘-加運算的電路。
圖9a-9e示出按照本發(fā)明一個實施例執(zhí)行部分乘積求和與歸約的Wallace樹。
圖10a-10f示出本發(fā)明的一個實施例的實現(xiàn)圖9a-9e的Wallace樹的電路的一個實施例。
圖11示出按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行乘-加運算的電路。
在以下描述中,為了提供對本發(fā)明的徹底理解,陳述了許多特定細(xì)節(jié)。然而,應(yīng)理解本發(fā)明可不用這些特定細(xì)節(jié)實現(xiàn)。在其它實例中,為了不沖淡本發(fā)明,公知的電路、結(jié)構(gòu)與技術(shù)未曾詳細(xì)示出。
定義
為了提供理解本發(fā)明的實施例的描述的基礎(chǔ),提供了以下定義。
位X至位Y
定義二進制數(shù)的子字段。例如,字節(jié)001110102(以基2示出)的位6至位0表示子字段1110102。二進制數(shù)后面的“2”表示基2。因此,10002等于810,而F16等于1510。
Rx為一寄存器。寄存器是能夠存儲與提供數(shù)據(jù)的任何器件。寄存器的進一步功能描述如下。寄存器不一定非包含在與處理器同一芯片上或同一封裝中不可。
SRC1、SRC2與DEST
標(biāo)識存儲器區(qū)(諸如存儲區(qū)地址、寄存器等)。
Source1-i及Result1-i
表示數(shù)據(jù)。
概述
本申請描述在分組數(shù)據(jù)上執(zhí)行乘-加運算的處理器中的裝置。在一個實施例中,使用一個乘-加指令執(zhí)行兩個乘-加運算,如下面表3a與3b中所示--表3a示出所公開的乘-加運算的簡化表示,而表3b示出所公開的乘-加運算的位級示例。
表3a
Multiply-Add Source1.Source2
Source1Source2Result1
表3b
從而,所描述的乘-加運算的實施例將Source1與Source2的對應(yīng)16位數(shù)據(jù)元素相乘生成四個32位中間結(jié)果。將這些32位中間結(jié)果成對求和產(chǎn)生裝進一個分組結(jié)果的它們各自的元素中的兩個32位結(jié)果。如稍后進一步描述的,替代實施例可改變數(shù)據(jù)元素、中間結(jié)果及結(jié)果中的位數(shù)。此外,替代實施例可改變所使用的數(shù)據(jù)元素的數(shù)目、生成的中間結(jié)果的數(shù)目及得出的分組數(shù)據(jù)中的數(shù)據(jù)元素的數(shù)目。
計算機系統(tǒng)
圖1示出按照本發(fā)明的一個實施例的示范性計算機系統(tǒng)100。計算機系統(tǒng)100包含用于傳遞信息的總線101或其它通信硬件與軟件,以及用于處理信息的與總線101耦合的處理器109。處理器109表示包含CISC或RISC類型體系結(jié)構(gòu)在內(nèi)的任何類型體系結(jié)構(gòu)的中央處理單元。計算機系統(tǒng)100還包括耦合在總線101上的隨機存取存儲器(RAM)或其它動態(tài)存儲設(shè)備(稱作主存儲器104),用于存儲信息及要由處理器109執(zhí)行的指令。在處理器109的指令執(zhí)行期間,主存儲器104也可用于存儲臨時變量或其它中間信息。計算機系統(tǒng)100還包含耦合在總線101上的只讀存儲器(ROM)106與/或其它靜態(tài)存儲設(shè)備,用于存儲靜態(tài)信息及處理器109的指令。數(shù)據(jù)存儲設(shè)備107耦合在總線101上用于存儲信息及指令。
圖1還示出處理器109包含執(zhí)行單元130、乘-加單元145、寄存器文件150、高速緩沖存儲器160、解碼器165及內(nèi)部總線170。當(dāng)然,處理器109包含對理解本發(fā)明不必要的附加電路。
執(zhí)行單元130用于執(zhí)行處理器109接收的指令。除了識別通常實現(xiàn)在通用處理器中的指令以外,執(zhí)行單元130還識別在分組數(shù)據(jù)格式上執(zhí)行操作的分組指令集140中的指令142。分組指令集140中包含支持乘-加運算的指令。此外,分組指令集140也可包含支持組裝操作、分解操作、分組加法運算、分組減法運算、分組乘法運算、分組移位操作、分組比較操作、個數(shù)計數(shù)操作及一組分組邏輯運算(包含分組“與”、分組“與非”(ANDNOT)、分組“或”、及分組“異或”)的指令,如在名稱為“在分組數(shù)據(jù)上操作的指令集”的申請中所描述的。執(zhí)行單元130還包含執(zhí)行乘-加運算的乘-加單元145。
執(zhí)行單元130用內(nèi)部總線170耦合在寄存器文件150上。寄存器文件150表示用于存儲包含數(shù)據(jù)在內(nèi)的信息的處理器109上的存儲區(qū)。執(zhí)行單元130還耦合在高速緩沖存儲器160及解碼器165上。高速緩沖存儲器160用來高速緩沖存儲來自諸如主存儲器104的數(shù)據(jù)與/或控制信號。解碼器165用來將處理器109接收的指令解碼成控制信號與/或微代碼入口點。執(zhí)行單元130響應(yīng)這些控制信號與/或微代碼入口點,執(zhí)行適當(dāng)?shù)牟僮鳌@?,如果接收到加法指令,解碼器165令執(zhí)行單元130執(zhí)行所要求的加法。可采用任何數(shù)目的不同機制(諸如查找表、硬件實現(xiàn)、PLA等)實現(xiàn)解碼器165。從而,雖然解碼器與執(zhí)行單元的各種指令的執(zhí)行是用一系列if/then語句表示的,應(yīng)理解指令的執(zhí)行并不需要一系列這些if/then語句的處理。而是將邏輯地執(zhí)行這一if/then處理的任何機制認(rèn)為是在本發(fā)明的范圍之內(nèi)。
圖1附加示出諸如磁盤或光盤及其對應(yīng)的盤驅(qū)動器的數(shù)據(jù)存儲設(shè)備107可耦合在計算機系統(tǒng)100上。計算機系統(tǒng)100也能通過總線101耦合在用于向計算機用戶顯示信息的顯示設(shè)備121上。顯示設(shè)備121能包含幀緩沖器、專用圖形描繪設(shè)備、陰極射線管(CRT)與/或平板顯示器。字母數(shù)字輸入設(shè)備122(包含字母數(shù)字及其它鍵)通常耦合在總線101上,用于傳遞信息與命令選擇給處理器109。另一種用戶輸入設(shè)備為諸如鼠標(biāo)器、軌跡球、筆、觸摸屏或光標(biāo)方向鍵等用于傳遞方向信息與命令選擇給處理器109及用于控制光標(biāo)在顯示設(shè)備121上的運動的光標(biāo)控制設(shè)備123。這一輸入設(shè)備通常具有兩個軸上的兩個自由度(第一軸(如x)及第二軸(如y)),它允許設(shè)備指定平面上的一個位置。然而本發(fā)明不限于只有兩個自由度的輸入設(shè)備。
另一個可耦合在總線101上的設(shè)備為硬拷貝設(shè)備124,它可在諸如紙、膠片等介質(zhì)或類似種類的介質(zhì)上打印指令、數(shù)據(jù)或其它信息。此外,計算機系統(tǒng)100可耦合在用于聲音錄制與/或播放的設(shè)備125上,諸如耦合在用于錄制信息的麥克風(fēng)上的音頻數(shù)字化器。此外,該設(shè)備可包含耦合在數(shù)模(D/A)轉(zhuǎn)換器上用于播放數(shù)字化聲音的揚聲器。
此外,計算機系統(tǒng)100也可以是計算機網(wǎng)(如LAN)中的終端。這時計算機系統(tǒng)100便是計算機網(wǎng)的一個計算機子系統(tǒng)。計算機系統(tǒng)100可選地包含視頻數(shù)字化設(shè)備126。視頻數(shù)字化設(shè)備126可用來捕捉能傳輸給計算機網(wǎng)上其它計算機的視頻圖象。
在一個實施例中,處理器109附加支持與加州Santa Clara的Intel公司制造的現(xiàn)有處理器(諸如Pentium處理器)所用的X86指令集兼容的指令集。從而,在一個實施例中,處理器109支持所有IATM-Intel體系結(jié)構(gòu)支持的操作,其由Intel公司定義(見可從加州Santa Clara的Intel購得的“微處理器”,Intel資料卷1與卷2,1992與1993)。結(jié)果,除了本發(fā)明的操作外,處理器109也能支持現(xiàn)有的X86操作。雖然本發(fā)明描述為加入到基于X86的指令集中的,但替代實施例可將本發(fā)明包含進其它指令集中。例如,可將本發(fā)明包含進使用新指令集的64位處理器中。
圖2示出按照本發(fā)明的一個實施例的處理器的寄存器文件。寄存器文件150用來存儲包含控制/狀態(tài)信息、整數(shù)數(shù)據(jù)、浮點數(shù)據(jù)及分組數(shù)據(jù)在內(nèi)的信息。在圖2中所示的實施例中,寄存器文件150包含整數(shù)寄存器201、寄存器209、狀態(tài)寄存器208及指令指針寄存器211。狀態(tài)寄存器208指示處理器109的狀態(tài)。指令指針寄存器211存儲下一條要執(zhí)行的指令的地址。整數(shù)寄存器201、寄存器209、狀態(tài)寄存器209及指令指針寄存器211全都耦合在內(nèi)部總線170上。任何附加寄存器也可耦合在內(nèi)部總線170上。
在一個實施例中,寄存器209既用于分組數(shù)據(jù)也用于浮點數(shù)據(jù)。在一個這種實施例中,處理器109在任何給定時刻必須將寄存器209作為棧定位的浮點寄存器或非棧定位的分組數(shù)據(jù)寄存器之一對待。在這一實施例中,包含一個機制來允許處理器109在作為棧定位的浮點寄存器及非棧定位的分組數(shù)據(jù)寄存器的寄存器209上的操作之間切換。在另一個這種實施例中,處理器109可同時在作為非棧定位的浮點及分組數(shù)據(jù)寄存器的寄存器209上操作。作為另一示例,在另一實施例中,相同的這些寄存器可用來存儲整數(shù)數(shù)據(jù)。
當(dāng)然,可實現(xiàn)替代實施例來包含或多或少的寄存器組。例如,替代實施例可包含用來存儲浮點數(shù)據(jù)的單獨浮點寄存器組。作為另一示例,替代實施例可包含第一組寄存器,其分別用于存儲控制/狀態(tài)信息,及第二組寄存器,其分別能存儲整數(shù)、浮點及分組數(shù)據(jù)。為了清楚起見,一個實施例的寄存器不應(yīng)在意義上限制在特定類型的電路上。而是一個實施例的寄存器只須能存儲及提供數(shù)據(jù)及執(zhí)行這里描述的功能。
可將各種寄存器組(諸如整數(shù)寄存器201、寄存器209)實現(xiàn)成包含不同數(shù)目的寄存器與/或不同大小的寄存器。例如,在一個實施例中,整數(shù)寄存器201實現(xiàn)成存儲32位,而寄存器209實現(xiàn)成存儲80位(全部80位用來存儲浮點數(shù)據(jù),而只將64位用于分組數(shù)據(jù))。此外,寄存器209包含8個寄存器,R0 212a至R7 212h。R1 212a、R2 212b及R3 212c為寄存器209中的各個寄存器的例子??蓪⒓拇嫫?09中的一個寄存器的32位傳送到整數(shù)寄存器201中的一個整數(shù)寄存器中。類似地,可將整數(shù)寄存器中的值傳送到寄存器209中的一個寄存器的32位中。在另一實施例中,整數(shù)寄存器201各包含64位,并且64位數(shù)據(jù)可在整數(shù)寄存器201與寄存器209之間傳送。
圖3為展示按照本發(fā)明的一個實施例的處理器處理數(shù)據(jù)的概括性步驟的流程圖。即圖3示出處理器109在分組數(shù)據(jù)上執(zhí)行操作、在非分組數(shù)據(jù)上執(zhí)行操作或執(zhí)行某些其它操作時遵循的步驟。例如,這些操作中包含加載操作,用來自高速緩沖存儲器160、主存儲器104、只讀存儲器(ROM)106或數(shù)據(jù)存儲設(shè)備107的數(shù)據(jù)加載寄存器文件150中的寄存器。
在步驟301,解碼器165接收來自高速緩沖存儲器160或總線101之一的控制信號。解碼器165解碼該控制信號來確定要執(zhí)行的操作。
在步驟302,解碼器165存取寄存器文件150或存儲器中的單元。寄存器文件150中的寄存器或存儲器中的存儲單元是根據(jù)控制信號中指定的寄存器地址存取的。例如,對于分組數(shù)據(jù)上的操作,控制信號能包含SRC1、SRC2及DEST寄存器地址,SRC1是第一源寄存器的地址,SRC2是第二源寄存器的地址。在一些情況中,由于不是所有操作都需要兩個源地址,SRC2地址是選用的。如果一種操作不需要SRC2地址,則只使用SRC1地址。DEST是存儲結(jié)果數(shù)據(jù)的目的地寄存器的地址。在一個實施例中,SRC1或SRC2也用作DEST。相對于圖6a與6b更全面地描述SRC1、SRC2及DEST。存儲在對應(yīng)寄存器中的數(shù)據(jù)分別稱作Source1、Source2及Result。這些數(shù)據(jù)的各個的長度為64位。
在本發(fā)明的另一實施例中,SRC1、SRC2與DEST中任何一個或全部可定義處理器109可尋址的存儲空間中的一個存儲單元。例如,SRC1可標(biāo)識主存儲器104中的一個存儲單元,而SRC2標(biāo)識整數(shù)寄存器201中第一寄存器及DEST則標(biāo)識寄存器209中第二寄存器。這里為了簡化描述,將相對于存取寄存器文件150描述本發(fā)明。然而,這些存取也可對存儲器進行。
在步驟303,啟動執(zhí)行單元130在存取的數(shù)據(jù)上執(zhí)行操作。在步驟304,根據(jù)控制信號的要求,將結(jié)果存儲回寄存器文件150中。
數(shù)據(jù)與存儲格式
圖4示出按照本發(fā)明的一個實施例的分組數(shù)據(jù)類型。示出了三種分組數(shù)據(jù)格式分組字節(jié)401、分組字402及分組雙字403。在本發(fā)明的一個實施例中,分組字節(jié)為包含8個數(shù)據(jù)元素的64位長。各數(shù)據(jù)元素為一個字節(jié)長。通常,數(shù)據(jù)元素為與相同長度的其它數(shù)據(jù)元素一起存儲在單個寄存器(或存儲單元)中的一個數(shù)據(jù)段。在本發(fā)明的一個實施例中,存儲在一個寄存器中的數(shù)據(jù)元素數(shù)目為64位除以一個數(shù)據(jù)元素的位長度。
分組字402為64位長并包含4個字402數(shù)據(jù)元素。各字402數(shù)據(jù)元素包含16位信息。
分組雙字403為64位長并包含兩個雙字403數(shù)據(jù)元素。各雙字403數(shù)據(jù)元素包含32位信息。
圖5a至5c示出按照本發(fā)明的一個實施例的寄存器分組數(shù)據(jù)存儲表示。無符號分組字節(jié)寄存器表示510示出一個無符號分組字節(jié)401在寄存器R0 212a至R7 212h之一中的存儲。各字節(jié)數(shù)據(jù)元素的信息存儲在字節(jié)0的位7至位0中、字節(jié)1的位15至位8中、字節(jié)2的位23至位16中、字節(jié)3的位31至位24中、字節(jié)4的位39至位32中、字節(jié)5的位47至位40中、字節(jié)6的位55至位48中及字節(jié)7的位63至位56中。因此可以使用該寄存器中的所有可用位。這一存儲布置提高了處理器的存儲效率。同樣,使用所存取的8個數(shù)據(jù)元素,可以同時在8個數(shù)據(jù)元素上執(zhí)行一種操作。帶符號分組字節(jié)寄存器表示511示出帶符號分組字節(jié)401的存儲。注意每一個字節(jié)數(shù)據(jù)元素的第8位為符號指示位。
無符號分組字寄存器表示512示出字3至字0是如何存儲在寄存器209的一個寄存器中的。位15至位0包含字0的數(shù)據(jù)元素信息,位31至位16包含數(shù)據(jù)元素字1的信息,位47至位32包含數(shù)據(jù)元素字2的信息及位63至位48包含數(shù)據(jù)元素字3的信息。帶符號分組字寄存器表示513類似于無符號分組字寄存器表示512。注意各字?jǐn)?shù)據(jù)元素的第16位為符號指示位。
無符號分組雙字寄存器表示514示出寄存器209如何存儲兩個雙字?jǐn)?shù)據(jù)元素。雙字0存儲在寄存器的位31至位0中。雙字1存儲在寄存器的位63至位32中。帶符號分組雙字寄存器表示515類似于無符號分組雙字寄存器表示514。注意必要的符號位為雙字?jǐn)?shù)據(jù)元素的第32位。
如上所述,寄存器209既可用于分組數(shù)據(jù)也可用于浮點數(shù)據(jù)。在本發(fā)明的這一實施例中,可能需要單個編程處理器109來跟蹤諸如R0 212a等被尋址的寄存器正存儲分組數(shù)據(jù)還是浮點數(shù)據(jù)。在一個替代實施例中,處理器109可跟蹤存儲在寄存器209的各個寄存器中的數(shù)據(jù)的類型。如果例如試圖在浮點數(shù)據(jù)上進行分組加法運算時,這一替代實施例便能產(chǎn)生出錯。
控制信號格式
下面描述處理器109用來處理分組數(shù)據(jù)的控制信號格式的一個實施例。在本發(fā)明的一個實施例中,控制信號表示為32位。解碼器165可從總線101接收控制信號。在另一實施例中,解碼器165也能從高速緩沖存儲器160接收這些控制信號。
圖6a示出用于指示使用按照本發(fā)明的一個實施例的分組數(shù)據(jù)的控制信號格式。操作字段OP 601,位31至位26,提供關(guān)于處理器109要執(zhí)行的操作的信息,例如,分組加法等。SRC1 602,位25至20,提供寄存器209中的寄存器的源寄存器地址。這一源寄存器包含要用在控制信號的執(zhí)行中的第一分組數(shù)據(jù)Source1。類似地,SRC2 603,位19至位14,包含寄存器209中的寄存器地址。這一第二源寄存器包括要在操作的執(zhí)行期間使用的分組數(shù)據(jù)Source2。DEST 605,位5至位0,包含寄存器209中的寄存器的地址。這一目的地寄存器將存儲分組數(shù)據(jù)操作的結(jié)果分組數(shù)據(jù)Result。
控制位SZ 601,位12與位13,指示第一與第二分組數(shù)據(jù)源寄存器中的數(shù)據(jù)元素的長度。如果SZ 610等于012,則分組數(shù)據(jù)格式化成分組字節(jié)401。如果SZ 601等于102,則分組數(shù)據(jù)格式化成分組字402。SZ 610等于002或112是保留的,然而,在另一實施例中,可用這些值之一來指示分組雙字403。
控制位T 611,位11,指示操作是否要以飽和模式進行。如果T 611等于1,則執(zhí)行飽和操作。如果T 611等于0,則執(zhí)行非飽和操作。稍后將描述飽和操作。
控制位S 612,位10,指示帶符號操作的使用。如果S 612等于1,則執(zhí)行帶符號操作。如果S 612等于0,則執(zhí)行無符號操作。
圖6b示出按照本發(fā)明的一個實施例用于指示使用分組數(shù)據(jù)的第二控制信號格式。這一格式對應(yīng)于可從Intel公司文獻銷售處(郵政信箱7641,Mt.prospect IL.60056-7641)購得的“Pentium處理器系列用戶手冊”中描述的通用整數(shù)操作碼格式。注意,OP 601、SZ 610、T611及S 612全部組合進一個大字段中。對于一些控制信號,位3至5為SRC1 602。在一個實施例中,其中存在SRC1 602地址,則位3至5也對應(yīng)于DEST 605。在一個替代實施例中,其中存在SRC2 603地址,則位0至2也對應(yīng)于DEST 605。對于其它控制信號,象分組移位立即操作,位3至5表示操作碼字段的擴展。在一個實施例中,這一擴展允許程序員用控制信號包含一個立即值,諸如移位計數(shù)值。在一個實施例中,立即值在控制信號后面。這在“Pentium處理器系列用戶手冊”附錄F,F(xiàn)-1至F-3頁中更詳細(xì)地描述。位0至2表示SRC2 603。這一通用格式允許寄存器對寄存器、存儲器對寄存器、寄存器被存儲器、寄存器被寄存器、寄存器被立即數(shù)、寄存器對存儲器的尋址。在一個實施例中,這一通用格式也能支持整數(shù)寄存器對寄存器及寄存器對整數(shù)寄存器的尋址。
飽和/非飽和的描述
如上所述,T 611指示操作是否可選擇飽和。如果允許了飽和的操作結(jié)果上溢或下溢出數(shù)據(jù)的范圍時,其結(jié)果將被箝位。箝位意味著如果結(jié)果超出范圍的最大或最小值時,便將結(jié)果設(shè)定在最大或最小值上。在下溢的情況中,飽和將結(jié)果箝位到范圍的最低值上,而在上溢的情況中,則到最高值上。表4中示出各數(shù)據(jù)格式的允許范圍。
表4
如上所述,T 611指示正在執(zhí)行飽和操作。因此,使用無符號字節(jié)數(shù)據(jù)格式,如果操作結(jié)果=258且允許飽和,則將結(jié)果存儲到操作的目的地寄存器中之前將其箝位到255。類似地,如果操作結(jié)果=-32999且處理器109使用帶符號字?jǐn)?shù)據(jù)格式且允許飽和,則在將結(jié)果存儲到操作的目的地寄存器中之前將其箝位到-32768上。
乘-加運算
在本發(fā)明的一個實施例中,SRC1寄存器包含分組數(shù)據(jù)(Source1),SRC2寄存器包含分組數(shù)據(jù)(Source2),而DEST寄存器將包含在Source1與Souce2上執(zhí)行乘-加運算的結(jié)果(Result)。在乘-加運算的第一步中,將Source1的各數(shù)據(jù)元素獨立地乘以Source2的對應(yīng)數(shù)據(jù)元素以生成一組對應(yīng)的中間結(jié)果。成對相加這些中間結(jié)果以生成乘-加運算的Result。
在本發(fā)明的一個實施例中,乘-加運算在帶符號分組數(shù)據(jù)上操作并截位結(jié)果以防止任何上溢。此外,該運算在分組字?jǐn)?shù)據(jù)上操作而Result為分組雙字。然而,替代實施例能支持其它分組數(shù)據(jù)類型的運算。
圖7為展示按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行乘-加運算的步驟的流程圖。
在步驟701,解碼器165解碼處理器109接收的控制信號。從而,解碼器165解碼出乘-加運算的操作碼。
在步驟702,解碼器165通過內(nèi)部總線170存取寄存器文件150中給出SRC1 602與SRC2 603地址的寄存器209。寄存器209向執(zhí)行單元130提供存儲在SRC1寄存器中的分組數(shù)據(jù)(Source1)及存儲在SRC2 603寄存器中的分組數(shù)據(jù)(Source2)。即,寄存器209通過內(nèi)部總線170將分組數(shù)據(jù)傳遞給執(zhí)行單元130。
在步驟703,解碼器165啟動執(zhí)行單元130的乘-加單元145去執(zhí)行指令。在步驟714中,執(zhí)行下述操作。將Source1位15至0乘以Source2位15至0生成第一個32位中間結(jié)果(中間Result1)。將Source1位31至16乘以Source2位31至16生成第二個32位中間結(jié)果(中間Result2)。將Source1位47至32乘以Source2位47至32生成第三個32位中間結(jié)果(中間Result3)。將Source1位63至48乘以Source2位63至48生成第四個32位中間結(jié)果(中間Result4)。將中間Result1與中間Result2相加生成Result位31至0,并將中間Result3與中間Result4相加生成Result位63至32。
不同的實施例可串行、并行或以串行與并行運算的一定組合執(zhí)行乘與加。
在步驟720,將Result存儲在DEST寄存器中。
分組數(shù)據(jù)乘-加電路
在一個實施例中,能在與非組裝數(shù)據(jù)上的單一乘法相同的時鐘周期中在多個數(shù)據(jù)元素上執(zhí)行乘-加運算。為了達到在相同的時鐘周期數(shù)中的執(zhí)行,采用了并行性。即,同時指示寄存器在數(shù)據(jù)元素上執(zhí)行乘-加運算。
簡言之,圖8示出按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行乘-加運算的電路。運算控制800處理乘-加指令的控制信號。運算控制在使能880上輸出信號來控制分組乘-加法器801。
分組乘-加法器801具有下述輸出Source1[63:0]831、Source2[63:0] 833及使能880。分組乘-加法器801包含4個16×16乘法器電路16×16乘法器A 810、16×16乘法器B 811、16×16乘法器C 812及16×16乘法器D 813。16×16乘法器A 810具有輸入Source1[15:0]及Source2[15:0]。16×16乘法器B 811具有輸入Source1[31:16]及Source2[31:16]。16×16乘法器C 812具有輸入Source1[47:32]及Source2[47:32]。16×16乘法器D 813具有輸入Source1[63:48]及Source2[63:48]。加法器1350接收16×16乘法器A810及16×16乘法器B 811生成的32位中間結(jié)果,同時加法器851接收16×16乘法器C 812及16×16乘法器D 813生成的32位中間結(jié)果。
加法器850與851將它們各自的32位輸入相加。加法器850的輸出(即Result的Result位31至0)及加法器851的輸出(即Result的位63至32)組合成64位Result并傳遞給結(jié)果寄存器871。
在一個實施例中,各加法器851與加法器850由帶適當(dāng)傳播延時的32位加法器構(gòu)成。然而替代實施例可用任何一種方式實現(xiàn)加法器851與加法器850。
使用參照表1所描述的先有技術(shù)DSP處理器執(zhí)行這一乘-加指令的等效操作需要一條指令來清零累加值及四條乘累加指令。使用參照表2描述的先有技術(shù)DSP處理器執(zhí)行這一乘-加指令的等效操作需要一條指令來清零累加值及2條累加指令。
在本發(fā)明的乘-加單元145的一個實施例中,在本發(fā)明中用于分組乘法運算的各16位乘法器是用2位Booth算法實現(xiàn)的,乘法器中的Booth算法的主要目的是減少要相加的部分乘積的數(shù)目。較少的部分乘積最終減少乘法器的硬件與面積需求。下面表5描述在其中生成16個部分乘積的普通16位乘法過程。取決于乘數(shù)的相應(yīng)位是“1”還是“0”,將各部分乘積向左移位一位并包含全“0”項或被乘數(shù)的完全復(fù)制。通過逐片相加全體16個部分乘積生成32位結(jié)果。
表5
× × × × × × × × × × × × × × × ×16位
被乘數(shù)
× × × × × × × × × × × × × × × ×16位
乘數(shù)
× × × × × × × × × × × × × × × ×pp0
× × × × × × × × × × × × × × × × pp1
× × × × × × × × × × × × × × × ×pp2
× × × × × × × × × × × × × × × × pp3
× × × × × × × × × × × × × × × ×pp4
× × × × × × × × × × × × × × × × pp5
× × × × × × × × × × × × × × × × pp6
× × × × × × × × × × × × × × × × pp7
× × × × × × × × × × × × × × × × pp8
× × × × × × × × × × × × × × × ×pp9
× × × × × × × × × × × × × × × × pp10
× × × × × × × × × × × × × × × × pp11
× × × × × × × × × × × × × × × × pp12
× × × × × × × × × × × × × × × ×pp13
× × × × × × × × × × × × × × × × pp14
× × × × × × × × × × × × × × × ×pp15
× × × × × × × ... . . × × × × × × × 32位結(jié)果
另一方面,下面表6中所示的2位Booth乘法器的操作不同。在這一情況中總共有8個部分乘積及每個部分乘積為17位長。每一部分乘積具有其本身的控制各自的部分乘積內(nèi)容的Booth編碼器。在替代實施例中,也能使用其它Booth編碼器方案來選擇部分乘積。
典型的2位Booth編碼器具有五個輸出,它們用于0、加1、加2、減1及減2運算。其真值表在下面的表6中給出。
表6
BOOTH=-2yk+yk+yk-1
如表6中所述,yk+1、yk及yk-1是遞降的位次序的相鄰乘數(shù)位。下面的表7進一步描述按照Booth編碼器輸出的部分乘積的形式。
表7
不是采用符號延伸部分乘積,而是采用符號生成法來減少部分乘積縮短所需的進位同一地址(Carry Same Address(CSA))的數(shù)目。表8示出了符號生成方法。將部分乘積的符號位的補碼預(yù)掛在部分乘積上。然后將兩個1位預(yù)掛在符號位的補碼上。
表8
符號延伸法 符號生成法
1
S1 S1 S1部分乘積1 1 S1部分乘積
S2 S2部分乘積2 1 S2部分乘積2
部分乘積3 1 S3部分乘積3
下面的表9示出用在使用2位Booth編碼器及符號生成法來生成8個部分乘積的本發(fā)明的一個實施例中的16位乘法過程。
表9
在一個實施例中,各Booth編碼器包含3個相鄰的乘數(shù)位(y0為乘數(shù)位的最低位而y15為最高位)。部分乘積的形式是用連接在特定Booth編碼器上的17個選擇器及一個求反電路定義的。選擇器的數(shù)據(jù)位中包含兩個相鄰的乘數(shù)位、它們的補碼及Vcc(對于0運算)。然后選中的輸出通過通常稱作Wallace樹的部分乘積歸約樹的迷宮。
一旦全部選擇了部分乘積,便開始部分乘積的求和。Wallace樹是用全加法器及半加法器構(gòu)成的。圖9a-9e示出本發(fā)明的一個實施例的執(zhí)行部分乘積求和與歸約的Wallace樹,如用乘-加單元145中的4個16位乘法器的每一個所實現(xiàn)的。如上所示,將8個部分乘積歸約成6個部分乘積,然后成4個部分乘積,然后成3個部分乘積,然后最終歸約成兩個部分乘積。
更具體地,如圖9a-9e中所示,各行中的下標(biāo)數(shù)字表示部分乘積的位(ase15,as15,a14-a0)。各行表示一個獨立的部分乘積。negn-nega表示各部分乘積的2的補碼的+1部分。結(jié)果,如果乘數(shù)的某一Booth編碼的位是負(fù)的,顯示在下一行中的該對應(yīng)部分乘積的“neg”位為1。
此外,如圖9a-9e中進一步示出的,S<位置><加法器號>表示進位保留加法器的和部分。<加法器號>指示和屬于哪一行加法器。加法器是從圖9a-9e的頂?shù)降拙幪柕摹?lt;位置>指示這一加法器運算的位位置(0…31)。例如,S42為對應(yīng)于位位置4的進位保留加法器2的和。
C<位置><級>表示保留進位加法器的進位部分。<級>指示該進位的各加法器行。<位置>指示這一加法器運算的位位置(0…31)。保留進位加法器可以是全加法器或半加法器。全加法器將3位相加。半加法器相加兩位。
圖9a-9e進一步示出上述符號生成方法的實現(xiàn)。如所示,符號生成法在第一部分乘積行上方的行中的位位置16上產(chǎn)生一個1。在最后部分乘積行中,如果最高Booth編碼數(shù)是負(fù)的,便在下面行中產(chǎn)生一個1,因為該部分乘積是2的補碼。這一過程通常需要10行而不是8行。乘法需要的行越多,越需要更多的硬件來將部分乘積減少到一個進位傳播加法器能相加的兩個數(shù)。
然而,二進制乘法是通過加法執(zhí)行的。將兩個數(shù)字相加時,數(shù)字的次序是無關(guān)的。不管哪一個數(shù)字作為第一數(shù)字結(jié)果都一樣。這一原理貫穿整個Wallace樹以減少所需的進位保留數(shù)目。具體地,在一個實施例中,將圖9a中第一行的位位置16中的1向下移動到圖9的最后一行中的位位置16上,它也包含negh。結(jié)果,由于使用了較少的行而進行歸約所需的硬件也較少。
圖9b示出第一級歸約的結(jié)果。框指示哪些位在保留進位加法器中運算。來回移動若干位來符合6行中的所有位。例如,將位dse15移至第一行。將cse15移至第五行。然而,一位只能在同一位位置中上下移動。從圖9b至圖9c行數(shù)減少到4。從圖9c到圖9e行數(shù)減少到3。最后,又一行保留進位加法器將行數(shù)減少到2,如圖9e中所示。
圖10a-10f示出電路的一個實施例,該電路由全加法器與半加法器構(gòu)成,實現(xiàn)圖9a-9e中所示的Wallace樹圖。
圖11示出該單元的方框圖的一個實施例。其中示出了兩個完全相同的16位乘法器。這些乘法器能在0-31位或32-63位上執(zhí)行乘-加運算。還提供了另外兩個16位乘法器,它們在結(jié)構(gòu)上與所示的乘法器十分相似,用來完成乘-加單元145。如所示,各乘法器在1.5個時鐘周期中完成一次16位乘法得出2個部分乘積。在后半個時鐘周期中,即第34時鐘的低相位,由4:2 CSA1130將乘法器1110與1120生成的4個部分乘積再度相加??刂菩盘?150選擇乘法器1110的部分乘積或在4:2 CSA1130的輸出上生成的部分乘積(Sumres與coutres)。將選中的數(shù)據(jù)與乘法器1120的部分乘積一起鎖存。在第35個時鐘的高相位上,CPA1140通過相加得出的部分乘積生成一個32位結(jié)果。32位和的最后分割是由fub外部的多路鎖存器完成的并將所選擇的數(shù)據(jù)在第35時鐘周期的低相位寫回。
在一個實施例中,乘-加單元145以3個等待時間-1個吞托量規(guī)則操作。除非另有說明,單元145每當(dāng)將一個非流水線的數(shù)據(jù)流引導(dǎo)到輸入上時需要3個時鐘周期來完成其任務(wù)。單元145的所有輸入都是緩沖存儲的,這對外部世界提供非常小的容量。
即使在32L開始時在單元145的輸入上能得到數(shù)據(jù),在33H開始前數(shù)據(jù)可能是無效的。因此,假定乘法是在33H開始時啟動的。在33H期間被乘數(shù)輸入上的有效與穩(wěn)定數(shù)據(jù)流經(jīng)延時元件并分別被鎖存器1160與1170鎖存。與此同時,乘數(shù)輸入上的數(shù)據(jù)傳播通過輸入緩沖器及Booth編碼器1165與1175并被鎖存器1180與1182鎖存。此時,乘數(shù)與被乘數(shù)路徑上的數(shù)據(jù)是完全互相同步的。在331中,數(shù)據(jù)通過位選擇器陣列及一組全加法器,它構(gòu)成Wallace樹的第一部分并在鎖存器1180與1182的建立時間之前成為有效的。在這一點上的部分乘積數(shù)從8減少到4。在34H中,數(shù)據(jù)通過構(gòu)成Wallace樹的其余部分的另一組全加法器,并在被鎖存器1184與1186鎖存以前在34H結(jié)束時成為有效與穩(wěn)定的。
如上所述,在34L中數(shù)據(jù)通過4:2壓縮器1130(兩個串聯(lián)的全加法器)及一個2:1多路復(fù)用器1135用于最后的部分乘積選擇。數(shù)據(jù)在被鎖存器1190鎖存之前在34L結(jié)束時成為有效的。在35H期間,在鎖存器1190輸出上的兩個部分乘積最終被歸約成一個和矢量。這一和矢量被單元145外部的多路鎖存邊界-鎖存器1195分成數(shù)部份與鎖存。在35L中,數(shù)據(jù)能用于寫回操作。
如上所述,前面的乘累加指令總是將它們的乘法結(jié)果加在累加值上。這一累加值成為執(zhí)行乘與累加以外的操作的瓶頸(例如,在每次需要并不要求前面的累加值的一組新的操作時,必須清除該累加值)。如果在累加之前需要執(zhí)行諸如四舍五入等操作時,這一累加值也成為瓶頸。
相反,所公開的乘-加操作并不將累加值向前帶。結(jié)果,在更廣的各種算法中更容易使用這些指令。此外,可利用軟件流水作業(yè)來達到相當(dāng)?shù)耐掏铝?。為了展示?加指令的通用性,下面描述多媒體算法的一些示例。這些多媒體算法中的一些采用另外的分組數(shù)據(jù)指令。這些另外的分組數(shù)據(jù)指令的操作是相對于所描述的算法示出的。對于這些分組數(shù)據(jù)指令的進一步描述,見名稱為“在分組數(shù)據(jù)上操作的指令集”的申請。當(dāng)然,也能使用其它分組數(shù)據(jù)指令。此外,在下面的示例中已省略了需要使用通用處理器指令來管理數(shù)據(jù)傳送、循環(huán)及條件轉(zhuǎn)移的若干步驟。
1)復(fù)數(shù)乘法
所公開的乘-加指令能用來在單一的指令中將兩個復(fù)數(shù)相乘,如表10a中所示。如上所述兩個復(fù)數(shù)(諸如r1i1與r2i2)的乘法是按照下述公式執(zhí)行的
實部=r1·r2-i1·i2
虛部=r1·i2+r2·i1
如將這一指令實現(xiàn)為在每一時鐘周期中完成,本發(fā)明便能在每一時鐘周期中乘兩個復(fù)數(shù)。
表10a
Multiply-Add Source1,Source2
Source1Source2Result
Multiply-Add Source1,Source2
Source1Source2Result1
Packed Shift Right Source1,Source2
Result1Result2
作為另一示例,表10b示出用來將三個復(fù)數(shù)相乘的指令。
表10b
Pack Result2,Result2
Result2Result2Result3
Multiply-Add Result3,Source3
Result3Source3Result4
2)乘累加運算
所公開的乘-加指令也能用來乘與累加值。例如,可將兩組四個元素(A1-4及B1-4)相乘及累加,如下面表11中所示。在一個實施例中,將表6中所示各指令實現(xiàn)成在每一時鐘周期中完成。
表11
Multiply-Add Source1,Source2
Source1Source2Result1
Multiply-Add Source3,Source4
Source3Source4Result2
Unpacked Add Result1,Result2
Result1Result2Result3
如果各組中的數(shù)據(jù)元素數(shù)目超過8且為4的倍數(shù),如果如下面表12中所示那樣執(zhí)行的話,這些組的乘法與累加需要較少的指令。
表12
Multiply-Add Source1,Source2
Source1Source2Result1
Multirply-Add Source3,Source4
Source3Source4Result2
Packed Add Result1,Result2
Result1Result2Result3
Unpack High Result3,Source5
Result3Source5Result4
Unpack Low Result3,Source5
Result3Source5Result5
Packed Add Result4,Result5
Result4Result5Result6
作為另一示例,表13示出組A與B以及組C與D的單獨的乘法與累加,其中這些組中每一個包含2個數(shù)據(jù)元素。
表13
Multiply-Add Source1,Source2
Source1Source2Result1
作為另一示例,表14示出組A與B以及組C與D的單獨的乘法與累加,其中這些組中每一個包含4個數(shù)據(jù)元素。
表14
Multiply-Add Source1,Source2
Source1Source2Result1
Multiply-Add Source3,Source4
Source3Source4Result2
Packed Add Result1,Result2
Result1Result2Result6
3)點積算法
點積(也稱內(nèi)積)用在信號處理及短陣運算中。例如,在計算矩陣的積、數(shù)字濾波運算(諸如FIR與IIR濾波)及計算相關(guān)序列時使用點積。由于許多話音壓縮算法(如GSM、G.728、CELP及VSELP)及高保真壓縮算法(諸如MPEG及子帶編碼)廣泛地利用數(shù)字濾波及相關(guān)計算,提高點積的性能便提高這些算法的性能。
兩個長度為N的序列A與B的點積定義為
執(zhí)行點積計算廣泛地利用乘累加運算,在其中將各序列的對應(yīng)元素相乘,并累加這些結(jié)果以形成點積結(jié)果。
點積計算能用乘-加指令執(zhí)行。例如,如果使用包含4個16位元素的分組數(shù)據(jù)類型,便可按下列步驟在各包含4個值的兩個序列上執(zhí)行點積計算
1)使用傳送指令從A序列中取4個16位值以生成Source1;
2)使用傳送指令從B序列中取4個16位值以生成Source2;以及
3)使用乘-加、分組加法及移位指令如上所述執(zhí)行乘與累加。
對于只有數(shù)個元素的矢量,使用表9中所示的方法,并在最后,將最終結(jié)果相加。其它支持指令包含用于初始化累加器寄存器的分組“或”與“異或”指令,用于在計算的最終階段移出不需要的值的分組移位指令。循環(huán)控制操作使用處理器109的現(xiàn)成指令集中的指令完成。
4)離散余弦變換算法
離散余弦變換(DCT)為用在許多信號處理算法中的著名函數(shù)。尤其是視頻與圖象壓縮算法廣泛地利用這一變換。
在圖象與視頻壓縮算法中,利用DCT將一塊象素從空間表示變換到頻率表示。在頻率表示中,將畫面信息分成頻率分量,一些分量比其它分量更重要。壓縮算法有選擇地量化或丟棄對重構(gòu)的畫面內(nèi)容并無不利影響的頻率分量。以這一方式,達到壓縮的目的。
DCT有許多實現(xiàn)方法,最流行的是基于快速傅里葉變換(FFT)計算流程建模的某種快速變換法。在該快速變換中,將N階變換分解成N/2階變換的組合,并重新組合其結(jié)果。這一分解一直可進行到到達最小的2階變換為止。這一基本2階變換核通常稱作蝶式運算。蝶式運算表示如下
X=a*x+b*y
Y=c*x-d*y
其中a、b、c與d稱作系數(shù),x與y為輸入數(shù)據(jù),而X與Y為變換輸出。
乘-加允許以下述方式利用分組數(shù)據(jù)執(zhí)行DCT計算
1)使用傳送與分解指令取兩個表示x與y的16位值以生成Source1(見下面表15);
2)生成下面表15中所示的Source2--注意在數(shù)次蝶式運算上可以重復(fù)使用Source2;以及
3)利用Source1與Source2執(zhí)行乘-加指令以生成結(jié)果(見下面表15)。
表15
Source1
Source2
Source3
在某些情況中,蝶式運算的系數(shù)為1。對于這些情況,蝶式運算退化成只是加與減,它們可用分組加法與分組減法指令執(zhí)行。
一份IEEE文件規(guī)定為電視會議執(zhí)行的逆DCT應(yīng)有的精度。(見IEEE電路與系統(tǒng)協(xié)會,“實現(xiàn)8×8逆離散余弦變換的IEEE標(biāo)準(zhǔn)規(guī)范”,IEEE std.1180-1990,IEEE Inc.,345 East 47th St.NY,NY10017,USA,1991年3月18日)。所公開的乘-加指令滿足所要求的精度,因為它使用16位輸入生成32位輸出。
以這一方式,所述乘-加指令能用來增進若干不同算法的性能,其中包含需要復(fù)數(shù)乘法的算法、需要變換的算法及需要乘累加運算的算法。結(jié)果,這一乘-加指令能用在通用處理器中來增進比上述指令更多數(shù)量的算法的性能。
雖然已對若干實施例描述了本發(fā)明,熟悉本技術(shù)的人員將認(rèn)識到本發(fā)明不限于所述實施例。本發(fā)明的方法與裝置能用所附權(quán)利要求書的精神與范圍內(nèi)的修改與改變來實現(xiàn)。從而,應(yīng)認(rèn)為本說明書是示例性的而不是對本發(fā)明的限制。
權(quán)利要求
1.一種方法,包括以下步驟
接收第一指令,所述第一指令的指令格式包括第一操作碼、第一字段和第二字段,所述第一字段表示具有第一多個數(shù)據(jù)元素的第一操作數(shù),至少包括A1、A2、A3和A4作為數(shù)據(jù)元素,所述第二字段表示具有第二多個數(shù)據(jù)元素的第二操作數(shù),至少包括B1、B2、B3和B4作為數(shù)據(jù)元素,所述第一和第二多個數(shù)據(jù)元素中的每個所述數(shù)據(jù)元素長度都為N比特;及
通過執(zhí)行(A1×B1)+(A2×B2)運算以產(chǎn)生分組數(shù)據(jù)的第一數(shù)據(jù)元素,并執(zhí)行(A3×B3)+(A4×B4)運算以產(chǎn)生所述分組數(shù)據(jù)的第二數(shù)據(jù)元素,對所述第一指令作出響應(yīng),把長度至少為4N比特的所述分組數(shù)據(jù)存儲在結(jié)構(gòu)可見目標(biāo)操作數(shù)中,其中每個所述第一和第二數(shù)據(jù)元素長度至少為2N比特。
2.如權(quán)利要求1所述的方法,其特征在于,所述第一指令是乘-加指令。
3.如權(quán)利要求1或2所述的方法,其特征在于還包括以下步驟
用所述目標(biāo)操作數(shù)的分組數(shù)據(jù)來改寫所述第一操作數(shù)的第一多個數(shù)據(jù)元素。
4.如權(quán)利要求1-3中任何一項權(quán)利要求所述的方法,其特征在于還包括以下步驟
用所述分組數(shù)據(jù)的第一數(shù)據(jù)元素來改寫所述第一多個數(shù)據(jù)元素的數(shù)據(jù)元素A1和A2。
5.如權(quán)利要求1-4中任何一項權(quán)利要求所述的方法,其特征在于還包括以下步驟
用所述分組數(shù)據(jù)的第二數(shù)據(jù)元素來改寫所述第一多個數(shù)據(jù)元素的數(shù)據(jù)元素A3和A4。
6.如權(quán)利要求1-5中任何一項權(quán)利要求所述的方法,其特征在于,所述目標(biāo)操作數(shù)由所述第一字段來表示。
7.如權(quán)利要求1-6中任何一項權(quán)利要求所述的方法,其特征在于,所述第一字段包括所述指令格式的比特3-5。
8.如權(quán)利要求1-7中任何一項權(quán)利要求所述的方法,其特征在于,所述第二字段包括所述指令格式的比特0-2。
9.如權(quán)利要求1-8中任何一項權(quán)利要求所述的方法,其特征在于,每個所述第一和第二數(shù)據(jù)元素的長度為32比特。
10.如權(quán)利要求1-9中任何一項權(quán)利要求所述的方法,所述第一多個數(shù)據(jù)元素還包括A5、A6、A7和A8作為數(shù)據(jù)元素,所述第二分組數(shù)據(jù)還包括B5、B6、B7和B8作為數(shù)據(jù)元素,所述方法還包括以下步驟
執(zhí)行(A1×B1)+(A2×B2)運算以產(chǎn)生所述分組數(shù)據(jù)的第三數(shù)據(jù)元素,執(zhí)行及(A3×B3)+(A4×B4)運算以產(chǎn)生所述分組數(shù)據(jù)的第四數(shù)據(jù)元素。
11.如權(quán)利要求1-10中任何一項權(quán)利要求所述的方法,其特征在于還包括以下步驟
從第一結(jié)構(gòu)可見寄存器中取所述第一多個數(shù)據(jù)元素;及
將所述分組數(shù)據(jù)存儲在所述第一結(jié)構(gòu)可見寄存器中的所述第一多個數(shù)據(jù)元素上。
12.如權(quán)利要求1-11中任何一項權(quán)利要求所述的方法,其特征在于還包括以下步驟
從第二結(jié)構(gòu)可見寄存器中取所述第二多個數(shù)據(jù)元素。
13.如權(quán)利要求1-11中任何一項權(quán)利要求所述的方法,其特征在于還包括以下步驟
從存儲器存儲單元中取所述第二多個數(shù)據(jù)元素。
14.一種制造產(chǎn)品,包括
機器可存取媒體,該媒體含有數(shù)據(jù),該數(shù)據(jù)在由機器存取時使所述機器執(zhí)行如權(quán)利要求1-13中任何一項權(quán)利要求所述的一種或多種方法。
15.一種制造產(chǎn)品,包括
機器可存取媒體,該媒體含有適合至少一種處理技術(shù)的設(shè)計數(shù)據(jù),所述設(shè)計數(shù)據(jù)實施一種設(shè)備來執(zhí)行如權(quán)利要求1-13中任何一項權(quán)利要求所述的一種或多種方法。
16.一種執(zhí)行如權(quán)利要求1-13中任何一項權(quán)利要求所述的一種或多種方法的設(shè)備,所述設(shè)備包括
第一存儲單元,它存儲所述第一多個數(shù)據(jù)元素;
第二存儲單元,它存儲所述第二多個數(shù)據(jù)元素;
解碼器,它存取所述第一和第二存儲單元;
第三存儲單元,它存儲表示至少一個指令的數(shù)據(jù)并提供所述至少一個指令給所述解碼器;
功能單元,用來與所述解碼器連接,所述解碼器和所述功能單元至少部分地對包含所述第一指令的所述至少一個指令作出響應(yīng),執(zhí)行如權(quán)利要求1-13中任何一項權(quán)利要求所述的一種或多種方法。
17.一種設(shè)備,包括
第一和第二存儲單元,它們分別存儲第一和第二分組數(shù)據(jù),其中每一個都包括四個初始數(shù)據(jù)元素,所述第一分組數(shù)據(jù)中的每個所述初始數(shù)據(jù)元素對應(yīng)于所述第二分組數(shù)據(jù)中的不同初始數(shù)據(jù)元素,以產(chǎn)生四對初始數(shù)據(jù)元素,
解碼器,它對第一指令進行解碼,所述第一指令將所述第一和第二存儲單元分別指定為第一和第二操作數(shù),及
與所述寄存器堆和所述解碼器連接的電路,所述電路對所述第一指令作出響應(yīng),將所述第一和第二分組數(shù)據(jù)中的對應(yīng)初始數(shù)據(jù)元素一起相乘,以產(chǎn)生對應(yīng)的中間數(shù)據(jù)元素,所述中間數(shù)據(jù)元素配對成兩組,
將所述兩組的每一組中的中間數(shù)據(jù)元素相加,以產(chǎn)生兩個結(jié)果數(shù)據(jù)元素,所述兩個結(jié)果數(shù)據(jù)元素中的每一個都比所述初始數(shù)據(jù)元素提供更高的精度,并把包括所述兩個結(jié)果數(shù)據(jù)元素的第三分組數(shù)據(jù)作為執(zhí)行所述第一指令的結(jié)果而存儲在單個寄存器中。
18.如權(quán)利要求17所述的設(shè)備,其特征在于,所述第一指令的格式包括三個或更多字節(jié),所述三個或更多字節(jié)的第三字節(jié)允許第一3比特源-目標(biāo)寄存器地址和第二3比特源-寄存器地址。
19.如權(quán)利要求18所述的設(shè)備,其特征在于,所述第一操作數(shù)對應(yīng)于所述第一3比特源-目標(biāo)寄存器地址。
20.如權(quán)利要求17-19中任何一項權(quán)利要求所述的設(shè)備,其特征在于,所述第二操作數(shù)對應(yīng)于存儲器中可尋址存儲單元。
21.如權(quán)利要求18或19所述的設(shè)備,其特征在于,所述第二操作數(shù)對應(yīng)于所述第二3比特源-目標(biāo)寄存器地址。
22.如權(quán)利要求18-21中任何一項權(quán)利要求所述的設(shè)備,其特征在于,所述電路把所述第三分組數(shù)據(jù)存儲到對應(yīng)于所述第一3比特源-目標(biāo)寄存器地址的目標(biāo)中。
23.如權(quán)利要求17所述的設(shè)備,其特征在于,所述第一指令的格式包括表示所述第一操作數(shù)的第一字段、表示所述第二操作數(shù)的第二字段、和表示存儲所述第三分組數(shù)據(jù)的目標(biāo)的第三字段。
24.如權(quán)利要求17-23中任何一項權(quán)利要求所述的設(shè)備,其特征在于還包括
保存所述第一指令的存儲器;和
保存軟件的存儲裝置,所述軟件提供所述第一指令給所述存儲器,所述指令解碼器從所述存儲器接收所述第一指令;
其中所述第一和第二分組數(shù)據(jù)每一個都包括M×N比特;及
所述第三分組數(shù)據(jù)包括M/2個分組2N比特結(jié)果。
25.如權(quán)利要求17-23中任何一項權(quán)利要求所述的設(shè)備,其特征在于所述電路包括
與第一和第二乘法器連接的第一保留進位加法器,所述第一和第二乘法器將第一和第二對應(yīng)初始數(shù)據(jù)元素一起相乘,所述第一保留進位加法器接收所述第一乘法器產(chǎn)生的兩個部分乘積和所述第二乘法器產(chǎn)生的兩個部分乘積,所述第一保留進位加法器為所述兩個結(jié)果數(shù)據(jù)元素中的第一結(jié)果數(shù)據(jù)元素產(chǎn)生第一組兩個部分乘積;及
與第三和第四乘法器連接的第二保留進位加法器,所述第三和第四乘法器將第三和第四對應(yīng)初始數(shù)據(jù)元素一起相乘,所述第二保留進位加法器接收所述第三乘法器產(chǎn)生的兩個部分乘積和所述第四乘法器產(chǎn)生的兩個部分乘積,所述第二保留進位加法器為所述兩個結(jié)果數(shù)據(jù)元素中的第二結(jié)果數(shù)據(jù)元素產(chǎn)生第二組兩個部分乘積。
26.一種適合處理數(shù)字音頻信號的系統(tǒng),所述系統(tǒng)包括
存儲第一M×N比特數(shù)據(jù)和第二M×N比特數(shù)據(jù)的存儲器,所述第一M×N比特數(shù)據(jù)包括第一組M個分組N比特數(shù)據(jù)元素,所述第二M×N比特數(shù)據(jù)包括第二組M個分組N比特數(shù)據(jù)元素;
處理器,它與所述存儲器連接,以存取所述第一和第二M×N比特數(shù)據(jù),并響應(yīng)指令而產(chǎn)生第三組M/2個分組2N比特結(jié)果,第一格式的所述指令用于識別與所述第一M×N比特數(shù)據(jù)對應(yīng)的第一源和與所述第二M×N比特數(shù)據(jù)對應(yīng)的第二源,所述第三組M/2個分組2N比特結(jié)果表示M/2個由所述第一和第二組M個分組N比特數(shù)據(jù)元素相乘的對應(yīng)數(shù)據(jù)元素的成對乘積之和;
總線,它連接到所述處理器,以向所述處理器或從所述處理器傳送數(shù)據(jù),并向所述存儲器或從所述存儲器傳送數(shù)據(jù);及
接口,它將所述總線與一個或一個以上的裝置連接,以向所述總線提供數(shù)據(jù)或從所述總線接收數(shù)據(jù),所述一個或多個裝置包括從包括音頻數(shù)字裝置、語音記錄裝置、語音播放裝置、麥克風(fēng)、數(shù)模轉(zhuǎn)換器和喇叭的組中選擇的音頻裝置。
27.如權(quán)利要求26所述的系統(tǒng),其特征在于,所述處理器將所述第一M×N比特數(shù)據(jù)改寫成所述第三組M/2個分組2N比特結(jié)果。
全文摘要
一種處理器具有分別含有第一與第二分組數(shù)據(jù)的第一與第二存儲器。各分組數(shù)據(jù)包含第一、第二、第三與第四數(shù)據(jù)元素。一個乘-加電路耦合在第一與第二存儲區(qū)上。乘-加電路包含第一(810)、第二(811)、第三(812)及第四乘法器(813),其中各乘法器接收一組對應(yīng)的所述數(shù)據(jù)元素。乘-加電路還包含耦合在第一與第二乘法器(810,811)上的第一加法器(850)及耦合在第三與第四乘法器(812,813)上的第二加法器(851)。第三存儲區(qū)(871)耦合在加法器(850,851)上。第三存儲區(qū)(871)包含第一與第二字段分別用于保存第一與第二加法器(850,851)的輸出,作為第三分組數(shù)據(jù)的第一與第二數(shù)據(jù)元素。
文檔編號G06F17/14GK1549106SQ03120299
公開日2004年11月24日 申請日期1996年8月7日 優(yōu)先權(quán)日1995年8月31日
發(fā)明者A·D·佩勒, M·米塔爾, L·M·曼內(nèi)梅爾, B·艾坦, C·杜龍, 小鷲英一, W·維特, D·C·林, A·賓達爾, S·A·費徹, T·H·貝, A D 佩勒, 一, 曼內(nèi)梅爾, 林, 貝, 費徹, 鋃 申請人:英特爾公司