欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于數據的并行右移位合并的方法和裝置的制作方法

文檔序號:6421112閱讀:125來源:國知局
專利名稱:用于數據的并行右移位合并的方法和裝置的制作方法
技術領域
本發(fā)明通常涉及微處理器和計算機系統領域。尤其是,本發(fā)明涉及一種用于數據的并行右移位合并的方法和裝置。
背景技術
本專利申請是于2001年10月29日提出的、名為“用于內容數據的有效過濾和卷積的裝置和方法(An Apparatus And Method For Efficient Filtering AndConvolution Of Content Data)”的US專利申請?zhí)?9/952,891的部分后續(xù)申請。
本專利申請涉及于2002年10月25日提出的、名為“使用SIMD合并指令進行快速完全搜索運動估計(Fast Full Search Motion Estimation With SIMD MergeInstruction)”的共同待決的美國專利申請?zhí)?_/____。
處理器技術進步了,也正在生成更加新的軟件代碼以在具有這些處理器的機器上運行。用戶通常期望和要求它們的計算機有更高的性能,而不考慮正在使用的軟件類型。由實際上正在處理器內被執(zhí)行的指令與操作的類型能夠引起這樣的一個問題。根據所需要的操作復雜性和/或電路類型,某些類型的操作要求有更多的完成時間。這提供了一個優(yōu)化在處理器內部執(zhí)行某些復雜操作的方式的機會。
近10多年來,媒體應用一直推動著微處理器的發(fā)展。實際上,近年來大多數的計算升級已經由媒體應用所推動。盡管在企業(yè)方面也已經看到了用于增強娛樂的教育和通信目的重要進展,但是這些升級主要發(fā)生在消費者方面。然而,將來的媒體應用將需要高得多的計算要求。因此,明天的個人計算(PC)體驗將在視聽效果上更豐富,并且更容易使用,而且更重要的是計算將與通信融合在一起。
因此,圖像的顯示以及在此總起來被稱為內容的音頻與視頻數據的回放對于當前的計算設備來說已經變成了越來越普及的應用。過濾和卷積操作對內容數據,諸如圖像音頻與視頻數據執(zhí)行的最常用的一些操作。如本領域技術人員已知的那樣,用把數據和系數的乘積相加的乘—累加(multiply-accumulate)操作來計算過濾和相關計算。兩個向量A和B的相關性在于總和S的計算
S[k]=1NΣi=0N-1a[i]·b[i+k]]]>等式(1)這經常和k=0一起使用S
=1NΣi=0N-1a[i]·b[i]]]>等式(2)在向向量V應用N抽頭(Ntap)過濾器f的情況下,總和S被計算如下S=Σi=0N-1f[i]·V[i]]]>等式(3)這種操作是高強度的計算,但是提供了高級的數據并行性,其能夠通過使用各種數據存儲設備、諸如例如單指令多數據(sigle instruction multiple data,SIMD)寄存器的高效實現而被拓展。
在一個寬廣系列的圖像和視頻處理任務和通信中都能找到過濾操作的應用。使用過濾器的例子有在運動圖象專家組(MPEG)視頻中減少塊人為現象,降低噪音和音頻,從像素值中分離水印以提高水印檢測,用于平穩(wěn)、銳化、降低噪音、查找邊緣以及縮放圖像或者視頻幀的尺寸的相關性,向上采樣用于子像素運動估計的視頻幀,增強音頻信號質量以及脈沖整形和均衡通信中的信號。因此,過濾和卷積操作對于提供包含圖像、音頻與視頻數據在內的內容的回放的計算設備是不可缺少的。
不幸地是,當前的方法和指令把過濾的一般需要作為目標而且不是全面的。實際上,許多體系結構不支持一個用于為一個范圍的過濾長度和數據類型進行有效的過濾計算的裝置。此外,在諸如SIMD寄存器的數據存儲設備內的數據排序,以及在一個寄存器中添加相鄰值和用于在寄存器之間的部分數據傳輸的能力,通常都不被支持。因此,當前的體系結構需要不必要的數據類型改變,這些改變最小化每個指令的操作數目,以及顯著地增加為算術運算而排序數據所要求的時鐘周期數目。


本發(fā)明通過舉例加以說明,但并不局限于附圖中的圖,其中相同的附圖標記指示相同的元件,其中圖1描述了一個框圖,其說明了一個能夠實現本發(fā)明一個實施例的計算機系統。
圖2描述了一個框圖,其依據本發(fā)明的另一個實施例說明了在圖1中描述的處理器的一個實施例。
圖3描述了一個框圖,其說明了依據本發(fā)明另一個實施例的壓縮數據類型。
圖4A說明了依據本發(fā)明一個實施例的寄存器內的壓縮字節(jié)表示。
圖4B說明了一個依據本發(fā)明一個實施例的寄存器內的壓縮字表示。
圖4C說明了一個依據本發(fā)明一個實施例的寄存器內的壓縮雙字表示。
圖5描述了一個框圖,其說明了依據本發(fā)明的一個實施例的字節(jié)混洗指令的操作。
圖6描述了一個框圖,其說明了依據本發(fā)明的一個實施例的字節(jié)乘-累加指令。
圖7A-7C描述了這樣的框圖,其說明了依據本發(fā)明另一個實施例的、圖5中的字節(jié)混洗指令結合在圖6中描述的字節(jié)乘-累加指令以產生多個乘積求和對(summed-product pairs)。
圖8A-8D描述了這樣的框圖,其說明了依據本發(fā)明的另一個實施例的相鄰加法指令;圖9A和9B描述了依據本發(fā)明另一個實施例的寄存器合并指令。
圖10描述了一個框圖,其依據本發(fā)明一個實施例說明了內容數據的有效數據處理的流程圖。
圖11描述了一個框圖,其依據本發(fā)明的另一個實施例說明了一種用于依據一個數據處理操作處理內容數據的附加方法。
圖12描述了一個框圖,其依據本發(fā)明的另一個實施例說明了用于內容數據的連續(xù)處理的流程圖。
圖13描述了一個框圖,其依據本發(fā)明的另一個實施例說明寄存器合并操作的流程圖。
圖14描述了一個流程圖,其依據本發(fā)明的一個示例實施例說明了一種用于從一個源數據存儲設備中選擇未處理的數據單元的附加方法。
圖15是依據本發(fā)明的、用于一個實施例中的處理器的微型體系結構的框圖,該處理器包含用于執(zhí)行并行右移位合并操作的邏輯電路;圖16A是依據本發(fā)明的、用于對數據操作數執(zhí)行并行右移位合并操作的邏輯的一個實施例的框圖;圖16B是用于執(zhí)行右移位合并操作的邏輯的另一個實施例的框圖;
圖17A說明了依據本發(fā)明第一實施例的、并行右移位合并指令的操作;圖17B說明了依據第二實施例的右移位合并指令的操作;圖18A是一個流程圖,說明了一種并行右移位和合并數據操作數的方法的一個實施例;圖18B是一個流程圖,說明了一種右移位和合并數據的方法的另一個實施例;圖19A-B說明了一個運動估計的示例;圖20說明了運動估計和結果預測的一個示例應用;圖21A-B說明了在運動估計期間加以處理的當前和先前幀示例;圖22A-D說明了依據本發(fā)明的一個實施例對幀執(zhí)行運動估計的操作;以及圖23A-B是一個流程圖,說明了一種預測和估計運動的方法的一個實施例。
具體實施例方式
公開了一種用于對數據執(zhí)行并行右移位合并的方法和裝置。也描述了一種用于內容數據的有效過濾和卷積的方法和裝置。還公開了一種用于利用SIMD合并操作的快速全搜索運動估計的方法和裝置。在此描述的實施例是在一個微處理器的環(huán)境中進行描述的,但不局限于此。雖然以下的實施例參考一個處理器加以描述,但是其它實施例適用于其它類型的集成電路和邏輯設備。本發(fā)明的相同技術和示教能夠被容易地應用于能夠從更高流水線吞吐量和改善的性能中得益的其它類型的電路或者半導體設備。本發(fā)明的示教適用于任何執(zhí)行數據操縱的處理器或者機器。然而,本發(fā)明不局限于執(zhí)行256位、128位、64位、32位、或者16位數據操作的處理器或者機器,而且能夠適用于需要數據的右移位合并的任何處理器和機器。
在下面的描述中,為了說明起見,闡述了許多具體的細節(jié)以便提供對本發(fā)明的一個徹底了解。然而在本領域的普通技術人員將要理解這些具體的細節(jié)不是為了實踐本發(fā)明所必要的。在其它實例中,沒有特別詳細地闡述眾所周知的電結構和電路,以便不必要地模糊本發(fā)明。此外,以下的描述提供了示例,并且為了說明起見在附圖中顯示了各個示例。然而,因為這些示例僅僅用來提供本發(fā)明的示例而不是提供本發(fā)明所有可能實現的一個窮舉列表,所以不應該以一個限制的意義解釋這些示例。
在一個實施例中,本發(fā)明的方法體現為機器可執(zhí)行指令。這些指令能夠用來導致一個用該指令編程的通用或者專用處理器執(zhí)行本發(fā)明的步驟。此外,本發(fā)明中的步驟可以由包含用于執(zhí)行該步驟的硬連線邏輯的專門硬件部件執(zhí)行,或者可以由編程的計算機部件和定制的硬件部件的任何組合執(zhí)行。
本發(fā)明可以作為一個計算機程序產品或者軟件提供,該計算機程序產品或者軟件可以包含具有存儲在其上的指令的一個機器或者計算機可讀介質,這些指令可以用來編程一臺計算機(或者其它電子設備)以依據本發(fā)明執(zhí)行一個處理過程。這樣的軟件能夠被存儲在該系統中的一個存儲器內。類似地,代碼能夠經由網絡或者通過其它計算機可讀介質進行分發(fā)。該計算機可讀介質可以包含但不局限于軟盤、光盤、壓縮盤、只讀存儲器(CD-ROM)、和磁光盤、只讀存儲器(ROM)、隨機存取存儲器(RAM)、可擦可編程只讀存儲器(EFROM)、電可擦可編程只讀存儲器(EEPROM)、磁或者光卡、閃速存儲器、經由因特網的傳輸等等。
因此,計算機可讀介質包含任何類型的如下介質/機器可讀介質,所述介質適合于存儲或者傳輸可由機器(例如,計算機)讀取的形式的電子指令或者信息。此外,本發(fā)明還可以作為計算機程序產品被下載。因而,該程序可以從一臺遠程計算機(例如,一臺服務器)傳輸到一臺請求的計算機(例如,一個客戶機)。該程序的傳輸可以經由一條通信鏈路(例如,一個調制解調器、網絡連接等等)通過被包含在一個載波或者其它傳播介質中的、以電、光、聲或者其它形式的數據信號來進行。
在現代的處理器中,很多不同的執(zhí)行單元用來處理和執(zhí)行各種代碼和指令。因為某些指令被更快地完成而其它的指令可能占用大量的時鐘周期數量,所以不是所有指令都被平等地創(chuàng)建。指令的吞吐量越快,處理器的綜合性能越好。因此讓盡可能多的指令盡可能快地執(zhí)行是有利的。然而,就執(zhí)行時間和處理器資源而言,某些具有更大復雜度的指令需要的更多。例如,浮點指令、加載/存儲操作、數據移動等等。
因為越來越多的計算機系統用于互連網和多媒體應用,所以隨著時間的過去已經引入了附加的處理器支持。例如,單指令、多數據(SIMD)整數/浮點指令和流SIMD擴展(SSE)是用于降低執(zhí)行一特定程序任務所要求的總體指令數量的指令。這些指令能夠通過對多個數據單元進行并行操作而加速軟件性能。因此,能夠在包含視頻、語音、和圖像/照片處理在內的很寬應用范圍內實現性能的增加。SIMD指令在微處理器和類似類型的邏輯電路中的實現通常涉及很多問題。此外,SIMD操作的復雜度經常導致需要附加的電路以便正確地處理和操作數據。
本發(fā)明中的實施例把一種用于實現并行右移位指令的方式提供為一種利用SIMD相關硬件的算法。對于一個實施例,該算法基于這樣的概念從一個操作數右移位期望數目的數據段到第二操作數的最高有效端,同時相同數量的數據段被移出第二操作數的最低有效端。在概念上,右移位合并操作能夠被看作是把兩個數據塊合并在一起作為一個塊,并且移位連接起來的塊以在期望的位置處對齊數據段從而形成數據的新模式。因此依據本發(fā)明的一個右移位合并算法的實施例,能夠在一個處理器中加以實現來有效地支持SIMD操作,而不嚴重地折衷整體性能。
計算體系結構圖1顯示了一個能夠在其上實現本發(fā)明的一個實施例的計算機系統100。計算機系統100包含用于傳送信息的總線101,以及與總線101相耦合且用于處理信息的處理器109。計算機系統100還包含與總線101相耦合且用于為處理器109存儲信息和指令的存儲器子系統104-107。
處理器109包含執(zhí)行單元130、寄存器堆200、高速緩沖存儲器160、譯碼器165和內部總線170。高速緩沖存儲器160與執(zhí)行單元130相耦合,并且為處理器109存儲頻繁和/或最近使用的信息。寄存器堆200存儲在處理器109中的信息,并且經由內部總線170耦合到執(zhí)行單元130。在本發(fā)明的一個實施例中,寄存器堆200包含用于存儲多媒體信息的多媒體寄存器,例如,SIMD寄存器。在一個實施例中,多媒體寄存器每個都存儲高達128位的壓縮數據。多媒體寄存器可以是專用的多媒體寄存器或者是被用來存儲多媒體信息及其它信息的寄存器。在一個實施例中,當執(zhí)行多媒體操作時,多媒體寄存器存儲多媒體數據,而當執(zhí)行浮點操作時,多媒體寄存器存儲浮點數據。
執(zhí)行單元130依據由處理器109接收的、被包含在壓縮指令集140內的指令對壓縮數據進行操作。執(zhí)行單元130還依據在通用處理器中實現的指令對標量數據進行操作。處理器109能夠支持Pentium微處理器指令集和壓縮指令集140。通過在一個標準的微處理器指令集諸如Pentium微處理器指令集中包含壓縮指令集140,壓縮數據指令能夠被容易地并入現有的軟件(先前為標準微處理器指令集編寫的軟件)中。其它的標準指令集,諸如PowerPCTM以及AlphaTM處理器指令集也可以依據描述的發(fā)明被使用。(Pentium是Intel Corporation的注冊商標。PowerPCTM是IBM、APPLE COMPUTER和MOTOROLA的商標。AlphaTM是Digital Equipment Corporation的商標。)在一個實施例中,壓縮的指令集包含如下指令(如在下面進一步詳細描述的),所述指令用于移動數據(MOVD)操作143、和用于在數據存儲設備內組織數據的數據混洗操作(PSHUFD)145。用于無符號第一源寄存器和有符號第二源寄存器的壓縮乘累加(PMADDUSBW操作147)。用于為無符號第一源寄存器和無符號第二源寄存器執(zhí)行乘累加的壓縮乘累加操作(PMADDUUBW操作149)。用于有符號第一和第二源寄存器的壓縮乘累加(PMADDSSBW操作151)和用于包含16位數據的有符號第一和第二源寄存器的標準乘累加(PMADDWD操作153)。最后,壓縮指令集包含一相鄰加法指令,用于相加相鄰的字節(jié)(PAADDNB操作155)、字(PAADDNWD操作157)、和雙字(PAADDNDWD 159)、兩個字的值(PAADDWD 161)、用于產生一個16位的結果的兩個字(PAADDNWW操作163)、用于產生一個四倍字結果的兩個四倍字(PAADDNDD操作165)和一個寄存器合并操作167。
通過在通用處理器109的指令集中包含壓縮指令集140,連同用于執(zhí)行這些指令的相關聯的電路,由許多現有的多媒體應用使用的操作可以使用壓縮數據在一個通用處理器中加以執(zhí)行。因此,通過使用一個處理器數據總線的全部寬度來對壓縮數據執(zhí)行操作,許多多媒體應用可以被加速和被更有效地執(zhí)行。這除去了通過該處理器的數據總線傳輸較小的數據單位以一次一個數據單元地執(zhí)行一個或多個操作的需要。
仍然參見圖1,本發(fā)明中的計算機系統100可以包含一個諸如監(jiān)視器的顯示設備121。顯示設備121可以包含諸如幀緩沖器的中間設備。計算機系統100還包含諸如鍵盤的輸入設備122,以及諸如鼠標、或軌跡球、或軌跡板的光標控制123。顯示設備121、輸入設備122、和光標控制123都和總線101相耦合。計算機系統100還可以包含一網絡連接器124,以便使計算機系統100作為局域網(LAN)或者廣域網(WAN)的一部分。
另外,計算機系統100能夠和用于錄音、和/或回放的設備125相耦合,該設備諸如是與麥克風相耦合、且用于為語音識別記錄聲音輸入的音頻數字化器。計算機系統100還可以包含一能夠用來捕獲視頻圖像的視頻數字化設備126、諸如打印機的硬拷貝設備127以及CD-ROM設備128。設備124-128也和總線101相耦合。
處理器圖2說明了處理器109的一個詳細框圖。處理器109能夠使用多種工藝技術,諸如BiCMOS、CMOS和NMOS中的任何一種在一個或多個襯底上加以實現。處理器109包含一用于譯碼由處理器109使用的數據和控制信號的譯碼器202。數據然后能夠經由內部總線205被存儲在寄存器堆200中。為了清楚起見,實施例中的寄存器不應該被限制為是指一種特定類型的電路。相反地,實施例中的寄存器僅僅需要能夠存儲和提供數據,以及執(zhí)行在此描述的功能。
根據數據類型,數據可以被存儲在整數寄存器201、寄存器209、狀態(tài)寄存器208或者指令指針寄存器211中。其它的寄存器能夠被包含在寄存器堆204中,例如浮點寄存器。在一個實施例中,整數寄存器201存儲32位整數數據。在一個實施例中,寄存器209包含八個多媒體寄存器,R0212a到R7212h,例如包含壓縮數據的SIMD寄存器。在寄存器209中的每個寄存器都為128位長。R1 212a、R2 212b和R3 212c是在寄存器209中的各個寄存器的示例。在寄存器209中的一個寄存器的32位能夠被移入到在整數寄存器201中的一個整數寄存器中。類似地,在一個整數寄存器中的值能夠被移入到寄存器209中的一個寄存器的32位中。
狀態(tài)寄存器208指示處理器109的狀態(tài)。指令指針寄存器211存儲要被執(zhí)行的下一個指令的地址。整數寄存器201、寄存器209、狀態(tài)寄存器208和指令指針寄存器211都連接到內部總線205。任何附加的寄存器將也和內部總線205連接。
在另一個實施例中,這些寄存器中的一些寄存器能夠供兩種不同類型的數據使用。例如,寄存器209和整數寄存器201能夠被組合在一起,其中每個寄存器能夠存儲整型數據或者壓縮數據。在另一個實施例中,寄存器209能夠被用作浮點寄存器。在這個實施例中,壓縮數據能夠被存儲在寄存器209或者浮點數據中。在一個實施例中,組合的寄存器長度為128位,而且整數被表示為128位。在這個實施例中,在存儲壓縮數據和整型數據時,寄存器不需要區(qū)分這兩種數據類型。
功能單元203執(zhí)行由處理器109實現的操作。這樣的操作可以包含移位、加法、減法和乘法等。功能單元203連接到內部總線205。高速緩存器160是處理器109的一個可選單元,而且能夠用來高速緩存來自例如主存儲器104的數據和/或控制信號。高速緩存器160連接到譯碼器202,而且被連接來接收控制信號207。
數據和存儲格式圖3A說明了三種壓縮數據類型壓縮字節(jié)221、壓縮字222和壓縮雙字(dword)223。壓縮字節(jié)221為128位長,包含16個壓縮字節(jié)數據單元。通常,一個數據單元是一個和其它同樣長度的數據單元一起存儲在單個寄存器(或者存儲單元)中的單個數據段。在壓縮數據序列中,保存在一個寄存器中的數據單元的數目是128位除以以數據單元的位為單位的長度。
壓縮字222為128位長,并且包含8個壓縮字數據單元。每個壓縮字包含16位的信息。壓縮雙字223為128位長,并且包含4個壓縮雙字數據單元。每個壓縮雙字數據單元包含32位信息。一個壓縮四倍字為128位長,而且包含2個壓縮四倍字數據單元。
圖4A-4C說明了依據本發(fā)明一個實施例的在寄存器內的壓縮數據存儲表示。如圖4A所示,無符號的壓縮字節(jié)在寄存器內的表示310說明了在多媒體寄存器209之一中的無符號壓縮字節(jié)201的存儲。用于每個字節(jié)數據單元的信息按如下方式被存儲,其中對于字節(jié)零是第七位到第零位,對于字節(jié)1是第十五位到第八位,對于字節(jié)2是第二十三位到第十六位,以及最后對于字節(jié)十五是第120到第127位。
因此在該寄存器中使用了所有可用的位。這種存儲布置增加了該處理器的存儲效率。同樣,如果16個數據單元被存取,則現在一次操作就能夠同時對十六個數據單元加以執(zhí)行。有符號壓縮字節(jié)在寄存器內的表示311說明了一個有符號的壓縮字節(jié)221的存儲。要注意到每個字節(jié)數據單元的第八位是符號指示符。
如在圖4B中說明的那樣,無符號壓縮字在寄存器內的表示312說明了字七到字零是如何被存儲在多媒體寄存器209的一個寄存器中的。有符號壓縮字在寄存器內的表示313類似于無符號壓縮字在寄存器內的表示312。要注意到每個字數據單元的第十六位是符號指示符。如圖4C說明的那樣,無符號壓縮雙字在寄存器內的表示314顯示了多媒體寄存器209是如何存儲兩個雙字數據單元的。有符號壓縮雙字在寄存器內的表示315類似于無符號壓縮雙字在寄存器內的表示314。要注意到必要的符號位是雙字數據單元的第32位。
內容數據的有效過濾和卷積,如由本發(fā)明示教的那樣,開始于具有數據和過濾/卷積系數的數據源設備的加載。在很多情況下,在一個數據存儲設備例如像單指令多數據(SIMD)寄存器內的數據或者系數的次序,在能夠做算術計算之前要求改變。因此,有效的過濾計算和卷積不僅需要適當的算術指令,而且需要用于組織作出計算所需要的數據的有效方法。
例如,使用在背景部分中的符號,通過替換例如由S[I]給定的像素I的值來過濾圖像。在像素I的任一邊的像素的值被用在S[I]的過濾計算上。類似地,需要在像素I+1任一邊的像素來計算S[I+1]。因此,為了在一個SIMD寄存器中為超過一個的像素計算過濾結果,在SIMD寄存器中為該計算復制和布置數據。
不幸地是,當前的計算體系結構缺乏一種針對在該計算體系結構內的所有適當的數據大小布置數據的有效方法。因此,如圖5所述,本發(fā)明包含一個有效地排序任何大小的數據的字節(jié)混洗指令(PSHUFB)145。字節(jié)混洗操作145通過在混洗操作期間維護在更大數據內的字節(jié)的相對位置,排序比字節(jié)大的數據大小。此外,字節(jié)混洗操作145能夠改變數據在SIMD寄存器中的相對位置,而且還能夠復制數據。
再次參見圖5,圖5描述了一個用于具有三個系數的過濾器的字節(jié)混洗操作145的一個示例。使用傳統的技術,過濾系數(沒有顯示)會被應用于三個像素,然后該過濾系數被移動到另一個像素并且再次進行應用。然而,為了并行執(zhí)行這些操作,本發(fā)明描述了一個用于數據布置的新指令。因此,如圖5中描述的那樣,在目的數據存儲設備406中通過如下方式組織數據404,在一個實施例中目的數據存儲設備406是源數據存儲設備404,所述方式是使用一掩碼402來指定相應數據單元被存儲在目的寄存器406中的地址。
在一個實施例中,掩碼的布置基于期望的數據處理操作,所述數據處理操作可以包含例如,過濾操作、卷積操作等等。
因此,使用掩碼402,數據406以及系數的處理能夠被并行執(zhí)行。在描述的示例中,源數據存儲設備404是一個128位的SIMD寄存器,該SIMD寄存器最初存儲十六個8位像素。因而,當使用一個具有三個系數的像素過濾器時,第四個系數被設置為零。在一個實施例中,根據在源數據存儲設備404內的數據單元的數目,源寄存器404能夠被用作目的數據存儲設備或者寄存器,由此和通常必要的數目相比減少了寄存器的數目。因而,在源數據存儲設備404內被覆蓋的數據可以從存儲器或者從另一個寄存器中重新加載。此外,多個寄存器可以被用作源數據存儲設備404,它們相應的數據按照要求在目的數據存儲設備406內進行組織。
一旦數據單元以及系數的排序完成了,則數據和相應的系數必須依據一個數據處理操作進行處理。本領域技術人員將意識到使用過濾系數和數據大小的不同數量,過濾計算以及卷積計算需要具有不同精度的操作。最基本的過濾操作將兩對數相乘,并且將它們的乘積相加。這個操作被稱作一個乘-累加指令。
不幸地是,當前的計算體系結構不提供對使用有符號或者無符號系數,對多個數組或者過濾長度和多種數據大小的有效乘-累加計算的支持。此外,字節(jié)操作不被支持。因此,傳統的計算機體系結構必須使用分拆(unpack)指令來轉換16位的數據。這些計算機體系結構通常包含對如下乘-累加操作的支持,所述乘-累加操作在獨立的寄存器中計算16位數據的乘積,然后將相鄰的乘積相加以給出一個32位的結果。該解決方案對于對應要求16位精度的數據的過濾系數是可接受的,但是對于8位的過濾系數,在8位數據(這對于圖像和視頻是通常情況)中,指令和數據級別的并行性是浪費的。
現在參見圖6,圖6描述了第一源寄存器452和第二源寄存器454。在一個實施例中,第一和第二源寄存器是N位長的SIMD寄存器,例如像128位IntelSSE2XMM寄存器。在這樣一個寄存器上實現的乘累加指令會為兩個像素向量452和454給出以下的結果,其被存儲在目的寄存器456內。因此,該示例顯示了一個被稱為PMADDUSBW操作147(圖1)的8位字節(jié)到16位字的乘-累加指令,其中在該指令中的U和S方便記憶地是指無符號和有符號的字節(jié)。在一個源寄存器中的字節(jié)是有符號的,而在其他源寄存器中它們是無符號的。
在本發(fā)明的一個實施例中,具有無符號數據的寄存器是目的地和16位乘-累加的結果。這個選擇的理由是在大多數的實現中,數據是無符號的,且系數是有符號的。因此,優(yōu)選地是將該數據覆蓋掉,因為在將來的計算中不怎么可能需要該數據。在圖1中描述的額外字節(jié)乘-累加指令是用于在兩個寄存器中的無符號字節(jié)的PMADDUUBW操作149和用于在兩個源寄存器中的有符號字節(jié)的PMADDSSBW操作151。通過一個應用于16位有符號字的對以產生一個32位有符號乘積的PMADDWD指令153,完成乘-累加指令。
因為通常是過濾操作的情況,第二向量通常包含過濾系數。因此,為了準備一個XMM寄存器,能夠在該寄存器的一部分內加載該系數,而且使用混洗指令145把系數復制到該寄存器的其余部分。例如,如圖7A所述,系數數據存儲設備502,諸如例如一個XMM 128位寄存器,響應于一個數據加載指令的執(zhí)行最初用三個系數加載。然而,在本領域的那些技術人員將要承認可以在數據處理之前在存儲器中組織過濾系數。因而,在過濾之前,基于它們在存儲器內的組織,系數可以最初如圖7B所述進行加載。
因而,系數寄存器502包含過濾系數F3、F2和F1,它們能夠被編碼為有符號或者無符號的字節(jié)。一旦加載了系數寄存器502,現有的指令PSHUFD能夠用來在該系數寄存器的剩余部分內拷貝該過濾系數,以獲得如圖7B所述的下列結果。如圖7B所述,系數寄存器504現在包含用于并行執(zhí)行數據處理操作所要求的、混洗了的系數。如本領域的那些技術人員所知的那樣,包含三個系數的過濾器在圖像處理算法中是非常普遍的。然而,在本領域的那些技術人員將要承認某些過濾操作,諸如JPEG 2000,使用九個和七個16位的系數。因此,這樣的系數的處理超過了系數寄存器的容量,并導致部分地過濾的結果。因此,處理過程繼續(xù),直到使用每個系數都獲得一個最終結果為止。
現在參見圖7C,圖7C說明了在源寄存器506內的像素數據的布置,該像素數據最初包含在如圖5所述的源寄存器404內,并且在目的寄存器406內被混洗過。因此,響應于一個數據處理操作的執(zhí)行,PMADDUSBW指令能夠用來計算兩個乘法的總和,并且把結果存儲在目的寄存器510中。不幸地是,為了為選擇的數據處理操作完成計算而且產生數據處理結果,必須將在目的寄存器510內的相鄰乘積求和對相加。
因此,如果一個乘-累加指令的總和比兩個像素更長,通常是這種情況,就必須相加單獨的總和。不幸地是,由于相鄰的和是在同一個目的寄存器內的事實,當前的計算體系結構沒有提供一種相加相鄰和的有效方法。因比,本發(fā)明利用相鄰加法指令,其結果如圖8A-8D所述。
現在參見圖8A,圖8A描述了在相加兩個相鄰16位值(PADDD2WD操作157)以給出一個32位和之后的目的寄存器552。因而,圖8A描述了一個乘-累加指令的兩個相鄰的16位結果,它們被相加以給出4個字節(jié)乘積的32位和。圖8B描述一個相鄰加法指令(PAADDD4WD操作157),該指令把4個相鄰16位值相加以給出一個32位的和。因而,一個字節(jié)乘-累加指令的4個相鄰的16位結果被相加,以給出8個字節(jié)乘積的32位和。圖8C說明一個相鄰加法指令(PAADDD8WD操作157),該指令把8個相鄰的16位值相加以給出一個32位的和。因而,該示例說明了一個字節(jié)乘-累加操作的8個相鄰的16位結果,它們被相加以給出16個字節(jié)乘積的32位和。
因此,執(zhí)行一個相鄰加法操作的指令的選擇是基于在一個求和中的輪次數目(N)。例如,使用在圖7A-7C中描述的三抽頭過濾器,第一指令(PAADD2WD操作157)將獲得如圖8D所述的下列結果。然而,針對在兩個16位像素向量(例如,一個宏塊的第一行)之間的相關性,使用了如圖8C所述的最后一個指令(PAADD8WD操作157)。隨著SIMD寄存器在大小上的增加,這樣一個操作對于有效實現變得越來越重要。如果沒有這樣一個操作,則需要許多附加的指令。
因而,如本發(fā)明所述的相鄰加法指令集,支持能夠被相加的相鄰值的數量的廣闊范圍和通用數據類型的全部范圍。在一個實施例中,相鄰16位值的加法包含一個指令集(PAADDNWD操作157),該指令集的范圍從兩個相鄰值(N=2)的加法開始,以及加倍被相加的數量到四個(N=4),然后到八個(N=8)以及直至達到寄存器中的總數量為止。16位相鄰加法的和的數據大小是32位。在一個替換實施例中,相鄰的16位值(PAADDWD操作161)被相加以產生一個32位的和。
在這個替換實施例中,沒有包含其它具有16位數據大小的指令,這是因為具有32位輸入的相鄰加法指令被用來相加由具有16位輸入的指令產生的和。兩個實施例中都包含一個32位相鄰加法指令集(PAADDNDWD操作159),該指令集的范圍從兩個相鄰值(N=2)的加法開始,以及加倍被相加的數量到四個(N=4),然后到八個(N=8)等,以及直至達到寄存器中的總數量為止。32位相鄰加法的和的數據大小是32位。有時候,這些結果沒有填充該寄存器。例如,如圖8A、8B和8C所示的指令,三個不同的相鄰加產生4、2和1個32位結果。在一個實施例中,這些結果被保存在目的數據存儲設備的較低的最低有效部分中。
因此,當有兩個32位結果時,如圖8B所述,這些結果被保存在較低的64位中。在一個32位結果的情況下,如圖8C中說明的那樣,這些結果被保存在較低的32位中。如本領域的那些技術人員所認識到的那樣,某些應用使用相鄰字節(jié)的和。本發(fā)明利用一個把兩個相鄰有符號字節(jié)相加以給出一個16位字的指令(PAADDNB操作155)和一個把兩個相鄰無符號字節(jié)相加以給出一個16位字結果的指令來支持字節(jié)的相鄰加法。需要超過兩個相鄰字節(jié)加法的應用利用適當的16位相鄰加法操作把兩個字節(jié)的16位和進行相加。
一旦已經計算出數據處理操作的結果,下一個操作在于把這些結果向回發(fā)送到存儲器設備。如由如上所述的實施例說明的那樣,這些結果能夠以32位精度進行編碼。因此,使用作用于雙字的簡單移位操作,例如,如上所述的MOVD操作143和作用于整個寄存器的邏輯右移操作(PSRLDQ),邏輯右移位雙倍的4倍字,能夠把結果寫回到存儲器中。因而,把所有結果寫回到存儲器在第一種情況中會需要四個MOVD和三個PSRLDQ(圖8A),在第二種情況中會需要兩個MOVD和一個PSRLDQ(圖8B)以及最后,如圖8C所述,在最后一種情況中僅僅需要一個MOVD。
不幸地是,雖然如圖7C所述,相鄰加法操作能夠并行執(zhí)行,但是過濾計算通常需要在該圖像中的下一個像素。因而,需要在一個源數據存儲設備或者寄存器中加載一個或多個像素。為了避免每次在寄存器中加載八個像素,提出了用于這個操作的兩種解決方案。在一個實施例中,如圖9A所述,本發(fā)明描述了一個寄存器合并操作163。因而,為了在一個目的寄存器606內處理像素A1-A8,像素A7-A1和像素A8串接在一起以在目的寄存器606中形成像素A8-A1。因此,寄存器合并操作利用字節(jié)數目來選擇寄存器,其通過一個輸入參數提供。
現在參見圖9B,圖9B描述了一個用于執(zhí)行寄存器合并操作的替換實施例。最初,八個像素被加載到第一源寄存器608(MM0)中。接下來,在第二源寄存器(MM1)610中加載后續(xù)的八個像素。接下來,對第二源寄存器610執(zhí)行置換操作。一旦執(zhí)行了,寄存器610被復制到第三源寄存器(MM2)612。接下來,第一源寄存器608被右移8位。此外,依據壓縮邏輯與指令組合第二源寄存器610和屏蔽寄存器614,并且將其存儲在第一源寄存器608內。
接下來,在第二源寄存器610和第一源寄存器608之間執(zhí)行邏輯或操作,以在目的寄存器620內產生下列的結果,導致寄存器合并操作。如說明的那樣,通過移位第一源寄存器608繼續(xù)該過程。接下來,移位第二源寄存器610以產生寄存器612。接下來,在屏蔽寄存器614和第二源寄存器612之間執(zhí)行邏輯與操作,結果被存儲在目的寄存器622中。最后,在第二源寄存器612和第一源寄存器608之間執(zhí)行壓縮或操作,以在目的寄存器624內產生隨后的寄存器合并操作。現在描述用于實現本發(fā)明示教的過程方法。
操作現在參見圖10,圖10描述了一個框圖,其說明了一種用于在例如如圖1和2所述的計算機系統100內的內容數據的有效過濾和卷積的方法700。如在此描述的那樣,內容數據涉及圖像、音頻、視頻和語音數據。此外,本發(fā)明涉及數據存儲設備,其如本領域的那些技術人員所承認的那樣,包含各種能夠存儲數字數據的設備,這些設備例如包括,諸如128位Intel體系結構SSE2 MMX寄存器的數據寄存器。
再次參見圖10,該方法從過程塊702開始,其中確定是否執(zhí)行一個數據處理操作。如在此描述的那樣,數據處理操作包含但不局限于對像素數據執(zhí)行的卷積和過濾操作。一旦執(zhí)行了,則執(zhí)行過程塊704。在過程塊704處,執(zhí)行一個數據加載指令。響應于數據加載指令的執(zhí)行,在過程塊706處,在源數據存儲設備212A和輔助數據存儲設備212B內加載輸入數據流數據,例如如圖2所述的。
在過程塊708處,確定數據處理操作是否已經執(zhí)行了一個數據混洗指令。響應于執(zhí)行一個數據混洗指令,在過程塊710處,來自例如一個源數據存儲設備212B的數據的選擇部分在一個目的數據存儲設備內或者依據在一個系數數據存儲設備(參見圖5)內的系數布置進行組織。在一個系數數據存儲設備內的系數依據期望的數據處理操作計算(例如,如在圖7A和7B中說明的那樣)進行組織。在一個實施例中,在任何過濾操作之前在存儲器內組織系數。因此,系數可以被加載到一個系數數據存儲器中而不需要混洗(參見圖7B)。
如上所述,如圖7A-7C所述,如數據處理操作所要求的那樣,排序數據和系數是實現并行計算所要求的。然而,因為系數在數據處理操作之前就是已知的,所以可以在存儲器中組織該系數,以允許以在存儲器中組織的形式加載到一個系數寄存器中,而不需要在數據處理操作期間混洗這些系數。最后,在過程塊720處,依據數據處理操作處理加載的數據以產生一個或多個數據處理結果。一旦產生了,這些數據處理操作的結果能夠被寫回到存儲器。
現在參見圖11,圖11描述了一個框圖,其說明了一種用于依據數據處理操作處理數據的方法722。在過程塊724處,確定數據處理操作是否已經執(zhí)行了乘-累加指令。響應于該乘-累加指令的執(zhí)行,在過程塊726處,如圖7C所述,產生多個在目的存儲設備內的數據和在系數數據存儲設備內的系數的乘積求和對。接下來,在過程塊728處,確定該數據處理操作是否已經執(zhí)行了一個相鄰加法指令。
響應于相鄰加法的執(zhí)行,在過程塊730處,響應于相鄰加法指令的執(zhí)行,將在目的數據存儲設備510(圖7C)內的相鄰乘積求和對相加,以形成一個或多個數據處理操作結果(參見圖8D)。然而,在某些實施例中,在系數的數目超過系數寄存器的容量的地方(參見過程塊732),獲得部分的數據處理結果。因此,如在可選過程塊732-736中所指示的那樣,繼續(xù)處理和組織系數(過程塊734)數據(過程塊736),直到獲得最后的數據處理操作結果為止。否則,在過程塊738處,存儲一個或多個數據處理操作結果。最后,在過程塊790處,確定是否完成了輸入數據流數據的處理。照這樣,重復過程塊724-732,直到輸入數據流數據的處理完成為止。一旦處理完成了,控制流返回到過程塊720,在那兒結束方法700。
現在參見圖12,圖12描述了一個框圖,其說明了一種用于處理附加輸入數據的附加方法740。在過程塊742處,確定在源數據存儲設備212A內是否有任何未存取的數據。如在此描述的那樣,未存取的數據是指在源數據存儲設備212A內的如下數據,該數據在該數據存儲設備內還沒有為了執(zhí)行一個乘-累加指令而被混洗。當數據存儲設備包含未存取的數據時,在過程塊744處,從源數據存儲設備中選擇一部分數據作為選擇的數據。一旦選擇了,則執(zhí)行過程塊786。
否則,在過程塊746處,從源數據存儲設備中選擇一個或多個未處理的數據單元,以及從一個輔助數據存儲設備中選擇一個或多個數據單元。如在此描述的那樣,未處理的數據單元是指還沒有為其計算一個數據處理操作結果的數據單元。接下來,在過程塊780處,執(zhí)行一個寄存器合并指令(參見圖9A和9B),該指令把源數據存儲設備中未處理的數據單元和從輔助數據存儲設備中選擇的數據單元串接起來,以形成選擇的數據。接下來,在過程塊782處,來自輔助數據存儲設備的數據被移動到源數據存儲設備中。
因而,不再需要源數據存儲設備的數據,這是因為所有的都已經被存取了。因此,包含未存取數據的數據的輔助存儲器,能夠用來覆蓋在源數據存儲設備內的數據。在過程塊784處,用來自存儲器設備的輸入數據流數據加載輔助數據存儲設備,其需要額外的數據處理,諸如過濾或者卷積。最后,在過程塊786處,在目的數據存儲設備內或者依據在系數數據存儲設備(參見圖5)內的系數布置組織選擇的數據。一旦執(zhí)行了,控制流程返回到過程塊790,如圖11所述用于選擇數據的繼續(xù)處理。
現在參見圖13,圖13描述了一種用于選擇未處理的數據單元的附加方法748。在過程塊750處,確定源數據存儲設備是否包含未處理的數據。當在源數據存儲設備內數據的每個部分都已經被處理了,則執(zhí)行過程塊770。在過程塊770處,從輔助數據存儲設備中選擇一部分數據,它們充當選定數據,其然后依據數據處理操作進行處理。
否則,在過程塊752處,從源數據存儲設備中選擇一個或多個未處理的數據單元。最后,在過程塊766處,依據未處理數據單元的計數從輔助數據存儲設備中選擇附加的數據單元,以形成所選擇的數據。因而,在數據處理操作執(zhí)行之前被選擇用來在目的數據存儲設備內進行混洗的數據,被限制在基于過濾系數數目的數據單元的計數。因此,使用這個數據單元計數,從數據單元計數中減去未處理數據單元的數目,以確定為了執(zhí)行寄存器合并操作要從輔助數據存儲設備中選擇的單元數目。
最后,參見圖14,圖14描述了一種用于選擇如圖13所述的過程塊752中的未處理數據單元的附加方法754。在過程塊756處,從源數據存儲設備中選一個數據單元。接下來,在過程塊758處,確定是否已經為該數據單元計算了一個數據處理操作結果。當已經計算了這樣的一個結果時,放棄選擇的數據單元。否則,在過程塊760處,選擇的數據單元是一個未處理的數據單元并且被存儲。接下來,在過程塊762處,遞增未處理的數據單元計數。最后,在過程塊764處,重復過程塊756-762,直到在源數據存儲設備內的每個數據單元都被處理了為止。
因而,使用本發(fā)明的示教,避免了不必要的數據類型改變,導致每個指令SIMD操作數目的最大化。此外,還實現了顯著減少為算術操作而排序數據所要求的時鐘周期數目。因此,表格1給出了幾個使用由本發(fā)明描述的示教和指令的過濾應用的估算加速值。
表格1

替換實施例已經描述了使用SIMD寄存器來提供內容數據的有效過濾和卷積的計算體系結構的一個實現的幾個方面。然而,計算體系結構的各個實現提供了許多的特征,它們包含補充、增補、和/或代替如上所述的特征。在不同的實現中特征能夠被實現為計算體系結構的一部分,或者實現為專門軟件或者硬件部件的一部分。此外,上面的描述,為了解釋起見,使用了具體的命名法以提供對本發(fā)明實施例的一個徹底了解。然而,對于本領域的技術人員來說顯而易見的是,這些特定的細節(jié)不是為實踐本發(fā)明所必需的。
此外,雖然在此描述的一個實施例針對一用于使用SIMD寄存器進行內容數據有效過濾和卷積的系統,然而在本領域的那些技術人員將要理解本發(fā)明中的示教能夠應用于其它的系統。實際上,用于處理圖象、音頻與視頻數據的系統在本發(fā)明的示教的范圍之內,而沒有背離本發(fā)明的范圍和精神。選擇和描述如上所述的實施例是為了最好地說明本發(fā)明的原理和它的實際應用。選擇這些實施例以借此允許在本領域的其它技術人員利用適用于所考慮特定使用的各個修改最好地使用本發(fā)明和各個實施例。
本發(fā)明的實施例提供了許多優(yōu)于已知技術的優(yōu)點。本發(fā)明包含有效地實現用于多個數組長度和數據大小以及系數符號的過濾/卷積的操作的能力。這些操作通過使用一小組單指令多數據(SIMD)指令中的一部分的幾條指令來完成。因此,本發(fā)明避免了不必要的數據類型改變。因此,通過避免了不必要的數據類型改變,本發(fā)明最大化每個指令的SIMD操作的數目,同時顯著地減少了為諸如乘-累加操作的算術操作而排序數據所要求的時鐘周期數目。
圖15是一個實施例中的處理器的微型體系結構的框圖,該處理器包含邏輯電路,用于依據本發(fā)明執(zhí)行并行右移位合并操作。如在上面討論的那樣,右移位合并操作還可以被稱為寄存器合并操作和寄存器合并指令。對于右移位合并指令(PSRMRG)的一個實施例,該指令產生和圖1、9A和9B中的寄存器合并操作167相同的結果。有序前端1001是處理器1000的一部分,其取出要被執(zhí)行的宏指令并且準備它們以稍后在處理器流水線中使用。該實施例的前端包含幾個單元。指令預取器1026從存儲器中取出宏指令并且把它們饋送給指令譯碼器1028,其接著把它們譯碼成為機器知道如何執(zhí)行的、稱為微指令或者微操作(也稱作微op或者uops)的原語。軌跡高速緩存器1030取走譯碼的微操作,并且將它們匯編到程序有序序列中,或者在微指令隊列1034中跟蹤以便執(zhí)行。當軌跡高速緩存器1030遇到一個復雜的宏指令時,微碼ROM 1032提供完成該操作所需要的微操作。
許多宏指令被轉換成為單個微指令,而其它的需要幾個微操作來完成全部的操作。在這個實施例中,如果需要超過四次微操作來完成一個宏指令,則譯碼器1028訪問微碼ROM 1032以執(zhí)行該宏指令。在一個實施例中,如果需要許多微操作來完成該操作,則用于一個并行右移位合并算法的指令能夠被存儲在微碼ROM 1032內。軌跡高速緩存器1030參考入口指針可編程邏輯陣列(PLA),以確定一個正確的微指令指針,從而在微代碼ROM 1032中讀取用于除法算法的微代碼序列。在微碼ROM 1032完成用于當前宏指令的定序微操作之后,機器的前端1001再繼續(xù)從軌跡高速緩存器1030中取出微操作。
某些SIMD及其它多媒體類型的指令被認為是復雜的指令。大多數浮點相關的指令也是復雜的指令。因而,當指令譯碼器1028遇到一個復雜的宏指令時,在適當位置訪問微碼ROM 1032以檢索用于那個宏指令的微碼序列。執(zhí)行那個宏指令所需要的各個微操作被傳遞給無序執(zhí)行引擎1003,以便在適當的整數和浮點執(zhí)行單元處執(zhí)行。
無序執(zhí)行引擎1003是微指令準備用于執(zhí)行的地方。無序執(zhí)行邏輯具有多個緩沖器,用于平滑和重新排序微指令流,以在這些微指令沿著流水線向下進行以及被調度用于執(zhí)行時優(yōu)化性能。分配器邏輯分配每個微指令按序執(zhí)行所需要的機器緩沖器和資源。寄存器重命名邏輯把邏輯寄存器重命名到寄存器堆中的條目。該分配器還在指令調度器存儲器調度器、快速調度器1002、慢速/一般浮點調度器1004和簡單浮點調度器1006的前面,在兩個微操作隊列中的一個中為每個微操作分配一個條目,這兩個隊列一個用于存儲器操作一個用于非存儲器操作。微指令調度器1002、1004、1006基于它們的相關輸入寄存器操作數源的準備狀態(tài)和微操作完成它們的操作所需要的執(zhí)行資源的可用性,確定一條微指令已就緒來執(zhí)行的時間。這個實施例中的快速調度器1002能夠按每半個主時鐘周期進行調度,而其它調度器在每個主處理器時鐘周期僅僅能夠調度一次。調度器為分派端口進行仲裁,以調度要執(zhí)行的微操作。
寄存器堆1008、1010位于調度器1002、1004、1006和在執(zhí)行塊1011中的執(zhí)行單元1012、1014、1016、1018、1020、1022、1024之間。存在一個單獨的寄存器堆1008、1010,分別用于整數和浮點操作。這個實施例中的每個寄存器堆1008、1010還包含一個旁路網絡,其能夠繞過還沒有被寫入到寄存器堆中的、剛剛完成的結果或者將其轉發(fā)到新的相關微操作。整數寄存器堆1008和浮點寄存器堆1010還能夠和其它寄存器堆進行數據通信。對于一個實施例,整數寄存器堆1008被分成兩個單獨的寄存器堆,一個寄存器堆用于數據的低階32位,一個第二寄存器堆用于數據的高階32位。一個實施例中的浮點寄存器堆1010具有128位寬的條目,這是因為浮點指令通常具有寬度從64位到128位的操作數。
執(zhí)行塊1011包含執(zhí)行單元1012、1014、1016、1018、1020、1022、1024,指令實際上在這些執(zhí)行單元中被執(zhí)行。這個部分包含寄存器堆1008、1010,其存儲微指令需要執(zhí)行的整數和浮點數操作數值。這個實施例中的處理器1000由許多執(zhí)行單元組成地址產生單元(AGU)1012、AGU 1014、快速ALU 1016、快速ALU 1018、慢速ALU 1020、浮點ALU 1022、浮點移動單元1024。對于這個實施例,浮點執(zhí)行塊1022、1024,執(zhí)行浮點、MMX、SIMD和SSE操作。這個實施例中的浮點ALU 322包含一個64位乘64位的浮點除法器,以執(zhí)行除、平方根、和求余微操作。對于本發(fā)明的實施例,任何涉及浮點值的動作都利用浮點硬件發(fā)生。例如,在整型格式和浮點格式之間的轉換涉及一個浮點寄存器堆。類似地,浮點除操作發(fā)生在一個浮點除法器。在另一方面,非浮點數和整數類型用整數硬件資源加以處理。簡單的、非常頻繁的ALU操作轉向高速ALU執(zhí)行單元1016、1018。這個實施例中的快速ALU 1016、1018能夠用半個時鐘周期的有效等待時間來執(zhí)行快速的操作。對于一個實施例,最復雜的整數操作轉向慢速ALU 1020,因為慢速ALU 1020包含用于諸如乘法、移位、標志邏輯、和分支處理的長等待時間類型操作的整數執(zhí)行硬件。通過AGU 1012、1014執(zhí)行存儲器加載/存儲操作。對于這個實施例,對64位數據操作數執(zhí)行整數操作的環(huán)境中描述了整數ALU 1016、1018、1020。在替換實施例中,能夠實現ALU 1016、1018、1020以支持各種數據位,這些位包含16、32、128、256等等。類似地,能夠實現浮點單元1022、1024以支持具有各種寬度的位的操作數范圍。對于一個實施例,浮點單元1022、1024能夠結合SIMD和多媒體指令對128位寬的壓縮數據操作數進行操作。
在這個實施例中,微操作調度器1002、1004、1006在父加載(parent load)已經執(zhí)行完成之前,分派相關的操作。因為微操作在處理器1000中被推測地調度和執(zhí)行,所以處理器1000還包含用于處理存儲器未命中的邏輯。如果數據加載在數據高速緩存器中未命中,則在流水線中實時存在的相關操作讓調度器具有暫時錯誤的數據。一種重放機制跟蹤和重新執(zhí)行使用錯誤數據的指令。僅僅相關的操作需要被重放,而無關的操作被允許完成。處理器的一個實施例中的調度器和重放機制還被設計為捕捉用于擴展精度整數除操作的指令序列。
術語“寄存器”在此被用來指板上處理器的存儲單元,所述存儲單元被用作宏指令的一部分以便標識操作數。換句話說,在此所指的寄存器是可從處理器的外面(從一個程序員的角度)看見的那些寄存器。然而,在此描述的寄存器能夠由一個處理器內的電路使用任何數量的不同技術加以實現,諸如專用的物理寄存器、使用寄存器重命名的動態(tài)分配的物理寄存器、專用和動態(tài)分配的物理寄存器的組合等等。對于在下面的討論,寄存器被理解為是被設計為保持壓縮數據的數據寄存器,諸如使用California,Santa Clara的Intel公司的MMX技術允許的微處理器中的64位寬的MMXTM寄存器(mm寄存器)。這些MMX寄存器,可以采用整數和浮點形式使用,能夠與伴隨著SIMD和SSE指令的壓縮數據單元一起進行操作。類似地,與SSE2技術有關的128位寬XMM寄存器還能夠用來保持這樣的壓縮數據操作數。
在下列圖的示例中,描述了多個數據操作數。為簡單起見,數據段從字母A按字母順序向前進行標記,其中A位于最低地址處而Z將位于最高地址處。因此,A可以在地址0處,B在地址1處,C在地址3處,諸如此類。雖然在一些示例中的數據序列用以相反字母次序排列的字母來顯示,但是地址將仍然從A在0處、B在1處等等開始。概念上,一個右移位操作,如在一個實施例的右移位合并中,如果序列為D、C、B、A的話,則要求右移位移出較低地址的數據段。因此,右移位只是把一個數據塊中的數據單元向右移通過一條固定的線。此外,右移位合并操作在概念上能夠將一個操作數中最右側的數據段右移到另一個數據操作數的左側,就好象這兩個操作數是在一個連續(xù)區(qū)上一樣。
圖16A是一個依據本發(fā)明對數據操作數執(zhí)行一個并行右移位合并操作的邏輯的一個實施例的框圖。用于這個實施例的右移位合并(同樣,一個寄存器移位)操作的指令(PSRMRG)從三塊信息開始第一數據操作數1102、第二數據操作數1104和移位計數1106。在一個實施例中,移位PSRMRG指令被譯碼成為一個微操作。在一個替換實施例中,該指令可以被譯碼成為不同數量的微操作,以對該數據操作數執(zhí)行移位合并操作。對于這個示例,數據操作數1102、1104是存儲在寄存器/存儲器中的64位寬的數據段,而且移位計數1106是一個8位寬的立即值。根據特定的實現,數據操作數和移位計數能夠為其它的寬度,諸如分別為128/256位和16位。在這個示例中的第一操作數1102由八個數據段組成,它們是P、O、N、M、L、K、J和I。第二操作數1104同樣由八個數據段組成,它們是H、G、F、E、D、C、B和A。在此的數據段具有相等的長度而且每個都包含數據的單個字節(jié)(8位)。然而,本發(fā)明的另一個實施例用更長的128位操作數進行操作,其中每個數據段都由單個字節(jié)(8位)組成,而且128位寬的操作數將具有十六個字節(jié)寬的數據段。類似地,如果每個數據段是一個雙字(32位)或者一個四倍長字(64位),則128位操作數將分別具有四個雙字寬或者兩個四倍長字寬的數據段。因此,本發(fā)明的實施例不局限于特定長度的數據操作數、數據段、或者移位計數,而且能夠為每個實現恰當地改變大小。
操作數1102、1104能夠駐留在寄存器或者存儲單元或者寄存器堆或者它們的混合中。數據操作數1102、1104,和計數1106連同一個右移位合并指令一起被發(fā)給在處理器中的執(zhí)行單元1110。等到右移位合并指令到達執(zhí)行單元1110時,指令早先在處理器流水線中應該是已經被譯碼了。因此右移位合并指令能夠具有一個微操作(微指令)或者其它譯碼格式的形式。對于這個實施例,在串接邏輯和臨時寄存器處接收兩個數據操作數1102、1104。串接邏輯合并/連接這兩個操作數的數據段,并且把新的數據塊放置在一個臨時寄存器中。在此,新的數據塊由十六個數據段組成,它們是P、O、N、M、L、K、J、I、H、G、F、E、D、C、B、A。因為這個示例用64位寬的操作數進行操作,所以保持這個組合的數據所需要的臨時寄存器為128位寬。對于128位寬的數據操作數,則需要一個256位寬的臨時寄存器。
在執(zhí)行單元1110中的右移邏輯1114取走臨時寄存器的內容,并且按照計數1106所要求的n個數據段執(zhí)行數據塊的邏輯右移。在這個實施例中,計數1106指示要右移的字節(jié)數目。根據特定的實現,計數1106還能夠用來指示要移位的位、半字節(jié)、字、雙字、四倍字等的數目,取決于數據段的粒度。對于這個示例,n等于3,因此臨時寄存器內容被移位三個字節(jié)。如果每個數據段都是一個字或者雙字寬,則該計數能夠分別指示要移位的字或者雙字的數目。對于這個實施例,在寄存器中的數據被右移位的同時,從臨時寄存器的左端移入0值來填充空出的空間。因此如果移位計數1106大于在一個數據操作數中數據段的數目(在這種情況下為8),則在結果1108中能夠出現一個或多個0。此外,如果移位計數1106等于或者超過兩個操作數的數據段總數,則該結果將全部由0組成,因為所有的數據段將都已經被移出了。右移邏輯1114從臨時寄存器中輸出適當數量的數據段作為結果1108。在另一個實施例中,能夠在右移邏輯之后包含一個輸出多路復用器或者鎖存器來輸出結果。對于這個示例,結果為64位寬并且包含八個字節(jié)。由于對兩個數據操作數1102、1104執(zhí)行了右移位合并操作,所以結果由下列八個數據段組成,它們是K、J、I、H、G、F、E和D。
圖16B是一個執(zhí)行右移位合并操作的邏輯的另一個實施例的框圖。類似于圖16A中的先前示例,這個實施例中的右移位合并操作從三塊信息開始第一64位寬的數據操作數1102、第二64位寬的數據操作數1104和8位寬的移位計數1106。移位計數1106指示該數據段要移位多少位置。對于這個實施例,計數1106以字節(jié)的數目說明。在一個替換實施例中,該計數可以指示用來移位該數據的位、半字節(jié)、字、雙字或者四倍字的數目。在這個示例中的第一和第二操作數1102每個都由八個相等長度的字節(jié)大小數據段(H、G、F、E、D、C、B、A)組成,且第二操作數1104由八個數據段(P、O、N、M、L、K、J、I)組成。計數n等于3。本發(fā)明的另一個實施例能夠用替換長度的操作數和數據段進行操作,諸如128/256/512位寬的操作數和位/字節(jié)/字/雙字/四倍長字大小的數據段和8/16/32位寬的移位計數。因此本發(fā)明的實施例不局限于特定長度的數據操作數、數據段或者移位計數,而且能夠為每個實現恰當地改變大小。
數據操作數1102、1104,和計數1106連同一個右移位合并指令一起被發(fā)給在處理器中的執(zhí)行單元1120。對于這個實施例,分別在左移位邏輯1122和右移位邏輯1124處接收第一數據操作數1102和第二數據操作數1104。計數1106也被發(fā)送給移位邏輯1122、1124。左移位邏輯1122把第一操作數1102的數據段向左移位“第一操作數中的數據段數目-n”個段數目。因為數據段被左移位了,從右側移入0值來填充空出的空間。在這種情況下,有八個數據段,所以第一操作數1102被左移位八減去三,或者說五個位置。第一操作數1102被移位這個差值,以實現用于在邏輯或門1126處合并的正確的數據對準。在在此的左移位之后,第一數據操作數變?yōu)镵、J、I、0、0、0、0、0。如果計數1106大于在操作數中數據段的數目,左移位計算能夠產生一個負數,以指示一個負的左移位。具有一個負計數的邏輯左移被解釋為在反方向上的移位,而且實質上是一個邏輯右移。負的左移位將從第一操作數1102的左側引入0值。
類似地,右移位邏輯1124將第二操作數的數據段向右移位n個數目。因為數據段被右移位了,從左側移入0值來填充空出的空間。第二數據操作數變?yōu)?、0、0、H、G、F、E、D。從左移位/右移位邏輯1122、1124中輸出移位了的操作數,而且在邏輯或門11 26處將其合并在一起?;蜷T執(zhí)行數據段的邏輯或,并且提供這個實施例的一個64位寬的結果1108?!癒、J、I、0、0、0、0、0”和“0、0、0、H、G、F、E、D”或在一起產生一個包含八個字節(jié)K、J、I、H、G、F、E、D的結果1108。這個結果與用于在圖16A中的本發(fā)明第一實施例的結果相同。要注意到對于一個大于在一個操作數中的數據單元數目的計數n 1106,能夠在結果中從左側開始出現適當數目的0值。此外,如果計數1106大于或等于在兩個操作數中的數據單元的總數,則結果將全部由0組成。
圖17A說明了依據本發(fā)明第一實施例的一個并行右移位合并指令的操作。對于這些對論,MM1 1204、MM2 1206、TEMP1232和DEST1242通常被稱為操作數或者數據塊,但是不局限于這些而且還包含寄存器、寄存器堆和存儲單元。在一個實施例中,MM1 1204和MM2 1206是64位寬的MMX寄存器(在有些情況下也稱為‘mm’)。在狀態(tài)I1200處,移位計數imm[y] 1202、第一操作數MM1[x] 1204和第二操作數MM2[x] 1206和并行右移位合并指令一起發(fā)送。計數1202是一個y位寬度的立即值。第一1204和第二1206操作數是包含x數據段的數據塊,而且如果每個數據段是一個字節(jié)(8位)的話,則每個都具有8x位的總寬。第一1204和第二1206操作數每個都被裝滿多個較小的數據段。對于這個示例,第一數據操作數MM1 1204由八個相等長度的數據段組成,它們是P 1211、O 1212、N 1213、M 1214、L 1215、K 1216、J 1217、I1218。類似地,第二數據操作數MM2 1206由八個相等長度的數據段組成,它們是H 1221、G1222,F 1223、E 1224、D 1225、C 1226、B 1227、A 1228。因此這些數據段中的每一個都是‘x*8’位寬。所以如果x為8,則每個操作數都是8個字節(jié)或者64位寬。對于其它的實施例,一個數據單元能夠是一個半字節(jié)(4位)、字(16位)、雙字(32位)、四倍字(64位)等等。在替換實施例中,x能夠是16、32、64等數據單元寬。對于這個實施例,計數y等于8而且立即值能夠被表示為一個字節(jié)。對于替換的實施例,y能夠是4、16、32等位寬。此外,計數1202不局限于一個立即值,而且還能夠被存儲在一個寄存器或者存儲單元中。
在狀態(tài)II1230處操作數MM1 1204和MM2 1206被合并在一起,以形成一個2x數據單元(或者在這種情況下是字節(jié))寬的臨時數據塊TEMP[2x] 1232。這個示例中的合并數據1232由十六個數據段組成,它們被排列為P、O、N、M、L、K、J、I、H、G、F、E、D、C、B和A。一個八字節(jié)寬的窗口1234從最右邊緣開始框出臨時數據塊1232中的八個數據段。因此窗口1234的右邊緣將與數據塊1232的右邊緣排在一起,這樣,窗口1234框出以下的數據段H、G、F、E、D、C、B和A。移位計數n 1202指示右移合并數據的期望數量。計數值能夠被實現采用位、半字節(jié)、字節(jié)、字、雙字、四倍字等或數據段的特定數目來說明移位量?;谟嫈抵?202,在此數據塊1232被右移位n個數據段1236。對于這個示例,n等于3而且數據塊1232被向右滑動三個位置。檢查這個的另一種方法是在相反方向上移位窗口1234。換句話說,在概念上窗口1234能夠被看作從臨時數據塊1232的右邊緣向左移位三個位置。對于一個實施例,如果移位計數n大于數據段的的總數,這在組合數據塊中給出的是2x,則結果將全部由0組成。類似地,如果移位計數n大于或等于在第一操作數1204中的數據段數目,x,則結果將包含從結果左側開始的一個或多個0。在狀態(tài)III 1240處,由窗口1234框出的數據段(K、J、I、H、G、F、E、D)作為結果輸出到一個x數據單元寬的目的地DEST[x] 1242。
圖17B說明了依據一個第二實施例的右移位合并指令的操作。右移位合并指令在狀態(tài)I1250伴有y位的計數imm[y],x數據段的第一數據操作數MM1[x]以及x數據段的第二數據操作數MM2[x]。作為圖17A中的示例,y等于8以及x等于8,其中MM1和MM2每個都是64位或者8字節(jié)寬。這個實施例中的第一1204和第二1206都被多個相等大小的數據段填充,在這種情況下每個都是一個字節(jié)寬,這兩個操作數分別為“P 1211、O 1212、N 1213、M 1214、L1215、K 1216、J 1217、I1218”和“H 1221、G 1222、F1223、E 1224、D1225、C 1226、B 1227、A 1228”。
在狀態(tài)II1260處,移位計數n 1202用來移位第一1204和第二1206操作數。這個實施例中的計數指示右移合并數據的數據段數目。對于這個實施例,移位發(fā)生在第一1204和第二1206操作數的合并之前。因此,第一操作數1204被不同地移位。在這個示例中,第一操作數1204被左移位x減n個數據段?!皒-n”計算允許在稍后的數據合并處恰當的數據對齊。因此對于一個3的計數n,第一操作數1204被左移五個數據段或者五個字節(jié)。有多個0從右側移入以填充空出的空間。但是如果移位計數n 1202大于在第一操作數1204中可得到的數據段x的數目,則“x-n”的左移位計算能夠產生一個負數,其實質上指示一個負的左移位。在一個實施例中,一個具有負計數的邏輯左移被解釋為在反方向中的左移位,而且實質上是一個邏輯右移。負的左移位將從第一操作數1204的左側引入0值。類似地,第二操作數1206被右移位3個移位計數而且從左側移入0值來填充空白。為第一1204和第二1206操作數保持的移位結果被分別保存在x數據段寬的寄存器TEMP1 1266和TEMP2 1268。在狀態(tài)III 1270處,來自TEMP1 1266和TEMP2 1268的移位結果被合并在一起1272,以在寄存器DEST 1242處產生期望的移位合并數據。如果移位計數n 1202大于x,則操作數在該結果中能夠從左側開始包含一個或多個0。此外,如果移位計數n 1202等于2x或者更大,則在DEST1242中的結果將全部由0組成。
在上述示例中,諸如在圖17A和17B中,MM1和MM2中的一個或者兩個能夠是在一個允許MMX/SSE技術的處理器中的64位數據寄存器,或者是具有SSE2技術的128位數據寄存器。根據該實現,這些寄存器能夠是64/128/256位寬。類似地,MM1和MM2中的一個或者兩個能夠是除了寄存器之外的存儲單元。在一個實施例的處理器體系結構中,MM1和MM2是如上所述的一個右移位合并指令(PSRMRG)的源操作數。移位計數IMM對于這樣一個PSRMRG指令也是一個立即值。對于一個實施例,結果的目的地,DEST,也是一個MMX或者XMM數據寄存器。此外,DEST可以是和一個源操作數相同的寄存器。例如,在一個體系結構中,一個PSRMRG指令具有第一源操作數MM1和第二源操作數MM2。結果的預定目的地能夠是第一源操作數的寄存器,在這種情況下是MM1。
圖18A是一個流程圖,說明了一種并行右移位和合并數據操作數的方法的一個實施例。通常在此使用的長度值L表示操作數和數據塊的寬度。根據特定實施例,L能夠用來用數據段、位、字節(jié)、字的數目等等指定寬度。在塊1302處,接收一個長度L的第一數據操作數以供執(zhí)行移位合并操作使用。在塊1304處還接收一個長度L的第二數據操作數以供執(zhí)行該移位合并操作使用。在塊1306處接收一個以位/半字節(jié)/字節(jié)/字/雙字/四倍字為單位指示有多少數據段或者距離的移位計數。在塊1308處的執(zhí)行邏輯把第一操作數和第二操作數串接在一起。對于一個實施例,一個長度2L的臨時寄存器保持串接的數據塊。在一個替換實施例中,合并的數據被保持在一個存儲單元中。在塊1310處,串接的數據塊被右移位移位計數個位置。如果計數表示為一個數據段計數,則數據塊被右移位那么多個數據段,而且從左側沿著數據塊的最高有效端移入0值來填充空白。例如,如果計數以位或者字節(jié)表示,則數據塊被類似地右移那個距離。在塊1312處,從移位了的數據塊的右側部分或者最低有效端產生一個長度L的結果。對于一個實施例,長度數量為L的數據段被從移位的數據塊多路復用到一個目的寄存器或者存儲單元。
圖18B是一個流程圖,說明了一種右移位和合并數據的方法的另一個實施例。在塊1352處接收一個長度L的第一數據操作數以便利用右移位和合并操作進行處理。在塊1354處接收一個長度L的第二數據操作數。在塊1356處,一個移位計數指示期望的右移距離?;诶迷撘莆挥嫈档挠嬎阍趬K1358處左移位第一數據操作數。一個實施例的計算包含從L中減去該移位計數。例如,如果操作數長度L和移位計數是用數據段表示的話,則第一操作數被左移位“L-移位計數”個段,并從該操作數的最低有效端移入0值。類似地,如果L以位為單位表示而且計數以字節(jié)為單位表示的話,則第一操作數將被左移位“L-移位計數*8”個位。在塊1360處,第二數據操作數被右移位該移位計數值,而且從第二操作數的最高有效端移入0值來填充空白。在塊1362處,移位了的第一操作數和移位了的第二操作數被合并在一起以產生一個長度L的結果。對于一個實施例,該合并產生一個包含來自第一和第二操作數的期望數據段的結果。
對計算機的一個越來越普及的使用涉及非常大的視頻和音頻文件的操縱。盡管這些視頻和音頻一般經由很高帶寬的網絡或者大容量的存儲介質進行傳輸,但是為了處理該通信量,數據壓縮仍然是必要的。因此,不同的壓縮算法正變?yōu)橛糜谠S多普及的音頻、圖像和視頻格式的表示或者編碼方案中重要的一部分。依據運動圖象專家組(MPEG)標準的視頻,是使用壓縮的一個應用。MPEG視頻被分解成為一個層的分級結構,以幫助對錯誤進行處理、隨機搜索和編輯、以及同步。
為了說明的目的,簡要地描述構成一個MPEG視頻的這些層。在頂層是一視頻序列層,該視頻序列層是一個自包含的位流。向下的第二層是一組由一個或多個內部和/或非內部幀組所組成的圖片。向下的第三層是圖片層本身而在下面的下一層是一個片斷層。每個片段是光柵排序宏塊的一個連續(xù)序列,在典型的視頻應用中,這大多數經常在一個行的基礎上,但并不限制于這樣。每個片段都包含宏塊,它們是16×16陣列的亮度像素,或者是具有兩個8×8陣列的關聯色度像素的畫面數據單元。宏塊能夠被進一步分成分別的8×8塊以便進一步的處理,諸如轉換編碼。宏塊是用于運動補償和運動估計的基本單位,而且能夠具有與它相關聯的運動矢量。取決于實施例,宏塊能夠為16行乘16列或者各種尺寸。
在MPEG視頻中使用的一種臨時預測技術是基于運動估計。運動估計基于這樣的前提除了由對象在該幀內的移動引起的改變之外,連續(xù)的視頻幀通常將是類似的。如果在幀之間沒有運動,則編碼器能夠容易和有效地把當前幀預測為先前或者預測幀的復制。先前幀也可以被稱作參考幀。在另一個實施例中,參考幀能夠是下一個幀或者甚至是在該序列中的某個其它幀。該運動估計的實施例不要求把一個當前幀和先前的幀進行比較。因此在比較中使用了任何其它的幀。于是,為傳輸到編碼器所必須的信息變?yōu)閺某跏紖⒖紟貥嫯嬅嫠枰暮铣砷_銷。但是當在圖像之間有運動時,情況就變得更加復雜了。在一個最佳匹配宏塊和當前宏塊之間的差別理想地將是大量的0值。當編碼一個宏塊時,轉換和量化在最佳匹配和當前宏塊之間的差別。對于一個實施例,傳達量化了的值到一個用于壓縮的可變長度編碼。因為0能夠被很好地壓縮,所以具有許多0差值的最佳匹配是所希望的。還能夠從差值中導出運動矢量。
圖19A說明了一個運動估計的第一示例。左邊的幀1402是包含一木頭人(stick figure)和一路標的先前視頻幀的樣本。右邊的幀1404是包含一類似的木頭人和路標的當前視頻幀的樣本。在當前幀1404中,鏡頭移動已經導致路標從它在先前幀1402中的起始位置向下向右移動。在當前幀中具有現在舉起手臂的木頭人也已經從先前幀1402的中心向下移動到右側。運動估計算法能夠用來充分地表示在這兩個視頻幀1402、1404之間的改變。
對于一個實施例,運動估計算法為每個亮度宏塊都執(zhí)行一個全面的二維(2D)空間搜索。根據實現,運動估計可以不直接應用于在MPEG視頻中的色度,因為顏色運動也許可以由和亮度相同的運動信息充分地表示。可能有許多不同的方法用于實現運動估計,而且用于實施運動估計的特定方案多少取決于對于那個專門應用的復雜度與品質對比的問題。一個經由寬廣的2D區(qū)域的完全、窮舉搜索通常能夠產生最佳匹配結果。然而,這個性能需要一個最大的計算成本,因為運動估計常常是視頻編碼中最耗費計算的部分。試圖通過限制像素搜索范圍或者搜索類型來降低成本可能犧牲某些視頻品質。
圖19B說明了一個宏塊搜索的一個示例。幀1410、1420,每個都包含不同的宏塊。當前幀中的目標宏塊1430是要和來自先前幀1410、1420的先前宏塊匹配的當前宏塊。在第一幀1410中,一個壞的匹配宏塊1412包含路標的一部分而且是一個和當前宏塊的壞匹配。在第二幀1420中,好的匹配宏塊1420包含一個路標中的位和來自木頭人的頭部,如同在要被編碼的當前宏塊1430中的那樣。兩個宏塊1422、1430具有某些共性而且僅僅有一些微小誤差是可見的。因為找到一個相對好的匹配,所以編碼器給這個宏塊分配運動矢量。這些矢量指示宏塊必須橫向和縱向移動多遠以便產生一個匹配。
圖20說明了運動估計的一個示例應用和在產生第二幀中的一個結果預測。先前幀1510在時間上是在當前幀1520之前到來的。對于這個示例,從先前幀1510中減去當前幀1520,以獲得一個能夠被編碼和傳輸的、較不復雜的殘留誤差畫面1530。這個示例中的先前幀1510包含一個路標1511和一個木頭人1513。當前幀1520包含在一個板1524上的一個路標1521和兩個木頭人1522、1523。運動被估算和匹配得越準確,殘留誤差接近零的可能性就越高,而且能夠導致更高的編碼效率。宏塊預測能夠幫助減少搜索窗口的大小。
編碼效率能夠通過利用運動矢量趨向于在宏塊之間是高度相關的事實來完成。因此,水平分量可以和先前有效的水平運動矢量進行比鏡并且編碼差值。類似地,能夠在編碼之前計算一個垂向分量的差值。對于這個示例,從先前幀1510中減去當前幀1520產生一個包含第二個具有舉起手臂的木頭人1532和板1534的剩余畫面1530。這個剩余畫面1530被壓縮和傳輸。理想地,和壓縮和傳輸整個當前幀1520相比,這個剩余畫面1530在編碼上更不復雜而且占用更少的存儲器。然而,不是每個宏塊搜索都將導致一個可接受的匹配。如果編碼器確定沒有可接受的匹配存在,則能夠編碼特定的宏塊。
圖21A-B說明了在運動估計期間處理的示例當前幀1601和先前幀1650。先前幀1650以視頻幀序列的時間次序在當前幀1601的前面。每個幀都由在水平和垂直方向橫穿該幀擴展的非常多數量的像素組成。當前幀1601包含多個水平和垂直地排列的宏塊1610、1621-1627。對于這個實施例,當前幀1601被分成相等大小,不相重疊的宏塊1610、1621-1627。這個正方形宏塊中的每一個都被進一步再分成一個相等數目的行和列。對于同一個宏塊1610,可見到一個八行和八列的矩陣。宏塊1610中的每個正方形方塊都對應于單個像素。因此這個樣本宏塊1610包含64個像素。在其它實施例中,宏塊具有十六行乘十六列(16×16)的尺寸。對于一個實施例,每一個像素的數據包含八個數據位或者單個字。在替換實施例中,數據像素能夠包含其它的大小,包括半字節(jié)、字、雙字、四倍字等等。為了運動估計,當前幀中的這些當前宏塊試圖和在先前幀1650中的宏塊進行匹配。
對于這個實施例,先前幀1650包括一個搜索窗口1651,在其中該幀的一部分由搜索窗口1651所包圍。搜索窗口1651包含如下的區(qū)域,其中要試圖匹配當前幀1601的當前宏塊。類似于當前幀,搜索窗口被分成多個相等大小的宏塊。在此說明了一個具有八行八列的示例宏塊1660,但是宏塊能夠由一個包括具有十六行和十六列的其它各種尺寸組成。在一個實施例的運動估計算法期間,來自搜索窗口1651的每個單獨宏塊都按照次序和來自當前幀的一個當前宏塊進行比較以尋找一個可接受的匹配。對于一個實施例,在搜索窗口1651中的第一個先前宏塊的左上角和搜索窗口1651的左上角排在一起。在一個運動估計算法期間,宏塊處理的方向,一個像素接著一個像素,從搜索窗口的左側向右邊進行。因此第二宏塊的最左邊離搜索窗口的左邊一個像素,諸如此類。在第一像素行的結尾處,該算法返回到搜索窗口的左邊并且從下一行的第一個像素開始進行。重復這個處理過程,直到用于在搜索窗口1651中每一個像素的宏塊都已經和當前宏塊比較了為止。
圖22A-D依據本發(fā)明的一個實施例說明了對幀的運動估計操作。在此討論的本發(fā)明實施例涉及完全搜索運動估計算法。利用一次完全搜索,對應在先前幀(參考幀)的搜索窗口中的全部像素位置的宏塊被嘗試與當前幀的宏塊進行匹配。對于一個實施例,快速完全搜索運動估計算法使用SIMD右移位合并操作來快速地處理幀的壓縮數據。一個實施例中的SIMD右移位合并操作,還能夠通過減少數據加載的數目,尤其是不對齊的存儲器加載的數目及其它數據操作指令來改善處理器性能。通常,一個實施例中的運動估計過程能夠以偽代碼描述為for each current block in both x andy direction{for all mod l position in the y axis of the search windowfor all mod 4 positions in the x axis of the search windowload pixel data from memory to registers;attempt block match for 4 adjacent previous macroblocks;keep track of minimum value and index location for that previous macroblock;其中塊匹配操作要求for each line of l to m{for each macroblock starting at column of l to 4{generate correct data for this previous [line]from data held in registers;evaluate data[line]+=sum of absolute diffences (current [line],previous[line]);}}因此對于這個實施例,相對于當前宏塊估算在搜索窗口中每個像素位置的先前宏塊。如上所指出的那樣,這個實施例每個循環(huán)估算四個相鄰的先前宏塊。用存儲器對齊的加載把像素數據從存儲器中加載到寄存器中。通過右移位合并操作的使用,能夠操作這個像素數據,以形成適合于相鄰宏塊的移位了的數據段的不同組合。例如,在第一個先前宏塊的第一行上的第一、第二、第三和第四個像素能夠分別在存儲器地址0、1、2和3處開始。對于第二個先前宏塊中第一行的第一個像素,該像素從存儲器地址1開始。因此,一個在寄存器數據上的右移位合并操作,能夠通過重新使用為第一個先前宏塊早已從存儲器中加載的數據,產生用于第二個先前宏塊的必要像素行數據,導致時間和資源的節(jié)省。相似的移位合并操作能夠為象第三、第四和諸如此類的其它相鄰的先前宏塊產生行數據。
因此,用于一個實施例中的運動估計算法的塊匹配過程能夠以偽代碼描述為block match for four adjacent previous macroblocksfor each line of l to m {load pixel data for one line of current macroblock;aligned memory loads of two consecutive chunks of pixel data for one line ofsearch window from memory to registers;generate proper pixel data lines for each of the four adjacent previousmacroblocks from loaded data through shift right merge operations;calculate sum of absolute differences between a line from a previousmacroblock and corresponding line from current macroblock for each of four adjacentprevious macroblocks;accumulate four individual sum of absolute differences values for each of fouradjacent previous macroblocks;這個過程在下面被進一步描述。雖然這些示例依據對一個搜索窗口的四個相鄰宏塊的操作進行描述,本發(fā)明的替換實施例不局限于此。然而,本發(fā)明的實施例不局限于或者限于對相鄰宏塊的操作。被一起處理的多個參考宏塊也不必要必須單個像素距離地變化。對于一個實施例,任何具有一個位于在一個專門像素位置周圍的16乘16窗口內的像素的參考宏塊能夠被一起處理。取決于硬件資源諸如可用數據寄存器和執(zhí)行單元的數量,其它實施例能夠對或多或少數目的宏塊執(zhí)行塊匹配和絕對差值和的計算。例如,另一個實施例具有至少8個壓縮數據寄存器,這至少8個壓縮數據寄存器用于保持從對兩個8數據段寬數據塊執(zhí)行右移位合并操作所產生的像素數據的4種不同組合,該實施例能夠用簡單的兩個對齊的8數據段寬存儲器加載對4個相鄰的先前宏塊進行操作。8個壓縮數據寄存器中的4個用于計算開銷保持來自先前幀的第一個8數據段、先前幀中的下一個8數據段、用于當前幀的8數據段、以及來自右移位合并操作的8數據段。其它四個壓縮數據寄存器用于為四個宏塊中每一個的絕對差(SAD)值的和累計總數。宏模塊仍然可以添加更多的壓縮數據寄存器以便進行SAD計算和累加,以增加被一起處理的參考宏模塊的數目。因此,如果有四個額外的壓縮數據寄存器是可用的,則還能夠處理四個額外的先前宏塊。在一個實施例中,可以用來保持絕對差值的積累和的壓縮數據寄存器的數目能夠限制有多少宏塊能夠被一次處理。
此外,在某些處理器體系結構中,存儲器存取具有專門的粒度而且與某些邊界對齊。例如,一個處理器能夠基于16或者32個字節(jié)塊進行存儲器存取。在那種情況下,存取不在16或者32字節(jié)邊界對齊的數據,可能需要一個不對齊的存儲器存取,其在執(zhí)行時間和資源方面是昂貴的。甚至更壞的是,一個數據的期望部分可能穿過一個邊界而且重疊多個存儲塊。為了存取位于兩條單獨高速緩存線上的數據而將要求不對齊加載的高速緩存線分拆,可能是昂貴的。穿過一個存儲器頁面邊界的數據線甚至是更壞的。例如,如果利用如下的過程,該過程使用8字節(jié)存儲塊和如下宏塊進行操作,所述宏塊具有8個像素,每個像素都具有一個字節(jié)的數據,則對于那個宏塊線而言,一個對齊的存儲器加載就足夠了。但是對于下一個相鄰宏塊,其距離前一個宏塊為一個像素列,則那個像素線需要的數據將覆蓋來自第一個宏塊的存儲塊中的7個數據字節(jié),而且為下一個存儲塊中的1個數據字節(jié)而穿過一個存儲器邊界。本發(fā)明中的實施例使用右移位合并操作來有效地處理數據。在一個實施例中,在對齊的存儲器邊界處加載兩個連續(xù)的存儲塊,并且保持在寄存器中用于多次使用。右移位合并操作能夠使用這些存儲塊,并且移位在它們中的數據段必要的距離來獲得正確的數據線。所以利用這個示例,一個右移位合并指令能夠使用兩個早已加載的存儲塊,并且從第二個塊中移出一個數據字節(jié),以及從第一塊移位一個數據字節(jié)到第二塊中,來產生用于第二個宏塊第一線的數據,而不用必須執(zhí)行一個不對齊的加載。運動估計的實施例還能夠基于如何實現該算法來打斷相關性鏈。例如,通過修改計算的次序,能夠刪除或者變換數據/指令的相關性,以便如圖15中的處理器1000所述,某些計算和指令能夠被無次序地執(zhí)行。利用新一代的處理器體系結構,因為提高了的執(zhí)行等待時間和可用計算資源,性能改善甚至能夠變得更大。通過使用右移位合并指令的一個實施例,能夠避免塊匹配序列中的某些相關性。例如,能夠并行執(zhí)行多個絕對差值求和操作和/或累加操作。
圖22A說明了當前宏塊貫穿當前幀1701的前進。對于這個實施例,每個當前宏塊1710被分成16行和16列,而且因此包含256個單獨的像素。對于這個實施例,在每個宏塊1710中的像素被一次一行1711地處理。在當前塊中的全部十六行都已經相對于在一個搜索窗口中的期望宏塊被處理了時,處理下一個當前宏塊。這個實施例的宏塊以宏塊大小為步長、在水平方向1720中從當前幀1701的左邊到右邊進行處理。換句話說,當前宏塊在這個實施例中沒有重疊,而且這樣排列當前宏塊,以致于每個宏塊都緊挨著下一個宏塊。例如,第一個宏塊能夠從像素列1擴展到像素列16。第二個宏塊將從列17擴展到列32,諸如此類。在宏塊行的末端,該處理返回1722到左邊沿并且下降一個宏塊高度,在這示例中是十六行。降低一個宏塊大小的宏塊,然后從左至右被水平地處理1724,直到用于整個幀1701的試圖匹配都完成了為止。
圖22B說明了宏塊橫穿一個先前(參考)幀的搜索窗口1751的前進。取決于特定的實現,搜索窗口1751能夠集中于某個區(qū)域,而且因此小于整個先前幀。在另一個實施例中,搜索窗口能夠完全和先前幀重疊。類似于當前塊,每個先前的宏塊1760、1765、1770、1775都被分成16行16列,在每個宏塊中總共有256像素。對于本發(fā)明的這個實施例,在搜索一個匹配中,搜索窗口1751中的四個先前宏塊1760、1765、1770、1775相對于單個當前塊進行并行處理。不同于一個當前幀中的當前宏塊,如這個示例所示,在一個搜索窗口1751中的先前宏塊1760、1765、1770、1775能夠重疊而且確實重疊了。在此,每個先前宏塊被移位一個像素列。因此,在BLK 1第一行最左邊的像素是像素1761,對于BLK 2它是像素1766,對于BLK 3它是像素1771,而且對于BLK 4是像素1776。在一個運動估計算法期間,一個先前宏塊1760、1765、1770、1775中的每一行相對于一個當前塊中的相應行進行比較。例如,BLK 11760、BLK 2 1765、BLK3 1770和BLK 4 1775中的行1每個都用一個當前塊行1進行處理。
用于四個重疊、相鄰宏塊的逐行比較繼續(xù),直到該宏塊的全部16行都被執(zhí)行了為止。這個實施例中的算法移位四個像素列,以對下一個四個宏塊進行操作。因此對于這個示例,用于下一個四個宏塊的最左邊的第一個像素列將分別是像素1796、像素1797、像素1798和像素1799。對于這個實施例,先前宏塊的處理繼續(xù)向右1780貫穿搜索窗口1751,折回1782向下一個像素行,以在搜索窗口1751的最左邊像素重新開始,直到該搜索窗口被完成了為止。盡管這個實施例中的一個當前幀的當前宏塊沒有重疊,而且下一個獨立宏塊為一個宏塊高度或者寬度,但是一個先前或者參考幀的先前宏塊確實重疊,而且下一個宏塊遞增了單個像素行或列。雖然這個示例中的四個參考宏塊1760、1765、1770、1775是相鄰的,而且相差單個像素列,但是在搜索窗口1751中,在一個選定像素位置周圍覆蓋一個指定區(qū)域的任何宏塊,能夠和在那個像素位置處的宏塊一起被處理。例如,在像素1796處的宏塊1760正被處理。任何在像素1796周圍16×16窗口內的宏塊都能夠和宏塊1760一起被處理。這個示例中的16×16窗口是由于一個宏塊的尺寸和行的線寬。在這種情況下,一行或者數據線具有16個數據單元。因為這個用于一個運動估計算法的本實施例的塊匹配函數,能夠加載兩條16個數據單元的數據線,并且執(zhí)行右移位合并,以產生具有這兩條數據線的移位/合并版本的不同的數據線,所以其它如下宏塊將能夠至少部分地重用那個加載的數據,其中所述宏塊與16×16窗口相重疊,將為這個宏塊加載所述窗口的數據。因此任何和宏塊1760重疊的宏塊,諸如宏塊1765、1765、1770、1775,或者一個起始于宏塊1760的右下像素位置的宏塊,能夠和宏塊1760一起被處理。在重疊數量上的差異影響能夠從先前加載的數據中重用的數據數量。
利用按照本發(fā)明的運動估計實施例,宏塊分析包含以逐行為基礎在先前(參考)宏塊和當前宏塊之間的進行比較,以獲得在兩個宏塊之間絕對差值的和。絕對差值的和能夠指示宏塊的不同程度以及存在的匹配的接近程度。用于一個實施例的每個先前宏塊都能夠由如下值加以表示,該值是通過累加該宏塊中的全部十六行的絕對差值的和而獲得的。對于正被分析的當前宏塊,保持一個最匹配宏塊的記號。例如,跟蹤絕對差值的最小累加和以及用于相應先前宏塊的位置索引。隨著運動估計貫穿搜索窗口前進,把每個先前宏塊的累加和與最小值進行比較。如果更近的先前宏塊具有一個比跟蹤的最小值要小的累加差值,因此指示了一個比現有最匹配更接近的匹配,則用于那個最近先前宏塊的累加差值和索引信息變?yōu)樾碌淖钚〔钪岛退饕?。當在一個實施例中已經處理了對應一個搜索窗口中的所有像素的可用宏塊時,具有最小差值的被索引宏塊能夠用來幫助獲得一殘留畫面,以便對那個當前幀進行壓縮。
圖22C說明了并行處理對應一個給定搜索窗口的四個參考宏塊1810、1815、1820、1825與用于本發(fā)明一個實施例的當前塊1840。對于這個示例,對應搜索窗口中的像素的數據被排序為“A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P”1860,其中“A”位于數據集之中的最低地址位置(0)而且“P”位于最高地址位置(15)。這個像素集1860包含兩部分1681、1682,每個都具有八個(m)數據段。如上面所述,右移合并操作的使用允許本發(fā)明的實施例操作具有兩個數據段1618、1682的操作操,而且為不同的先前宏塊1810、1815、1820、1825產生正確對齊的行數據1830。每個宏塊,先前的1810、1815、1820、1825和當前的1840,都具有一個m行m列的大小。為了討論的目的以及為了保持事情簡單,在這個示例中m等于八。替換的實施例能夠具有不同大小的宏塊,例如其中m等于4、16、32、64、128、256等等。
在這個示例中,用當前塊1840中的第一行,把運動估計算法應用于這四個先前塊1810、1815、1820、1825的第一行。對于一個實施例,用兩個對齊的存儲器加載操作,為兩個宏塊寬度(2m),從存儲器中加載包含兩個數據段1861、1862的像素數據以及把它們保持在臨時寄存器中。對這兩個數據段1861、1862的右移位合并操作允許產生行數據1830的九個可能的組合,而不用多次的存儲器存取。此外,能夠避免在執(zhí)行時間和資源方面昂貴的不對齊的存儲器加載。在這個示例中,兩個數據段1861、1862和字節(jié)邊界對齊。不以字節(jié)邊界上的地址開始的存儲器加載,諸如從數據段B、D或者D中的存儲器加載,典型地會要求非對齊的存儲器加載操作。對應每一塊的行數據1830如下所述,其中最左邊的數據段是最低的地址。在塊1 1810中,行1 1811包含“A、B、C、D、E、F、G、H”。因為在行1 1811中的數據與第一個數據段1861相同,所以不需要移位。但是塊2 1815中的行I 1816包含“B、C、D、E、F、G、H、I”。因為先前的塊1 1810和塊2 1815水平相隔一個像素,塊2 1815從像素數據B開始,而塊1 1810從像素數據A開始,而且第二個像素數據是B。因此用一個移位計數將兩個數據段1861、1862右移位合并將產生塊2中的行1數據。
類似地,塊3 1820再向右一個像素,而且塊3 1820中的行1 1821從像素數據C開始,包含“C、D、E、F、G、H、I、J”。利用兩個移位計數對兩個數據段1861、1863的操作數進行右移位合并,將產生塊3中的行1數據。塊4 1825中的行1 1826包含“D、E、F、G、H、I、J、K”。這個數據能夠通過對相同數據操作數進行四個計數的右移位合并操作而產生。因此對暫時保存的、先前加載的數據段1861、1862進行右移位合并操作的使用,允許在為其它相鄰宏塊產生行數據的過程種重用數據,以及通過減少存儲器加載的數目,尤其是非對齊存儲器加載的數目來節(jié)省時間/資源。要注意到對于針對先前幀的參考宏塊所進行的所有絕對差的和的比較而言,對應當前塊的像素數據都是相同的。因為當前塊1840可以和存儲器邊界對齊,所以單個對齊的存儲器加載對于當前塊1840中的行數據1842是可能的。
繼續(xù)進行這一運動估計實施例的示例,先前宏塊1810、1815、1820、1825中的每一行都和當前塊1840的相應行進行比較,以獲得絕對差值的和。因此,在絕對差值求和(SAD)操作1850中,塊1 1810中的行1 1811和當前塊1840中的行1 1841進行比較。同樣的操作發(fā)生在其它三個正被操作的塊。雖然看起來四個宏塊1810、1815、1820、1825被同時或者并行操作,但是本發(fā)明的其它實施例不局限于這樣。因此,對這四個宏塊的操作能夠在時間上連續(xù)地發(fā)生,但是是作為四個的序列。例如,按塊1 1810、塊2 1815、塊3 1820和塊4 1825的次序,每個參考塊的行1都經受使用當前塊1840中的那行所進行的SAD操作1850。然后,每個參考塊的行2經受一個SAD操作1850,諸如此類。對每個SAD操作1850之后,在一個臨時寄存器中累加絕對差值和的運行總計。因此,在這個示例實施例,四個寄存器累加絕對差值的和,直到那個宏塊中的所有m行都被執(zhí)行了為止。每個塊的累加值和作為一個最佳宏塊匹配搜索的一部分的現有最小差值進行比較。雖然這個示例描述了四個相鄰的、重疊的先前宏塊的處理,但是如果數據線是相關的話,那么和在搜索窗口中的第一塊BLK 1810重疊的其它宏塊也能夠和用于BLK 1810的數據加載一起加以處理。因此,一個在正被處理的當前宏塊周圍的16×16窗口內的宏塊也能夠被處理。
圖22D說明了絕對差值和(SAD)操作1940以及那些SAD值求和。在此,參考宏塊BLOCK 1 1900從行A到行P的每一行和它的用于當前宏塊1920的對應物進行SAD操作1940。SAD操作1940比較用于表示在每一行中的像素的數據,并且計算用于表示在兩行之間的絕對差的值,在所述的兩行中,一行來自于前一宏塊1900,一行來自于當前的宏塊1920。把來自所有行A到P的這些SAD操作1940的值求和在一起,作為一個塊總和1942。這個塊總和1942提供了用于整個先前宏塊1900和當前宏塊1920的絕對差的總和的累加值?;谶@個塊總和1942,運動估計算法能夠確定先前宏塊1900相對于這個當前宏塊1920的匹配的相似或接近程度。
盡管這個實施例每次對四個參考宏塊進行操作,但是替換的實施例能夠根據加載的像素數據的數量和可利用的寄存器的數目對不同數目的宏塊進行操作。此外,在運動估計處理期間,能夠使用各種寄存器。例如,擴充寄存器,諸如MMX技術的mm寄存器、或SSE2技術的XMM寄存器,能夠被用來保持諸如像素數據這樣的壓縮數據。在一個實施例中,如果每一個像素有8位數據,則64位寬的MMX寄存器能夠保持8個字節(jié)、或8個單獨的像素。在另一個實施例中,如果每一個像素有8位數據,則128位寬的MMX寄存器能夠保持16個字節(jié)、或16個單獨的像素。類似地,能夠保持壓縮數據的其它大小諸如32/128/256/512位寬的寄存器,也能夠被用于本發(fā)明的實施例。另一方面,不需要壓縮數據寄存器的計算,諸如常規(guī)整數運算,能夠使用整數寄存器和整數硬件。
圖23A是說明了一種預測和估計運動的方法的一個實施例的流程圖。在塊2002,跟蹤的最小(min)值和用于那個最小值的索引位置被初始化。就這個實施例來說,跟蹤的最小值和索引指示了搜索窗口中被處理的先前(參考)宏塊中的哪一個宏會與當前宏塊最匹配。在塊2004,檢查是否已經完成了當前幀中的所有希望的宏塊。如果是這樣的話,則完成了這一運動估計算法的部分。如果所有希望的當前宏塊還沒有被完全處理,則在塊2006,為當前幀選擇一個未被處理的當前宏塊。在塊2008,從先前(參考)幀的搜索窗口中的第一個像素位置繼續(xù)進行塊匹配。在塊2010,檢查是否已經完成了該搜索窗口。通過第一遍,搜索窗口都沒有被處理。但是通過后續(xù)的一遍,如果整個搜索窗口都已經被處理了,則流程返回到塊2004,以確定其它的當前宏塊是否可用。
如果整個搜索窗口都沒有被分析,則在塊2012進行檢查,以確定沿著這個X軸行的所有像素是否都已經被處理了。如果這一行已經被完成了,則行計數增加到下一行,并且流程返回到塊2010,以查看在搜索窗口中是否可得到在這一新行上的更多宏塊。但是如果對應該行上的像素的所有可得到的宏塊還被被完全處理,則在塊2014,檢查這個像素列和行的宏塊是否已經被處理了。如果該宏塊已經被處理了,則增加列計數值,并且流程返回到塊2012,以查看對應這個新列的像素的宏塊是否已經被處理了。但是,如果對應這一列和行的像素的宏塊還沒有被處理,則在這個參考宏塊和當前宏塊之間執(zhí)行塊匹配。
用沿著X和Y軸增加的像素的行和列位置描述了在這個例子中的流程,并且為了簡單起見每次增加一個像素。然而,就本發(fā)明的一個實施例來說,每一遍處理四個在前的宏塊。因此,每一遍沿著Y軸的列計數值將會增加4列。其它實施例還能夠每次處理8、16、32等的宏塊,并且因此列計數值相應的增加8、16、32等列,以便為算法的后續(xù)一遍指向正確的像素位置。盡管這個實施例中的塊匹配處理使用了以有序方式沿著X和Y軸的搜索,但是另一個實施例中的塊匹配能夠使用類似于使用了不同模式的菱形搜索、或log搜索的另一種算法。
圖23B是進一步描述了圖23A中的塊匹配的流程圖。在塊2222,加載對應參考宏塊和當前宏塊的數據。就一個實施例來說,因為兩個壓縮數據塊包括對應許多連續(xù)像素的數據,所以參考宏塊數據被加載。在一個實施例中,每個壓縮數據塊包含8個數據單元。在塊2224,根據需要對數據塊執(zhí)行右移位合并操作,以獲得正確的數據塊。對于4個在前宏塊一起被處理的實施例來說,能夠為對應于位于每個宏塊中的行的數據塊生成右移位合并操作。對應一個像素位置以上的每個相鄰宏塊的數據塊被移動一個像素位置以上,其中對于搜索窗口中的每一個像素行,宏塊看來像是一次一個像素地滑動通過搜索窗口。向被一起處理的4個在前的宏塊中的每一個應用塊2226、2228、2230和2232的操作。就一個實施例來說,在下一個操作發(fā)生之前,所有4個宏塊進行相同的操作。就另一個實施例來說,在處理具有包含被適當移位的數據段的數據塊的下一個在前宏塊之前,單個在前的宏塊可以完成所有操作。
在塊2226,為這些宏塊中的每一行計算在前宏塊和當前宏塊的對應行之間的絕對差的總和。在塊2228,把用于在前宏塊中的所有行的絕對差的總和累加在一起。在塊2230,把用于在前宏塊的累加的差值與當前的最小值進行比較。如果在塊2232,用于這個在前宏塊的差值小于當前的最小值,則用這個新的差值更新最小值。此外,還更新索引以反映這個在前宏塊的位置,以指示這個在前的宏塊是迄今為止最匹配的。但是如果在塊2232,該新的差值大于當前的最小值,則這個在前的塊與迄今為止已經匹配的相比,并不是更緊密的匹配。
依據本發(fā)明的運動估計算法的實施例還能夠用當前的硬件資源改善處理器和系統性能。但是,隨著技術繼續(xù)發(fā)展,本發(fā)明中的實施例在同更大量的硬件資源和更快的更高效的邏輯電路相結合時能夠對改善性能有更加深遠的影響。因此,運動估計的一個有效的實施例能夠跨越處理器階段具有不同的和更大的影響。僅僅簡單地在現代的處理器體系結構中增加更多的資源不能保證更好的性能改善。此外,通過維護像運動估計和右移位合并指令(PSRMRG)的一個實施例那樣的應用的效率,更大的性能改善是可能的。
盡管為了簡化討論以上的例子通常是在64位寬的硬件/寄存器/操作數的環(huán)境中描述的,但是其它實施例使用了128位寬的硬件/寄存器/操作數來執(zhí)行寄存器合并操作、右移位合并操作和運動估計計算。此外,本發(fā)明中的實施例不局限于特殊的硬件或諸如MMX/SSE/SSE2技術之類的技術類型,并且能夠和其它SIMD實現及其它圖形數據操作技術一起使用。盡管以上就圖20-23B描述的運動估計和塊匹配實施例是在8個像素寬或8個數據單元寬的行和8行乘8列大小的宏塊的環(huán)境中描述的,但是其它實施例包含其它尺寸。例如,行可以是16個像素寬或16個數據單元寬,而且宏塊是16行乘16列。
在上述的說明書中,結合其中的具體示范性實施例已經對本發(fā)明進行了描述。然而,顯然可以對它進行各種修改和變化,而沒有背離由附加利要求書所闡述的本發(fā)明的更廣的精神和范圍。因此,說明書和附圖只是說明性的,而沒有限制意義。
權利要求
1.一種方法,包含接收一個移位計數M;把具有第一組L個數據單元的第一操作數左移位“L-M”個數據單元;把具有第二組L個數據單元的第二操作數右移位M個數據單元;把所述移位了的第一組和所述移位了的第二組進行合并以生成一個具有L個數據單元的結果。
2.如權利要求1所述的方法,其特征在于所述第一操作數的所述移位生成所述移位了的第一組,所述移位了的第一組包含M個數據單元,且與所述第一操作數的左邊對齊。
3.如權利要求2所述的方法,其特征在于所述左移位從所述第一操作數中移去了所述的“L-M”個數據單元,并且在所述第一操作數的右邊插入零,以代替由移出的所述“L-M”個數據單元空出的空間。
4.如權利要求3所述的方法,其特征在于所述第二操作數的所述移位生成所述移位了的第二組,所述移位了的第二組包含“L-M”個數據單元,且與所述第二操作數的右邊對齊。
5.如權利要求4所述的方法,其特征在于所述右移位從所述第二操作數中移去了所述M個數據單元,并且在所述第二操作數的左邊插入零,以代替由所述移出的M個數據單元空出的空間。
6.如權利要求5所述的方法,其特征在于所述合并包含對所述移位了的第一組和所述移位了的第二組執(zhí)行邏輯或操作。
7.如權利要求6所述的方法,其特征在于所述結果由所述移位了的第一組的所述M個數據單元以及所述移位了的第二組的所述“L-M”個數據單元組成,并且其中所述移位了的第一組的所述M個數據單元與所述移位了的第二組的所述“L-M”個數據單元不重疊。
8.如權利要求7所述的方法,其特征在于所述第一操作數、所述第二操作數、和所述結果是壓縮數據操作數。
9.如權利要求8所述的方法,其特征在于每個數據單元是數據的字節(jié)。
10.如權利要求9所述的方法,其特征在于L等于8。
11.如權利要求10所述的方法,其特征在于M是從0到15的值。
12.如權利要求9所述的方法,其特征在于L等于16。
13.如權利要求12所述的方法,其特征在于M是從0到31的值。
14.一種方法,包含接收右移位合并指令、計數、包含第一組數據單元的第一數據操作數和包含第二組數據單元的第二數據操作數;左移位所述第一組數據單元,直到保留在所述第一數據操作數中的數據單元的數目等于所述計數為止;右移位所述第二組數據單元,以從所述第二數據操作數中移去等于所述計數值的數目的數據單元;以及將所述移位了的第一組數據單元和所述移位了的第二組數據單元合并在一起,以獲得一個包含所述第一數據操作數和所述第二數據操作數的數據單元的結果。
15.如權利要求14所述的方法,其特征在于所述第一組數據單元的所述左移位包含從所述第一數據操作數的左邊移去數據單元,并且在所述第一數據操作數的右邊插入零以填充由所述移去的數據單元空出的位置。
16.如權利要求15所述的方法,其特征在于所述第二組數據單元的所述右移位包含從所述第二數據操作數的右邊移去數據單元,并且在所述第二操作數的左邊插入零以填充由所述移去的數據單元空出的位置。
17.如權利要求16所述的方法,其特征在于所述合并包含把所述移位了的第一組數據單元和所述移位了的第二組數據單元一起邏輯或。
18.如權利要求17所述的方法,其特征在于所述第一操作數和所述第二操作數加載有一連續(xù)數據塊的相鄰存儲單元的數據,而且所述第一組數據單元和所述第二組數據單元不重疊。
19.一種方法,包含接收一條移位合并指令和一個移位計數M;把具有第一組L個數據單元的第一操作數與具有第二組L個數據單元的第二操作數串接起來,以形成一個2L長的數據單元塊;把所述塊右移位M個位置,其中最右邊的M個數據單元被丟棄了;以及從所述移位了的塊中輸出最右邊的L個數據單元,作為所述移位合并指令的結果。
20.如權利要求19所述的方法,其特征在于所述右移位進一步包含在所述塊的最左邊插入零以填充由所述M個數據單元空出的空間。
21.如權利要求20所述的方法,其特征在于所述第一操作數和所述第二操作數是壓縮數據操作數。
22.如權利要求21所述的方法,其特征在于每個數據單元包含數據的字節(jié)。
23.如權利要求22所述的方法,其特征在于L等于8。
24.如權利要求23所述的方法,其特征在于M是從0到15的值。
25.如權利要求24所述的方法,其特征在于所述塊被保持在具有2L個數據單元的可用空間的暫時壓縮數據寄存器中。
26.一種裝置,包含一譯碼器,用于譯碼右移位合并指令;一調度器,用于分派所述指令,以便用第一操作數、第二操作數和移位計數M加以執(zhí)行,其中第一操作數包含第一組L個數據單元,第二操作數包含第二組L個數據單元;以及一執(zhí)行單元,用于執(zhí)行所述指令,所述指令導致所述執(zhí)行單元進行如下操作把所述第一操作數左移位“L-M”個數據單元;把所述第二操作數右移位M個數據單元;把所述移位了的第一操作數和所述移位了的第二操作數進行合并,以生成一個具有L個數據單元的結果。
27.如權利要求26所述的裝置,其特征在于所述右移位合并指令包含一條微指令(uop)。
28.如權利要求27所述的裝置,其特征在于所述第一操作數的所述左移位生成移位了的第一組數據,所述移位了的第一組數據包含M個數據單元,且與所述第一操作數的最左邊對齊。
29.如權利要求28所述的裝置,其特征在于所述左移位從所述第一操作數中移去“L-M”個數據單元,并且在所述第一操作數的右邊插入零,以代替由所述移出的“L-M”個數據單元空出的空間。
30.如權利要求29所述的裝置,其特征在于所述第二操作數的所述右移位生成所述移位了的第二組,所述移位了的第二組包含“L-M”個數據單元,且與所述第二操作數的右邊對齊。
31.如權利要求30所述的裝置,其特征在于所述右移位從所述第二操作數中移去所述M個數據單元,并且在所述第二操作數的左邊插入零,以代替由所述移出的M個數據單元空出的空間。
32.如權利要求31所述的裝置,其特征在于所述第一操作數、所述第二操作數和所述結果是壓縮數據寄存器。
33.如權利要求32所述的裝置,其特征在于每個數據單元是數據的字節(jié)。
34.如權利要求33所述的裝置,其特征在于L等于8。
35.如權利要求34所述的裝置,其特征在于M是從0到15的值。
36.如權利要求35所述的裝置,其特征在于所述裝置包含64位的體系結構。
37.如權利要求33所述的裝置,其特征在于L等于16,M是從0到31的值,并且所述裝置包含128位的體系結構。
38.一種系統,包含一存儲器,用于存儲數據和指令;一處理器,通過總線與所述存儲器相耦合,所述處理器可操作用于執(zhí)行右移位合并操作,所述處理器包含一總線單元,用于從所述存儲器接收指令;一譯碼器,用于譯碼指令,以便對具有第一組K個數據單元的第一操作數和具有第二組L個數據單元的第二操作數執(zhí)行移位計數M的右移位合并;一調度器,用于分派所述譯碼了的指令以便執(zhí)行;以及一執(zhí)行單元,用于執(zhí)行所述譯碼了的指令,所述譯碼了的指令導致所述執(zhí)行單元進行如下操作把所述第一操作數左移位“K-M”個數據單元;把所述第二操作數右移位M個數據單元;把所述移位了的第一操作數和所述移位了的第二操作數進行合并以生成一個具有K個數據單元的結果。
39.如權利要求38所述的系統,其特征在于K等于L,并且K和L都為8。
40.如權利要求38所述的系統,其特征在于所述左移位從所述第一操作數中移去“K-M”個數據單元,并且在所述第一操作數的右邊插入零,以代替由所述移出的“K-M”個數據單元空出的空間;和所述右移位從所述第二操作數中移去所述M個數據單元,并且在所述第二操作數的左邊插入零,以代替由所述移出的M個數據單元空出的空間。
41.如權利要求38所述的系統,其特征在于每個數據單元包含數據的字節(jié),并且所述第一操作數和所述第二操作數是壓縮數據操作數。
42.一種在其上包含了計算機程序的機器可讀介質,所述計算機程序可由機器執(zhí)行以實現包含以下步驟的方法接收一個移位計數M;把具有第一組L個數據單元的第一操作數左移“L-M”個數據單元;把具有第二組L個數據單元的第二操作數右移M個數據單元;把所述移位了的第一組和所述移位了的第二組進行合并以生成一個具有L個數據單元的結果。
43.如權利要求42所述的機器可讀介質,其特征在于所述左移位從所述第一操作數中移去所述的“L-M”個數據單元,并且在所述第一操作數的右邊插入零,以代替由移出的所述“L-M”個數據單元空出的空間;所述右移位從所述第二操作數中移去所述M個數據單元,并且在所述第二操作數的左邊插入零,以代替由所述移出的M個數據單元空出的空間;以及所述合并包含對所述移位了的第一組和所述移位了的第二組執(zhí)行邏輯或操作。
44.如權利要求43所述的方法,其特征在于所述第一操作數、所述第二操作數和所述結果是壓縮數據操作數。
45.一種方法,包含接收一個移位計數M;把具有第一組L個數據單元的第一操作數移位“L-M”個數據單元;把具有第二組L個數據單元的第二操作數移位M個數據單元;把所述移位了的第一組和所述移位了的第二組進行合并以生成一個具有L個數據單元的結果。
46.如權利要求45所述的方法,其特征在于所述第一操作數被右移位“L-M”個數據單元。
47.如權利要求46所述的方法,其特征在于所述第一操作數的所述右移位生成所述移位了的第一組,所述移位了的第一組包含M個數據單元,且與所述第一操作數的右邊對齊,并且所述右移位從所述第一操作數中移去所述“L-M”個數據單元,并且在所述第一操作數的左邊插入零。
48.如權利要求45所述的方法,其特征在于所述第二操作數被左移位M個數據單元。
49.如權利要求48所述的方法,其特征在于所述第二操作數的所述左移位生成所述移位了的第二組,所述移位了的第二組包含“L-M”個數據單元,且與所述第二操作數的左邊對齊,并且所述左移位從所述第二操作數中移去所述M個數據單元,并且在所述第二操作數的右邊插入零。
50.如權利要求45所述的方法,其特征在于所述結果包含所述移位了的第一組的M個數據單元以及所述移位了的第二組的“L-M”個數據單元,并且所述移位了的第一組的所述M個數據單元與所述移位了的第二組的所述“L-M”個數據單元不重疊。
51.如權利要求50所述的方法,其特征在于所述第一操作數、所述第二操作數和所述結果每個都是壓縮數據操作數。
52.如權利要求51所述的方法,其特征在于每個數據單元包含數據的字節(jié),L等于8,而且M是從0到15的值。
53.一種方法,包含接收移位合并指令、計數、包含第一組數據單元的第一數據操作數和包含第二組數據單元的第二數據操作數;移位所述第一組數據單元,直到保留在所述第一數據操作數中的數據單元的數目等于所述計數為止;移位所述第二組數據單元,以從所述第二數據操作數中移去等于所述計數值的數目的數據單元;以及將所述移位了的第一組數據單元和所述移位了的第二組數據單元合并在一起,以獲得一個包含所述第一數據操作數和所述第二數據操作數的數據單元的結果。
54.如權利要求53所述的方法,其特征在于所述第一組數據單元被右移位,其中從所述第一數據操作數的右邊移出數據單元,而且在所述第一數據操作數的左邊插入零。
55.如權利要求54所述的方法,其特征在于所述第二組數據單元被左移位,其中從所述第二數據操作數的左邊移出數據單元,而且在所述第二操作數的右邊插入零。
56.一種方法,包含接收一條移位合并指令和一個移位計數M;把具有第一組L個數據單元的第一操作數與具有第二組L個數據單元的第二操作數串接起來,以形成一個2L長的數據單元塊;把所述塊移位M個位置,其中M個數據單元被丟棄了;以及從所述移位了的塊中輸出一組L個連續(xù)數據單元,作為所述移位合并指令的結果。
57.如權利要求56所述的方法,其特征在于所述移位進一步包含在所述塊的、與丟棄所述M個數據單元相對的一邊插入零。
58.一種裝置,包含一執(zhí)行單元,用于執(zhí)行包含第一操作數、第二操作數和移位計數M的移位合并指令,其中第一操作數包含第一組L個數據單元,第二操作數包含第二組L個數據單元,所述指令使所述執(zhí)行單元進行如下操作把所述第一操作數移位“L-M”個數據單元;把所述第二操作數移位M個數據單元;把所述移位了的第一操作數和所述移位了的第二操作數進行合并以生成一個具有L個數據單元的結果。
59.如權利要求58所述的裝置,其特征在于所述右移位合并指令包含單條微指令(uop)。
60.如權利要求58所述的裝置,其特征在于所述第一操作數被左移位“L-M”個數據單元,所述第二操作數被右移位M個數據單元。
61.如權利要求60所述的裝置,其特征在于所述第一操作數的所述左移位生成一個移位了的第一組數據,所述移位了的第一組數據包含M個數據單元,且與所述第一操作數的左邊對齊,并且所述左移位從所述第一操作數中移去“L-M”個數據單元,并且在所述第一操作數的右邊插入零;以及所述第二操作數的所述右移位生成所述移位了的第二組數據,所述移位了的第二組數據包含“L-M”個數據單元,且與所述第二操作數的右邊對齊,并且所述右移位從所述第二操作數中移去M個數據單元,并且在所述第二操作數的左邊插入零。
62.如權利要求58所述的裝置,其特征在于所述第一操作數被右移位“L-M”個數據單元,所述第二操作數被左移位M個數據單元。
63.如權利要求62所述的裝置,其特征在于所述第一操作數的所述右移位生成一個移位了的第一組數據,所述移位了的第一組數據包含M個數據單元,且與所述第一操作數的右邊對齊,并且所述右移位從所述第一操作數中移去“L-M”個數據單元,并且在所述第一操作數的左邊插入零;以及所述第二操作數的所述左移位生成所述移位了的第二組數據,所述移位了的第二組數據與包含“L-M”個數據單元,且與所述第二操作數的左邊對齊,并且所述左移位從所述第二操作數中移去M個數據單元,并且在所述第二操作數的右邊插入零。
64.一種包含機器可讀介質的物品,其中該機器可讀介質存儲了表示一個集成電路的數據,該集成電路包含一執(zhí)行單元,用于執(zhí)行包含第一操作數、第二操作數和移位計數M的移位合并指令,其中第一操作數包含第一組L個數據單元,第二操作數包含第二組L個數據單元,所述指令使所述執(zhí)行單元進行如下操作把所述第一操作數移位“L-M”個數據單元;把所述第二操作數移位M個數據單元;把所述移位了的第一操作數和所述移位了的第二操作數進行合并以生成一個具有L個數據單元的結果。
65.如權利要求64所述的物品,其特征在于所述右移位合并指令包含單條微指令。
66.一種包含機器可讀介質的物品,其中該機器可讀介質存儲了表示一個預定功能的數據,該功能包含接收一個移位計數M;把具有第一組L個數據單元的第一操作數移位“L-M”個數據單元;把具有第二組L個數據單元的第二操作數移位M個數據單元;把所述移位了的第一組和所述移位了的第二組進行合并以生成一個具有L個數據單元的結果。
67.如權利要求66所述的物品,其特征在于由所述機器可讀介質存儲的所述數據表示一個集成電路設計,其在被制造好時響應于單條指令執(zhí)行所述預定功能。
68.如權利要求67所述的物品,其特征在于所述第一操作數被左移位以生成所述移位了的第一組,所述移位了的第一組包含M個數據單元,且與所述第一操作數的左邊對齊,并且所述左移位從所述第一操作數中移去所述“L-M”個數據單元,并且在所述第一操作數的右邊插入零。
69.如權利要求68所述的物品,其特征在于所述第二操作數被右移位以生成所述移位了的第二組,所述移位了的第二組包含“L-M”個數據單元,且與所述第二操作數的右邊對齊,并且所述右移位從所述第二操作數中移去所述M個數據單元,并且在所述第二操作數的左邊插入零。
70.如權利要求67所述的物品,其特征在于所述第一操作數被右移位以生成所述移位了的第一組,所述移位了的第一組包含M個數據單元,且與所述第一操作數的右邊對齊,并且所述右移位從所述第一操作數中移去所述“L-M”個數據單元,并且在所述第一操作數的左邊插入零。
71.如權利要求70所述的物品,其特征在于所述第二操作數被左移位以生成所述移位了的第二組,所述移位了的第二組包含“L-M”個數據單元,且與所述第二操作數的左邊對齊,并且所述左移位從所述第二操作數中移去所述M個數據單元,并且在所述第二操作數的右邊插入零。
72.如權利要求66所述的物品,其特征在于由所述機器可讀介質存儲的所述數據表示一條計算機指令,如果該計算機指令機器執(zhí)行的話,則導致所述機器執(zhí)行所述預定功能。
全文摘要
一種用于數據的并行右移位合并的方法。一個實施例的方法包含接收一個移位計數M。把具有第一組L個數據單元的第一操作數左移位“L-M”個數據單元。把具有第二組L個數據單元的第二操作數右移位M個數據單元。把移位了的第一組和移位了的第二組進行合并以生成一個具有L個數據單元的結果。
文檔編號G06F9/38GK1506807SQ20031012034
公開日2004年6月23日 申請日期2003年10月24日 優(yōu)先權日2002年10月25日
發(fā)明者J·賽波特, W·W·馬西, E·德貝斯, H·V·阮, J 賽波特, 此, 阮, 馬西 申請人:英特爾公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
天祝| 保定市| 平泉县| 普宁市| 汾西县| 集安市| 原阳县| 营口市| 普兰县| 霍林郭勒市| 清水县| 天长市| 韶关市| 赤城县| 利川市| 大同县| 修武县| 秭归县| 犍为县| 临朐县| 邢台县| 冕宁县| 舒城县| 长宁县| 连江县| 乐山市| 应城市| 乌恰县| 准格尔旗| 延长县| 苗栗县| 东海县| 菏泽市| 宁城县| 邢台市| 泰州市| 阜宁县| 商城县| 资源县| 江油市| 宁乡县|