新四季網

混洗數據的方法和裝置的製作方法

2023-05-26 23:44:01 1

專利名稱:混洗數據的方法和裝置的製作方法
技術領域:
本發明一般涉及微處理器和計算機系統領域。本發明尤其涉及用於混洗數據的方法和裝置。
背景技術:
計算機系統已在當今社會中變得日益普遍。在許多職業中,計算機的處理能力提升了工人的效率和產量。隨著購買和擁有計算機的成本持續下降,越來越多的消費者能利用更新、更快的機器。此外,許多人因為很自由而樂於使用筆記本計算機。移動計算機允許用戶在離開辦公室或旅行時方便地隨他們一起攜帶數據和工作。這種情況是營銷人員、公司職員以及甚至學生們所熟悉的。
隨著處理器技術的進步,還產生了更新的軟體代碼以便在具有這些處理器的機器上運行。用戶通常期望和需要他們計算機的更高的性能,而不管使用的軟體類型。一個這種問題會由於處理器內實際執行的指令和操作的種類而產生。基於所需的操作複雜性和/或電路類型,某些類型的操作需要更長的時間來完成。這提供了優化某些複雜操作在處理器內部執行的方式的機會。
在超過10年的時間裡,媒體應用驅動著微處理器的發展。事實上,近些年的多數計算升級都是由媒體應用驅動的。這些升級主要出現於消費者方面,儘管在用於娛樂增強教育和通信用途的企業方面也看到了顯著的進步。然而,未來的媒體應用將需要更高的計算要求。結果,明天的個人計算體驗在視聽效果方面將更加豐富且更易於使用,更重要地是計算將與通信合併在一起。
因此,圖像顯示以及統稱為內容的音頻和視頻數據的回放已變成當前計算裝置的日益流行的應用。過濾和卷積操作是對諸如圖像音頻和視頻數據的內容數據執行的最普通操作中的一些。這些操作是計算密集的,但用諸如單指令多數據(SIMD)寄存器的各種數據存儲裝置提供可通過有效實現加以利用的高水平的數據並行。許多當前架構還需要不必要的數據類型變化,他們最小化指令處理量並顯著增加排序用於算術操作的數據所需的時鐘周期數。


附圖中作為示例而非限制地說明本發明,其中相同標號表示相似的元件,其中圖1A是根據本發明一實施例的由包含執行用於混洗數據的指令的執行單元的處理器形成的計算機系統的框圖;圖1B是根據本發明可選實施例的另一示例性計算機系統的框圖;圖1C是根據本發明另一可選實施例的又一示例性計算機系統的框圖;圖2是根據本發明的包括執行數據混洗操作的邏輯電路的一實施例的處理器的微架構的框圖;圖3A-C示出了根據本發明各實施例的混洗掩碼;圖4A示出了根據本發明一實施例的多媒體寄存器中的各種緊縮數據類型表示;圖4B示出了根據一可選實施例的緊縮數據類型;圖4C示出了用於混洗指令的操作編碼(操作碼)格式的一實施例;圖4D示出了可選的操作編碼格式;圖4E示出了另一可選的操作編碼格式;圖5是根據本發明的基於混洗掩碼對數據操作數進行混洗操作的邏輯的一實施例的框圖;圖6是根據本發明的用於進行數據混洗操作的電路的一實施例的框圖;
圖7示出了根據本發明一實施例的對字節寬數據元素的數據混洗操作;圖8示出了根據本發明另一實施例的對字寬數據元素的數據混洗操作的操作;圖9是示出混洗數據的方法的一實施例的流程圖;圖10A-H示出了使用SIMD指令的並行表查找算法的操作;圖11是示出了使用SIMD指令進行表查找的方法的一實施例的流程圖;圖12是示出執行表查找的方法的另一實施例的流程圖;圖13A-C示出了多個寄存器之間重新排列數據的算法;圖14是示出多個寄存器之間重新排列數據的方法的一實施例的流程圖;圖15A-K示出了用於在多個寄存器之間混洗數據以生成交錯數據的算法;以及圖16是示出用於在多個寄存器之間混洗數據以生成交錯數據的方法的一實施例的流程圖。
具體實施例方式
揭示了混洗數據的方法和裝置。還描述了用於使用SIMD指令進行並行表查找的方法和裝置。還揭示了用於在多個寄存器之間重新排列數據的方法和裝置。這裡所述的實施例在微處理器的環境中進行描述,但不限於此。雖然參考處理器描述了以下實施例,但其它實施例也可應用於其它類型的集成電路和邏輯裝置。本發明的相同技術和教導可方便地應用於其它類型的電路或半導體裝置,它們也可從較高的管道處理量和改進性能中受益。本發明的教導可應用於執行數據處理的任何處理器或機器。但,本發明不限於執行256比特、128比特、64比特、32比特或16比特數據操作的處理器或機器,而是可以應用於需要數據混洗的任何處理器和機器。
在以下描述中,為了說明目的闡述了許多特定細節,以便提供本發明的透徹理解。但,本領域的普通技術人員將理解,這些特定細節是實施本發明所非必要的。另一方面,對公知的電氣結構和電路則不進行具體的細節說明,以使本發明更加清楚。此外,出於說明目的,以下描述提供了一些示例且附圖示出了各種示例。但,這些示例不應被理解為是限制性的,因為它們僅旨在於提供本發明的示例而非提供本發明的所有可能實現的詳盡列表。
在一實施例中,本發明的方法體現於機器可執行指令中。這些指令可用於使用這些指令編程的通用或專用處理器執行本發明的步驟。或者,本發明的步驟可由包含用於上述執行步驟的硬連線邏輯的專門的硬體組件或者編程的計算機組件和定製硬體組件的任何組合執行。
雖然以下示例描述了執行單元和邏輯電路環境下的指令處理和分發,但本發明的其它實施例可藉助軟體完成。本發明可作為包括存儲了指令的機器或計算機可讀媒介的電腦程式產品或軟體提供,所述指令用於編程計算機(或其它電子裝置)以執行根據本發明的過程。這種軟體可存儲在系統中的存儲器內。類似地,代碼可經由網絡或藉助其它計算機可讀媒體分發。因此,機器可讀媒介可包括用於以機器(例如,計算機)可讀形式存儲或發送信息的任何機制,但不限於,軟盤、光碟、緊緻盤、只讀存儲器(CD-ROM)和磁光碟、只讀存儲器(ROM)、隨機存取存儲器(RAM)、可擦可編程只讀存儲器(EPROM)、電可擦可編程只讀存儲器(EEPROM)、磁或光卡、快閃記憶體、網際網路上傳輸、電、光、聲或其它形式的傳播信號(例如,載波、紅外線信號、數位訊號等)等等。
因此,計算機可讀媒介包括適於以機器(例如,計算機)可讀形式存儲或發送電子指令或信息的任何類型的媒體/機器可讀媒介。此外,本發明還可作為電腦程式產品下載。這樣,程序可從遠程計算機(例如,伺服器)被傳送到請求計算機(例如,客戶機)。程序的傳送可作為經由通信連結(例如,數據機、網絡連接等)的載波或其它傳播媒介中的電、光、聲或其它形式的數據信號。
此外,根據本發明的集成電路設計的實施例可按電子形式作為磁帶或其它機器可讀媒體上的資料庫進行通信或傳送。例如,一實施例中處理器的集成電路設計的電子形式可經由工廠處理或製造以獲得計算機組件。在另一實例中,電子形式的集成電路設計可由機器處理以模擬計算機組件。因此,一些實施例中的電路布局設計和/或處理器設計可經由機器可讀媒體分配或包含於其上用於製成電路或用於集成電路的模擬,在由機器處理時模擬處理器。在其它實施例中,機器可讀媒體還能存儲表示根據本發明的預定功能的數據。
在現代處理器中,許多不同的執行單元被用於處理和執行各種代碼和指令。不是所有的指令都被同等地創建,因為某些較快完成而另一些花費較多的時鐘周期數。指令的處理越快,處理器的總體性能越好。因此,使許多指令儘可能快地執行是有利的。但是,存在某些較複雜且需要更多執行時間和處理器資源的指令。例如,有浮點指令、加載/存儲操作、數據移動等。
由于越來越多的計算機系統用於網際網路和多媒體應用中,隨時間的流逝已引入附加的處理器支持。例如,單指令多數據(SIMD)整數/浮點指令和流SIMD擴展(SSE)是減少執行特殊程序任務所需的總指令數的指令。通過並行地對多個數據元素進行操作,這些指令能使軟體執行加速。結果,可在較寬範圍的應用中實現性能增益,包括視頻、語音和圖像/照片處理。微處理器和相似類型的邏輯電路中SIMD指令的實現通常涉及幾個問題。此外,SIMD操作的複雜性常導致對附加電路的需要,以便正確地處理和操作數據。
本發明的一些實施例提供了一種方式來將具有排空到零能力的緊縮字節混洗指令作為利用SIMD相關硬體的算法實現。對於一個實施例,該算法基於根據每個數據元素位置的控制掩碼值將數據從特殊寄存器或存儲器位置混洗的概念。緊縮字節混洗的實施例可用於減少重排數據的許多不同應用中所需的指令數量。緊縮字節混洗指令還可用於具有非對準加載的任何應用。本混洗指令的實施例可用於過濾,以為有效的乘法-累積操作排列數據。類似地,緊縮混洗指令可用於視頻和加密應用,用於排序數據和小查找表。該指令可用於混合來自兩個或更多寄存器的數據。因此,根據本發明的具有排空到零能力算法的緊縮混洗的實施例可在處理器中實現以有效支持SIMD操作,而不會嚴重危害整體性能。
本發明的實施例提供了具有排空到零能力的緊縮數據混洗指令(PSHUFB),用於有效地排序和排列任何大小的數據。在一個實施例中,以字節間隔大小在寄存器中混洗或重排數據。在混洗操作期間通過維持較大數據內的字節的相對位置,字節混洗操作排序大於字節的數據大小。此外,字節混洗操作可改變SIMD寄存器中數據的相對位置並也可複製數據。該PSHUFB指令根據第二源寄存器中的混洗控制字節的內容混洗來自第一源寄存器的字節。雖然該指令置換數據,但在本實施例的該混洗操作期間保持混洗掩碼不受影響並不受改變。用於該實現的記憶存儲器是「PSHUFB寄存器1、寄存器2/存儲器」,其中第一和第二操作數是SIMD寄存器。但,第二操作數的寄存器也可用存儲器位置替換。第一操作數包括用於混洗的源數據。對於該實施例,用於第一操作數的寄存器也是目的地寄存器。除了改變它們的位置,根據本發明的實施例還包括將選定字節設定到零的能力。
第二操作數包括一組混洗控制掩碼字節以指定混洗模式。用於選擇源數據元素的比特數是源操作數中數據元素數量的log2。例如,在一個128比特寄存器實施例中的字節數是16。16的log2是4。因此,需要四個比特或四位字節。以下代碼中的[3:0]指數表示4個比特。如果置位了混洗控制字節的最高有效比特(MSB),本實施例中的比特7,則將常數零寫入結果字節。如果第二操作數的字節I的最低有效四位字節(掩碼設置)包含整數J,則混洗指令使得第一源寄存器的第J個字節被複製到目的地寄存器的第I字節位置。以下是用於128比特操作數的緊縮字節混洗操作的一個實施例的示例性偽碼For i=0 to 15{if(SRC2[(i*8)+7]==1)DEST[(i*8)+7…(i*8)+0]←0elseindex[3:0]←SRC2[(i*8)+3…SRC2(i*8)+0]DEST[(i*8)+7…(i*8)+0]←SRC1/DEST[(index*8+7)…(index*8+0)]}類似地,這是用於64比特操作數的緊縮字節混洗操作另一個實施例的示例性偽碼For i=0 to 7{if(SRC2[(i*8)+7]==1)DEST[(i*8)+7…(i*8)+0]←0elseindex[2:0]←SRC2[(i*8)+2…SRC2(i*8)+0]DEST[(i*8)+7…(i*8)+0]←SRC1/DEST[(index*8+7)…(index*8+0)]}注意,該64比特寄存器實施例中,當64比特寄存器中存在8個字節時使用掩碼的較低3比特。8的log2是3。以上代碼中的[2:0]指數表示3個比特。在可選實施例中,掩碼中的比特數可改變以符合源數據中可用的數據元素的數量。例如,需要具有較低5個比特的掩碼來選擇256比特寄存器中的數據元素。
當前,在SIMD寄存器中重排數據稍許困難和冗長。某些算法需要的用於排列用於算術操作的數據的指令超過了用於執行這些操作的指令的實際數量。通過實現根據本發明的緊縮字節混洗指令的實施例,實現數據重排所需的指令數量會急劇減少。例如,緊縮字節混洗指令的一個實施例可將一字節數據廣播到128比特寄存器的所有位置。在寄存器中廣播數據常在過濾應用中使用,其中單個數據項被乘以許多係數。在沒有該指令的情況下,數據字節必須從其源中過濾並被移位到最低字節位置。隨後,該單個字節必須首先作為字節被複製,隨後這兩個字節被再次複製以形成雙字,且該雙字被複製以最終形成四字。所有這些操作都可用單個緊縮混洗指令來替代。
類似地,諸如大endian和小endian格式之間變化的128比特寄存器中的所有字節的反轉可用單個緊縮混洗指令方便地進行。然而如果不使用緊縮混洗指令,即使這些相當簡單的模式也需要許多指令,複雜或隨機模式需要甚至更低效的指令例程。對於SIMD寄存器中重排隨機字節的最直接的正向解法是將它們寫入緩衝器,隨後使用整數字節讀取/寫入以便將它們重排並將它們讀回SIMD寄存器。所有這些數據處理都需要冗長的代碼序列,而單個緊縮混洗指令則足夠了。通過減少所需的指令數量,大大地減少了生成相同結果所需的時鐘周期數。本發明的實施例還使用混洗指令來用SIMD指令訪問表中的多個值。甚至在表是寄存器大小的兩倍的情況下,根據本發明的算法也允許以比如同整數操作的每個指令一數據元素更快的速率訪問數據元素。
圖1A是根據本發明一實施例的由處理器形成的示例性計算機系統的框圖,該處理器包括執行單元以便執行用於混洗數據的指令。根據本發明,諸如這裡所述的實施例中,系統100包括諸如處理器102的組件,用於利用包含邏輯的執行單元執行混洗數據的算法。系統100表示基於可從Intel Corporation of Santa Clara,California獲得的PENTIUMIII,PENTIUM4,Celeron,XeonTM,Itanium,XScaleTM和/或StrongARMTM的微處理器的處理系統,儘管其它系統(包括具有其它微處理器的PC、工程工作站、置頂盒等)也可使用。在一個實施例中,樣品系統100可執行可從Redmond,Washington的Microsoft Corporation獲得的WINDOWTM作業系統的版本,儘管其它作業系統(例如,UNIX和Linux)、嵌入軟體和/或圖形用戶界面也是可以使用的。因此,本發明不限於任何特殊的硬體電路和軟體的組合。
本改進不限於計算機系統。本發明的可選實施例可用於其它裝置中,諸如手持設備和嵌入應用。手持設備的某些示例包括蜂窩電話、網際網路協議裝置、數位照相機、個人數字助理(PDA)和手持PC。嵌入應用可包括微控制器、數位訊號處理器(DSP)、單片系統、網絡計算機(NetPC)、置頂盒、網絡集線器、廣域網(WAN)開關或對操作數進行整數混洗操作的任何其它系統。此外,實現某些架構以使指令能對數個數據同時進行操作,從而提升多媒體應用的效率。隨著數據的類型和量的增加,計算機及其處理器必須得到提升以按更有效的方法操作數據。
圖1A是用根據本發明的處理器102形成的計算機系統100的框圖,處理器102包括用於執行數據混洗算法的一個或多個執行單元108。在單個處理器的臺式或伺服器系統的環境中描述本實施例,但可選實施例也可包含在多處理器系統中。系統100是集線器架構的示例。計算機系統100包括處理數據信號的處理器102。處理器102可以是複雜指令集計算機(CISC)微處理器,精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、實現指令集組合的處理器或諸如數位訊號處理器的任何其它處理器裝置。處理器102耦合到處理器總線110,它能在處理器102和系統100的其它組件之間傳送數據信號。系統100的元件執行它們為本領域技術人員所熟知的常規功能。
在一個實施例中,處理器102包括一級(L1)內部高速緩存存儲器104。根據該架構,處理器102可具有單個內部高速緩存或多級內部高速緩存。或者,在另一實施例中,高速緩存存儲器可位於處理器102外部。根據特殊實現和需要,其它實施例還可包括內部和外部高速緩存的組合。寄存器堆106可在各種寄存器中存儲不同類型的數據,這些寄存器包括整數寄存器、浮點寄存器、狀態寄存器和指令指針寄存器。
包括執行整數和浮點運算的邏輯的執行單元108也在處理器102中。處理器102還包括存儲特定宏指令的微碼的微碼(ucode)ROM。對於這種實施例,執行單元108包括處理緊縮指令集109的邏輯。在一個實施例中,緊縮指令集109包括用於組織數據的緊縮混洗指令。通過在通用處理器102的指令集中包含緊縮指令集109連同執行這些指令的相關電路,可利用通用處理器102中的緊縮數據執行許多多媒體應用所使用的操作。因此,可通過將處理器數據總線的總寬度用於對緊縮數據進行操作而加速和更有效地執行許多多媒體應用。這能消除對在處理器的數據總線上傳遞較小單元數據以便每次對一個數據單元執行一個或多個操作的需要。
執行單元108的可選實施例也可用於微控制器、嵌入處理器、圖形裝置、DSP和其它類型的邏輯電路中。系統100包括存儲器120。存儲器120可以是動態隨機存取存儲器(DRAM)裝置,靜態隨機存取存儲器(SRAM)裝置、快閃記憶體裝置或其它存儲器裝置。存儲器120可存儲由可通過處理器102執行的數據信號表示的指令和/或數據。
系統邏輯晶片116耦合到處理器總線110和存儲器120。所示實施例中的系統邏輯晶片116是存儲器控制器集線器(MCH)。處理器102可經由處理器總線110與MCH116通信。MCH116將較高的帶寬存儲器路徑118提供給存儲器120,用於指令和數據存儲並用於圖形命令、數據和紋理的存儲。MCH116在處理器102、存儲器120和系統100中的其它組件之間引導數據信號並在處理器總線110、存儲器120和系統I/O122之間橋接數據信號。在某些實施例中,系統邏輯晶片116可提供圖形埠,用於耦合到圖形控制器112。MCH116通過存儲器接口118與存儲器120耦合。圖形卡112通過加速圖形埠(AGP)互連114與MCH116耦合。
系統100使用專有集線器接口總線122將MCH116耦合到I/O控制器集線器(ICH)130。ICH130經由本地I/O總線提供到某些I/O裝置的直接連接。本地I/O總線是用於將外圍設備連接到存儲器120、晶片組和處理器102的高速I/O總線。某些示例是音頻控制器、固件集線器(快閃BIOS)128、無線收發器126、數據存儲裝置124、包含用戶輸入和鍵盤接口的傳統I/O控制器、諸如通用串行總線(USB)的串行擴展埠以及網絡控制器134。數據存儲裝置124可以包括硬碟驅動器、軟盤驅動器、CD-ROM裝置、快閃記憶體裝置或其它海量存儲裝置。
對於系統的另一實施例,用混洗指令執行算法的執行單元可與單片系統一同使用。單片系統的一個實施例由處理器和存儲器構成。一個這種系統的存儲器是快閃記憶體。快閃記憶體可與處理器和其它系統組件位於同一管芯上。此外,諸如存儲器控制器或圖形控制器的其它邏輯塊也可位於單片系統上、圖1B示出了實現本發明原理的數據處理系統140的可選實施例。數據處理系統140的一個實施例是具有Intel XScaleTM技術的IntelPersonal Internet ClientArchitecture(IntelPCA)應用處理器(如developer.intel.com處所描述的)。本領域的熟練技術人員易於理解,這裡所述的實施例可與可選處理系統一起使用而不背離本發明的範圍。
計算機系統140包括能執行包括混洗的SIMD操作的處理核心159。對於一個實施例,處理核心159表示任何類型的架構的處理單元,包括但不限於CISC、RISC或VLIW型架構。處理核心159還適合於以一種或多種處理技術製造,並通過在及其可讀媒體上充分詳細地表示,適合於促進所述製造。
處理核心159包括執行單元142、一組寄存器堆145和解碼器144。處理核心159還包括附加電路(未示出),這對於本發明的理解是非必要的。執行單元142用於執行處理核心159接收的指令。除了識別典型的處理器指令,執行單元142可識別用於執行對緊縮數據格式的操作的緊縮指令集143中的指令。緊縮指令集143包括用於支持混洗操作的指令,還可包括其它緊縮指令。執行單元142通過內部總線耦合到寄存器堆145。寄存器堆145表示用於存儲信息(包括數據)的處理核心159上的存儲區域。如前所述,可以理解,用於存儲緊縮數據的存儲區域是非關鍵的。執行單元142與解碼器144耦合。解碼器144用於將處理核心159接收的指令解碼成控制信號和/或微碼入口點。響應於這些控制信號和/或微碼入口點,執行單元142執行合適的操作。
處理核心159與總線141耦合,以便與各種其它系統裝置通信,包括但不限於同步動態隨機存取存儲器(SDRAM)控制146、靜態隨機存取存儲器(SRAM)控制147、猝發快閃記憶體接口148、個人計算機存儲器卡國際協會(PCMCIA)/緊緻快閃記憶體(CF)卡控制149、液晶顯示器(LCD)控制150、直接存儲器存取(DMA)控制器151和可選總線主接口152。在一個實施例中,數據處理系統140還可包括I/O橋路154,用於經由I/O總線153與各種I/O裝置通信。這種I/O裝置可包括但不限於,通用異步接收器/發送器(UART)155、通用串行總線(USB)156、藍牙無線UART157和I/O擴展接口158。
數據處理系統140的一個實施例提供用於移動、網絡和/或無線通信以及能執行包含混洗操作的SIMD操作的處理核心159。處理核心159可用包含離散變換、壓縮/解壓縮技術以及調製/解調(MODEM)函數的各種音頻、視頻、成像和通信算法編程,所述離散變換諸如Walsh-Hadamard變換、快速傅立葉變換(FFT)、離散餘弦變換(DCT)和它們各自的逆變換;所述壓縮/解壓縮技術諸如色空間變換、視頻編碼運動估計或視頻解碼運動補償;所述調製/解調函數諸如脈衝編碼調製(PCM)。
圖1C示出了能執行SIMD混洗操作的數據處理系統的又一個可選實施例。根據一個可選實施例,數據處理系統160可包括主處理器166、SIMD協處理器161、高速緩存存儲器167和輸入/輸出系統168。輸入/輸出系統168可任選地耦合到無線接口169。SIMD協處理器161能執行包含數據混洗的SIMD操作。處理核心170能適合於以一種或多種處理技術製造,並通過在機器可讀媒體上的充分詳細的表示,適合於促進包含處理核心170的全部或部分數據處理系統160的製造。
對於一個實施例,SIMD協處理器161包括執行單元162和一組寄存器堆164。主處理器165的一個實施例包括用於識別包含由執行單元162執行的SIMD混洗指令的指令集163的指令的解碼器165。對於可選實施例,SIMD協處理器161還包括解碼指令集163的指令的至少部分解碼器165B。處理核心170還包括對於本發明的理解非必要的附加電路(未示出)。
操作中,主處理器166執行數據處理指令流,它控制包括與高速緩存存儲器167和輸入/輸出系統168的交互作用的普通型數據處理操作。SIMD協處理器指令被嵌入數據處理指令流內。主處理器166的解碼器165識別作為應由附加的SIMD協處理器161執行的類型的這些SIMD協處理器指令。因此,主處理器166在協處理器總線166上發出這些SIMD協處理器指令(或者表示SIMD協處理器指令的控制信號),且它們由任何附加的SIMD協處理器接收。在這種情況中,SIMD協處理器161將接受和執行打算送給它的任何接收到的SIMD協處理器指令。
經由無線接口169接收用於由SIMD協處理器指令處理的數據。對於一個示例,語音通信可按數位訊號形式接收,它可通過SIMD協處理器指令處理以再生表示語音通信的數字音頻採樣。對於另一示例,壓縮的音頻和/或視頻可按數字比特流形式接收,它們通過SIMD協處理器指令處理以再生數字音頻採樣和/或運動視頻幀。對於處理核心170的一個實施例,主處理器166和SIMD協處理器161被集成入包含執行單元162、一組寄存器堆164和用於識別包含SIMD混洗指令的指令集163的指令的解碼器165的單個處理核心170。
圖2是根據本發明的包含用於執行混洗操作的邏輯電路的一個實施例的處理器200微架構的框圖。如同在以上的討論中,混洗操作也可稱作緊縮數據混洗操作和緊縮混洗指令。對於混洗指令的一個實施例,該指令可用字節顆粒度混洗緊縮數據。該指令還可稱作PSHUFB或緊縮混洗字節。在其它實施例中,混洗指令也可被執行以對具有字、雙字、四倍字等大小的數據元素進行操作。按次序的前端201是處理器200的一部分,它取出要執行的宏指令並在處理器管道中預備以後使用。該實施例的前端201包括數個單元。指令預取器226從存儲器中取出宏指令並將它們饋送給指令解碼器228,該指令解碼器將宏指令解碼成機器知道如何執行的稱作微指令或微操作(也稱作micro op或uops)的基元(primitives)。跟蹤高速緩存230獲得被解碼的微操作並將它們組合成微操作隊列234中的程序有序的序列或蹤跡,用於執行。當跟蹤高速緩存230遇到複雜的宏指令時,微碼ROM232提供完成操作所需的微操作。
許多宏指令被轉換成單個微操作,而其它宏指令需要數個微操作來完成全部操作。在該實施例中,如果需要超過4個微操作來完成一個宏指令,則解碼器228訪問微碼ROM232來實施該宏指令。對於一個實施例,一個緊縮混洗指令可被解碼成用於在指令解碼器228處處理的較少數量的微操作。在另一實施例中,若需要一定數量的微操作來完成操作,則用於緊縮數據混洗算法的指令可存儲在微碼ROM232內。跟蹤高速緩存230引用入口點可編程邏輯陣列(PLA)來確定正確的微指令指針,用於讀取微碼ROM232中用於混洗算法的微碼序列。在微碼ROM232為當前宏指令完成排序微操作後,機器的前端201繼續從跟蹤高速緩存230取出微操作。
某些SIMD和其它多媒體類型的指令被認為是複雜指令。多數浮點相關的指令也是複雜指令。這樣,當指令解碼器228遇到複雜宏指令時,在合適位置存取微碼ROM232以檢索用於該宏指令的微碼序列。執行宏指令所需的各種微操作被傳遞給無序執行引擎203,用於在合適的整數和浮點執行單元處執行。
在無序執行引擎203處準備微指令用於執行。無序執行邏輯具有一些緩衝器,用於平滑和重排微指令流以便在它們沿管道下降和被調度用於執行時優化性能。分配器邏輯分配每個微操作執行所需的機器緩衝器和資源。寄存器重命名邏輯將邏輯寄存器重命名為寄存器堆中的條目。在指令調度器(存儲器調度器,快速調度器202,慢速/普通浮點調度器204,和簡單浮點調度器206)前,分配器還為兩個微操作隊列(一個用於存儲器操作,一個用於非存儲器操作)之一中的每個微操作分配條目。微操作調度器202、204和206基於它們依賴的輸入寄存器操作數源的預備狀態以及微操作完成操作所需的執行資源的可用性來確定微操作何時準備執行。本實施例的快速調度器202可在每半個主時鐘周期上進行調度,而其它調度器只能每個主處理器時鐘周期調度一次。調度器對分派埠進行裁決,以調度用於執行的微操作。
寄存器堆208和210位於調度器202、204、206和執行塊211中的執行單元212、214、216、218、220、222、224之間。存在分別用於整數和浮點運算的分開的寄存器堆208、210。本實施例中的每個寄存器堆208、210還包括旁路網絡,它將未被寫入寄存器堆的剛完成的結果旁路或傳遞到新依賴微操作。整數寄存器堆208和浮點寄存器堆210還能彼此通信數據。對於一個實施例,整數寄存器堆208被分成兩個分開的寄存器堆,其中一個用於數據的低位32比特而另一個用於數據的高位32比特。由於浮點指令通常具有寬度從64到128比特的操作數,一個實施例的浮點寄存器堆210具有128比特寬的條目。
執行塊211包含實際執行指令的執行單元212、214、216、218、220、222、224。該部分包括寄存器堆208、210,它們存儲微指令執行所需的整數和浮點數據操作數值。本實施例的處理器200由一些執行單元構成地址生成單元(AGU)212、AGU214、快速ALU216、快速ALU218、慢速ALU220、浮點ALU222、浮點移動單元224。對於該實施例,浮點執行塊222、224執行浮點、MMX、SIMD和SSE操作。本實施例的浮點ALU222包括浮點除法器,以執行除法、平方根和餘數微操作。對於本發明的實施例,涉及浮點值的任何動作都隨浮點硬體出現。例如,整數格式和浮點格式之間的轉換涉及浮點寄存器堆。類似地,浮點除法運算發生於浮點除法器處。另一方面,用整數硬體資源處理非浮點數和整數類型。簡單的非常頻繁的ALU操作轉到高速ALU執行單元216、218。該實施例的快速ALU216、218能以半個時鐘周期的有效等待時間執行快速操作。對於一個實施例,多數複雜的整數操作轉到慢速ALU220,因為慢速ALU220包括用於長等待時間類型操作的整數執行硬體,諸如乘法器、移位、標記邏輯和分支處理。存儲器加載/存儲操作由AGU212、214執行。對於該實施例,整數ALU216、218、220在對64比特數據操作數執行整數操作的環境下描述。在可選實施例中,可實現ALU216、218、220以支持包括16、32、128、256等的各種數據比特。類似地,可實現浮點單元222、224以支持具有各種寬度的比特的操作數範圍。對於一個實施例,浮點單元222、224可聯繫SIMD和多媒體指令對128比特寬的緊縮數據操作數進行操作。
在該實施例中,在父加載完成執行前,微操作調度器202、204、206分派依賴性操作。在處理器200中推測性調度和執行微操作時,處理器200還包括處理存儲器未命中的邏輯。如果數據加載在數據高速緩存中未命中,則管道中可能有依賴性操作在飛行中(in flight),它們將暫時錯誤的數據留給調度器。重放機制跟蹤並重新執行使用錯誤數據的指令。僅依賴性操作需要被重放並允許一些非依賴性的操作完成。處理器的一個實施例的調度器和重放機制還被設計成獲取用於混洗操作的指令序列。
術語「寄存器」這裡用於表示用作標識操作數的宏指令的一部分的板載處理器存儲位置。換句話說,這裡引用的寄存器是可從處理器外部看見的(從程式設計師的觀點)。但,實施例的寄存器不應在意思上限制於特殊類型電路。相反,實施例的寄存器只需要能存儲和提供數據,並執行這裡所述的功能。這裡描述的寄存器可利用任何數量的不同技術由處理器內的電路實現,諸如專用物理寄存器、使用寄存器重命名的動態分配的物理寄存器、專用和動態分配的物理寄存器的組合等等。在一個實施例中,整數寄存器存儲32比特的整數數據。一個實施例的寄存器堆還包括用於緊縮數據的8個多媒體SIMD寄存器。對於以下的討論,寄存器被理解為被設計保持緊縮數據的數據寄存器,諸如來自Santa Clara,California的Intel Corporation的具有MMX技術的微處理器中的64比特寬MMXTM寄存器(某些情況下也稱作『mm』寄存器)。在整數和浮點形式中可用的這些MMX寄存器可與附隨SIMD和SSE指令的緊縮數據元件一起操作。類似地,與SSE2技術有關的128比特寬XMM寄存器也可用於保持這種緊縮數據操作數。在該實施例中,在存儲緊縮數據和整數數據過程中,寄存器不需要在兩種數據類型之間區分。
在以下附圖的示例中,描述了許多數據操作數。為簡單起見,從字母A起按字母順序標註初始源數據段,其中A位於最低地址處且Z將位於最高地址處。因此,A初始地在地址0處,B在地址1處,C在地址3處,等等。概念上,如對於一個實施例在緊縮字節混洗中,混洗操作需要從第一操作數混洗數據段並將一個或多個源數據元素重排入由第二操作數中的一組掩碼指定的模式(pattern)中。因此,混洗可旋轉或將數據元素的一部分或全部完全重排成任何期望的順序。此外,任何特殊數據元素或一些數據元素可在結果中被複製或廣播。根據本發明的混洗指令的實施例包括排空到零功能,其中用於每個特殊數據元素的掩碼能使得該數據元素位置在結果中被清零。
圖3A-C示出了根據本發明各種實施例的混洗掩碼。本例中示出了由多個個別數據元素311、312、313、314構成的緊縮數據操作數310。在包含一組掩碼以指示用於另一操作數的相應緊縮數據元素的混洗模式的緊縮數據操作數環境中描述本例的緊縮操作數310。因此,緊縮操作數310的數據元素311、312、313、314中的每一個中的掩碼都指定結果的相應數據元素位置中的內容。例如,數據元素311在最左面的數據元素位置中。數據元素311中的掩碼將指定哪個數據應被混洗或設置於混洗操作結果的最左面的數據元素位置中。類似地,數據元素312是次最左面的數據元素位置。數據元素312中的掩碼將指定哪個數據應被設置於結果的次最左面的數據元素位置。對於該實施例,包含混洗掩碼的緊縮操作數中的每個數據元素都具有與緊縮結果中的數據元素位置的一對一對應。
圖3A中,數據元素312被用於描述一個實施例的示例混洗掩碼的內容。用於一實施例的混洗掩碼318由三部分構成『設定到零標記』欄位315、『保留』欄位316和『選擇比特』欄位317。『設定到零標記』欄位315指示本掩碼指定的結果數據元素位置是否應被清零,或換句話說,是否應用零(0)值替換。在一個實施例中,『設定到零標記』欄位是支配的,其中如果『設定到零標記』欄位315被設定,則忽略掩碼318中的其餘欄位且結果數據元素位置用『0』填充。『保留』欄位316包括一個或多個比特,可以或不可以在可選實施例中使用或者可以保留用於將來或特殊的使用。該混洗掩碼318的『選擇比特』欄位317為緊縮結果中的相應數據元素位置指定數據源。
對於緊縮數據混洗指令的一個實施例,一個操作數由一組掩碼構成且另一操作數由一組緊縮數據元素構成。這兩種操作數的大小是相同的。根據操作數中數據元素的數量,需要變動數量的選擇比特從用於緊縮結果中的設置的第二緊縮數據操作數中選擇個別數據元素。例如,在具有緊縮字節的128個比特的源操作數的情況下,由於16個字節的數據元素可用於選擇,所以需要至少4個選擇比特。基於掩碼的選擇比特所指示的值,來自源數據操作數的合適數據元素被置於該掩碼的相應數據元素位置。例如,數據元素312的掩碼318對應於次最左面數據元素位置。如果該掩碼318的選擇比特317包含值『X』,則來自源數據操作數中數據元素位置』X』的數據元素被混洗入結果中的次最左面數據元素位置。但如果『設定到零標記』欄位315被設定,則結果中的次最左面數據元素位置用『0』代替且忽略選擇比特317的指定。
圖3B示出了用字節尺寸的數據元素和128比特寬的緊縮操作數操作的一個實施例的掩碼328的結構。對於該實施例,因為存在16個可能的數據元素選擇,『設定到零』欄位325由比特7構成且『選擇』欄位327由比特3到0構成。在該實施例中不使用比特6到4且它們留在『保留』欄位326中。在另一實施例中,『選擇』欄位327中使用的比特數量可以按需要增加或減少,以適應源數據操作數中可用的可能數據元素選擇的數量。
圖3C示出了用於與字節大小數據元素和128比特寬的緊縮操作數一起操作但具有多個數據元素源的另一實施例的掩碼338的結構。在該實施例中,掩碼338由『設定到零』欄位335、『源(src)選擇』欄位336和『選擇』欄位337構成。『設定到零』欄位335和『選擇』欄位337類似於以上描述運作。本實施例的『源選擇』欄位336指示應從哪個數據源獲得由選擇比特指定的數據操作數。例如,相同一組掩碼可與諸如多個多媒體寄存器的多個數據源一起使用。每個源多媒體寄存器都被分配一數值且『源選擇』欄位336中的值指向這些源寄存器之一。根據『源選擇』欄位336的內容,從合適的數據源中選擇所選數據元素,用於置於緊縮結果中的相應數據元素位置。
圖4A示出了根據本發明實施例的多媒體寄存器中的各種緊縮數據類型表示。圖4A示出了用於128比特寬的操作數的緊縮字節410、緊縮字420和緊縮雙字(dword)430的數據類型。該示例的緊縮字節格式410是128比特長並包含十六個緊縮字節數據元素。這裡字節被定義為8比特數據。每個字節數據元素的信息被存入用於字節0的比特7到比特0、用於字節1的比特15到比特8、用於字節2的比特23到比特16並最後用於字節15的比特120到比特127。因此,寄存器中使用所有可用的比特。該存儲結構增加了處理器的存儲效率。此外,在16個數據元素被訪問的情況下,現在可以並行地對十六各數據元素進行一個操作。
通常,數據元素是與其它相同長度的數據元素一起被存入操作數(單個寄存器或存儲器位置)的單件數據。在關於SSE2技術的緊縮數據序列中,操作數(XMM寄存器或存儲器位置)中存儲的數據元素數量是128比特除以各數據元素的比特長度。類似地,關於MMX和SSE技術的緊縮數據序列中,操作數(MMX寄存器或存儲器位置)中存儲的數據元素數量是64比特除以各數據元素的比特長度。該示例的緊縮字格式420是128比特長並包含8個緊縮字數據元素。每個緊縮字包含16比特的信息。圖4A的緊縮雙字格式430是128比特長並包含4個緊縮雙字數據元素。每個緊縮雙字數據元素都包含32比特的信息。緊縮四倍字是128比特長並包含兩個緊縮四倍字數據元素。
圖4B示出了可選的寄存器中數據存儲格式。每個緊縮數據可包括超過一個獨立的數據元素。示出了三種緊縮數據格式;緊縮半441、緊縮單442和緊縮雙443。緊縮半441、緊縮單442和緊縮雙443的一個實施例包含定點數據元素。對於可選實施例,緊縮半441、緊縮單442和緊縮雙443中的一個或多個可包含浮點數據元素。緊縮半441的一個可選實施例是128比特長,包含8個16比特數據元素。緊縮單442的一個實施例是128比特長並包含4個32比特數據元素。緊縮雙443的一個實施例是128比特長並包含2個64比特數據元素。可以理解,這種緊縮數據格式可進一步擴展到其它寄存器長度,例如擴展到96比特、160比特、192比特、224比特、256比特或以上。
圖4C示出了操作編碼(操作碼)格式460的一實施例,它具有32個或更多比特,且寄存器/存儲器操作數尋址模式與全球資訊網(www)intel.com/design/litcentr處的可從Intel Corporation,Santa Clara,CA獲得的「IA-32 Intel Architecture SoftwareDeveloper’s Manual Volume 2Instruction Set Reference」中所描述的操作碼格式類型一致。混洗操作的類型可通過一個或多個欄位461和462被編碼。可標識直至每個指令兩個操作數位置,包括直至兩個源操作數標識符464和465。對於混洗指令的一個實施例,目的地操作數標識符466與源操作數標識符464相同。對於可選實施例,目的地操作數標識符466與源操作數標識符465相同。因此,對於混洗操作的實施例,由源操作數標識符464和465標識的源操作數之一被混洗操作的結果重寫。對於混洗操作的一個實施例,操作數標識符464和465可用於標識64比特的源和目的地操作數。
圖4D示出了具有40個以上比特的另一可選操作編碼(操作碼)格式470。操作碼格式470與操作碼格式460一致並包括任選前綴字節478。混洗操作類型可由欄位478、471和472中的一個或多個編碼。高達每個指令兩個操作數位置可由源操作數標識符474和475以及通過前綴字節478標識。對於混洗指令的一個實施例,前綴字節478可用於標識128比特的源和目的地操作數。對於混洗操作的一個實施例,目的地操作數標識符476與源操作數標識符474相同。對於可選實施例,目的地操作數標識符476和源操作數標識符475相同。因此,對於混洗操作的實施例,由源操作數標識符474和475標識的源操作數之一由混洗操作的結果重寫。操作碼格式460和470允許部分由MOD欄位463和473以及由任選的比例指標基和位移字節指定的寄存器到寄存器、存儲器到寄存器、寄存器接存儲器、寄存器接寄存器、寄存器接鄰接(immediate)、寄存器到存儲器尋址。
接著轉到圖4E,在一些可選實施例中,通過協處理器數據處理(CDP)指令進行64比特的單指令多數據(SIMD)算術操作。操作編碼(操作碼)格式480描述了具有CDP操作碼欄位482和489的一個這種CDP指令。對於混洗操作的可選實施例,CDP指令的類型可由欄位483、484、487和488中的一個或多個編碼。可標識達每個指令三個操作數位置,包括達兩個源操作數標識符485和490以及一個目的地操作數標識符486。協處理器的一個實施例可在8、16、32和64比特值上操作。對於一個實施例,混洗操作在定點或整數數據元素上操作。在一些實施例中,利用條件欄位481,可有條件地執行混洗指令。對於某些混洗指令,源數據大小可由欄位483編碼。在混洗指令的一些實施例中,可對SIMD欄位進行零(Z)、負(N)、進位(C)和溢出(V)檢測。對於一些指令,可通過欄位484編碼飽和類型。
圖5是根據本發明基於混洗掩碼對數據操作數進行混洗操作的邏輯的一個實施例的框圖。具有本實施例的設定到零能力的用於混洗操作的指令(PSHUFB)以兩段信息第一(掩碼)操作數510和第二(數據)操作數520開始。對於以下討論,掩碼(MASK)、數據(DATA)和結果(RESULTANT)一般稱作操作數或數據塊,但非限制於此,並還包括寄存器、寄存器文件和存儲器位置。在一個實施例中,混洗PSHUFB指令被解碼為一個微操作。在可選實施例中,該指令可解碼為各種數量的微操作,以便對數據操作數進行混洗操作。對於該示例,操作數510、520是具有字節寬數據元素的源寄存器/存儲器中存儲的128比特寬的信息段。在一個實施例中,操作數510和520保存於128比特長的SIMD寄存器中,諸如128比特的SSE2XMM寄存器。但是,操作數510和520中的一個或兩者也可從存儲器位置處加載。對於一個實施例,結果(RESULTANT)540也是MMX或XMM數據寄存器。此外,RESULTANT540也可以是與源操作數之一相同的寄存器或存儲器位置。根據特殊實現,操作數和寄存器可以是其它寬度,諸如32、64和256比特,並具有字、雙字或四字大小的數據元素。該示例中的第一操作數510由一組16個掩碼構成(按十六進位格式)0x0E、0x0A、0x09、0x8F、0x02、0x0E、0x06、0x06、0x06、0xF0、0x04、0x08、0x08、0x06、0x0D和0x00。每個個別掩碼將指定結果540中其相應數據元素位置的內容。
第二操作數520由十六個數據區段構成P,O,N,M,L,K,J,I,H,G,F,E,D,C,B,A。第二操作數520中的每個數據區段也用十六進位的數據元素位置值標記。這裡的數據區段是等長的且各自由單個字節(8比特)數據構成。如果每個數據元素是字(16比特)、雙字(32比特)或四字(64比特),則128比特的操作數將分別具有8個字寬、4個雙字寬或2各四字寬的數據元素。但是,本發明的其它實施例可以其它大小的操作數和數據區段運作。本發明的實施例不限於特殊長度的數據操作數、數據區段或移位計數,並可針對每個實現適當調整尺寸。
操作數510和520可駐留在寄存器或存儲器位置或者寄存器文件或混合中。將數據操作數510和520與混洗指令一起發送到處理器中的執行單元的混洗邏輯530。在混洗指令達到執行單元時,該指令應在處理器管道中較早地被解碼。因此,混洗指令可以是微操作(uop)或某些其它解碼格式的形式。對於該實施例,在混洗邏輯530處接收兩個數據操作數510和520。混洗邏輯530基於掩碼操作數510中的值從源數據操作數520中選擇數據元素並將所選數據元素排列/混洗到結果540中的合適位置。混洗邏輯530還將所指定的結果540中的給定數據元素位置清零。這裡,結果540由十六個數據區段構成O,K,J,』0』,C,O,G,G,F,』0』,E,I,I,G,N和A。
這裡用一些數據元素描述混洗邏輯530的操作。對於掩碼操作數510中最左邊的數據元素位置的混洗掩碼是0x0E。混洗邏輯530翻譯以上圖3A-C中描述的掩碼的各欄位。在這種情況中,不設置「設定到零「欄位。包括較低4個比特或四位字節的選擇欄位具有『E』的十六進位值。混洗邏輯530將數據操作數520的數據元素位置『0xE』中的數據O混洗到結果540的最左邊的數據元素位置。類似地,掩碼操作數510中的次最左邊的數據元素位置處的掩碼是0x0A。混洗邏輯530翻譯用於該位置的掩碼。該選擇欄位具有『A』的十六進位值。混洗邏輯530將數據操作數520的數據元素位置『0xA』中的數據K複製到結果540的次最左邊的數據元素位置。
本實施例的混洗邏輯530也支持混洗指令的排空到零功能。從掩碼操作數510的左邊起第四個數據元素位置處的混洗掩碼是0x8F。混洗邏輯510識別出設置了『設定到零』欄位,如掩碼的比特8處的『1』所指示的。作為響應,排空到零的指令勝過選擇欄位,且混洗邏輯510忽略該掩碼的選擇欄位中的十六進位值『F』。將『0』置入從結果540中的左面起相應的第四數據元素位置。對於該實施例,混洗邏輯530為每個掩碼評估『設定到零』和選擇欄位並不在意掩碼中那些欄位之外存在的其它比特,諸如保留比特或源選擇欄位。對掩碼操作數510中的整組掩碼重複混洗掩碼的該處理和數據混洗。對於一個實施例,掩碼都被並行處理。在另一實施例中,每次可一起處理掩碼組和數據元素的某些部分。
採用本混洗指令的實施例,操作數中的數據元素可按各種方式被重排。此外,來自特殊數據元素的某些數據可在多個數據元素位置處被重複或甚至傳播到每個位置。例如,第四和第五掩碼兩者都具有0x08的十六進位值。結果,數據操作數520的數據元素位置0x8處的數據1被混洗入從結果540的右側起的第四和第五個數據元素位置。採用設定到零功能,混洗指令的實施例可迫使結果540中的任何數據元素位置為『0』。
根據特殊實現,每個混洗掩碼都可用於指明結果中單個數據元素位置的內容。如在本示例中,每個單個字節寬的混洗掩碼對應於結果540中字節寬的數據元素位置。在另一實施例中,多個掩碼的組合可一同被用於指示數據元素塊。例如,兩個字節寬的掩碼可一起用於指明字寬的數據元素。混洗掩碼不限於為字節寬,而是可以是具體實現所需的任何其它尺寸。類似地,數據元素和數據元素位置可擁有字節之外的其它間隔尺寸。
圖6是根據本發明的用於執行數據混洗操作的電路600的一個實施例的框圖。該實施例的電路包括多路復用結構,以便基於第二操作數的解碼混洗掩碼從第一源操作數中選擇正確的結果字節。這裡的源數據操作數由上緊縮數據元素和下緊縮數據元素構成。該實施例的多路復用結構與用於實現其它緊縮指令的其它多路復用結構相比相對較簡單。結果,本實施例的多路復用結構不引入任何新的臨界計時路徑。本實施例的電路600包括混洗掩碼塊、用於保持來自源操作數的下/上緊縮數據元素的塊、用於數據元素的初始選擇的第一多個8至1(8:1)復用器、用於上和下數據元素的選擇的其它多個3至1(3:1)復用器、復用器選擇零邏輯以及許多控制信號。為了簡便,圖6中示出了有限數量的8:1和3:1復用器並用點表示。但是,它們的功能類似於所示出的那些並可通過以下描述加以理解。
在本示例的混洗操作期間,該混洗處理電路600處接收兩個操作數具有一組緊縮數據元素的第一操作數和具有一組混洗掩碼的第二操作數。混洗掩碼被傳遞到混洗掩碼塊602。這組混洗掩碼在復用器選擇和零邏輯塊604處被解碼以生成各種選擇信號(選擇A606,選擇B608,選擇C610)和設定到零信號(零)611。這些信號用於控制將結果632接合在一起過程中復用器的操作。
對於該示例,掩碼操作數和數據操作數都是128比特長,並各自用16位元組大小的數據區段緊縮。在這種情況下,各信號上示出的值N是16。在該實施例中,數據元素被分成一組下和上緊縮數據元素,每個都具有8個數據元素。這允許在數據元素選擇期間使用較小的8:1復用器而非16:1復用器。這些下和上組的緊縮數據元素分別保存在下和上存儲區域612和622處。從下數據組開始,八個數據元素中的每一個經由諸如路由線614的一組線路被發送到第一組16個單個的8:1復用器618A-D。用N個選擇A信號606之一控制16個8:1復用器618A-D中的每一個。根據其選擇A606的值,該復用器將輸出8個下數據元素614之一用於進一步處理。由於可能將任何下數據元素混洗入十六個結果數據元素位置中的任一個,所以存在用於該組下緊縮數據元素的16個8:1復用器。十六個8:1復用器中的每一個都用於十六個結果數據元素位置之一。類似地,十六個8:1復用器提供用於上緊縮數據元素。8個上數據元素被發送給第二組16個8:1復用器624A-D中的每一個。用N個選擇B信號608之一控制十六個8:1復用器624A-D中的每一個。基於其選擇B608的值,該8:1復用器將輸出8個上數據元素616之一用於進一步處理。
十六個3:1復用器628A-D中的每一個都對應於結果632中的數據元素位置。來自十六個下數據復用器618A-D的十六個輸出620A-D被路由到一組十六個3:1上/下選擇復用器628A-D,作為來自上數據復用器624A-D的輸出626A-D。這些3:1選擇復用器628D-D中的每一個都從復用器選擇零邏輯604接收其自己的選擇C610和零611信號。對於該3:1復用器的選擇C610上的值將指示復用器是否將輸出來自下數據組或來自上數據組的選擇數據操作數。到每個3:1復用器的控制信號零611將指示該復用器是否應迫使其輸出到零(『0』)。對於該實施例,控制信號零611代替選擇C610上的選擇並在結果632中迫使對數據元素位置的輸出到『0』。
例如,3:1復用器628A接收來自8:1復用器618A的選擇的下數據元素620A以及來自8:1復用器624A的選擇的上數據元素626A,用於該數據元素位置。選擇C610控制其輸出630A哪個數據元素將混洗入結果632中它管理的數據元素位置。但是,如果到復用器628A的信號零611是有效的,指示該數據元素位置的混洗掩碼聲明『0』是期望的,則復用器輸出630A是『0』且不使用數據元素輸入620A、626A。混洗操作的結果632由來自16個3:1復用器628A-D的輸出630A-D構成,其中每個輸出都對應於特殊的數據元素位置並且是數據元素或『0』。在該示例中,每個3:1復用器輸出都是字節寬且結果是由16個緊縮字節數據構成的數據塊。
圖7示出了根據本發明一個實施例的對字節寬數據元素的數據混洗操作。這是指令「PSHUFB數據,掩碼「的示例。注意,設定用於掩碼701的字節位置0x6和0xC的混洗掩碼的最高有效位,以使用於這些位置的結果741中的結果為零。在該示例中,考慮到指定地址的一組掩碼701其中來自源操作數721的各數據元素將存入目的地寄存器741,源數據被組織為目的地數據存儲裝置721,它在一個實施例中也是源數據存儲裝置721。該示例中,如結果741所作的,兩個源操作數(掩碼701和數據721)各自由十六個緊縮數據元素構成。在本實施例中,所涉及的每個數據元素是8比特或字節寬的。因此,掩碼701、數據721和結果741數據塊分別是128比特長。此外,這些數據塊可駐留在存儲器或寄存器中。對於一個實施例,掩碼的排列基於期望的數據處理操作,例如可包括過濾操作或卷積操作。
如圖7所示,掩碼操作數701包括數據元素,它具有混洗掩碼0x0E 702、0x0A703、0x09 704、0x8F 705、0x02 706、0x0E 707、0x06 708、0x06 709、0x05 710、0xF0 711、0x04 712、0x08 713、0x08 714、0x06 715、0x0D 716和0x00 717。類似地,數據操作數712包括源數據元素P722、O723、N724、M725、L726、K727、J728、1729、H730、G731、F732、E733、D734、C735、B736、A737。在圖7的數據區段的表示中,數據元素位置也在數據下被標註為十六進位值。因此,用掩碼701和數據721執行緊縮混洗操作。使用該組混洗掩碼701,可並行執行數據721的處理。
在評估每個數據元素混洗掩碼時,來自指定數據元素或『0』的合適數據被混洗到該特殊混洗掩碼的相應數據元素位置。例如,最右面的混洗掩碼717具有值0x00,它被解碼成指定來自源數據操作數的位置0x00的數據。作為響應,來自數據位置0x0的數據A被複製到結果741的最右面的位置。類似地,從右面起的第二個混洗掩碼716具有值0x0D,它被解碼為0xD。因此,來自數據位置0xD的數據N被複製到結果741中從右面起的第二個位置。
結果741中從左面起的第四個數據元素位置是『0』。這屬於該數據元素位置的混洗掩碼中的0x8F值。在該實施例中,混洗掩碼字節的比特7是『設定到零』或『排空到零』指示器。如果該欄位被設定,則結果中的相應數據元素位置用『0』值填充代替來自第二數據操作數721的數據。類似地,結果741中從右面起的第七個位置具有值『0』。這是由於掩碼701中用於該數據元素位置的0xF0的混洗掩碼值。注意,在某些實施例中不是混洗掩碼中的所有比特都被使用。在該實施例中,混洗掩碼的下四位字節或4個比特足以選擇源數據操作數721中的十六個可能的數據元素中的任一個。當比特7是『設定到零』欄位時,在某些實施例中3個其它比特保持不使用並可被保留或忽略。對於該實施例,『設定到零』欄位控制和超過數據元素選擇,如混洗掩碼的下四位字節中所指示的。在這兩種實例中,從左面起的第四個數據元素位置和從右面起的第七個位置,其中在比特7處設置『排空到零』標記的0x80的混洗掩碼值也可使得相應結果數據元素位置用『0』填充。
如圖7所示,箭頭示出了掩碼701中每個混洗掩碼的數據元素混洗。根據特殊一組混洗掩碼,一個或多個源數據元素不會出現於結果741中。在某些實例中,一個或多個『0』也出現於結果741中的各數據元素位置處。如果混洗掩碼被配置成廣播一個或特殊一組數據元素,則用於這些數據元素的數據會在結果中作為選擇模式被重複。本發明的實施例不限於任何特殊的排列或混洗模式。
如上所述,在本實施例中源數據寄存器也用作目的地數據存儲寄存器,從而減少了所需寄存器的數量。儘管因此將源數據721重寫,但混洗掩碼701的組不會被改變並可用於將來的參考。源數據存儲裝置內的被重寫數據可從存儲器或其它寄存器重新加載。在另一實施例中,多個寄存器可用作源數據存儲裝置,其中它們各自的數據在目的地數據存儲裝置中按期望組織。
圖8示出了根據本發明另一實施例的對字寬數據元素的數據混洗操作。本實例的一般討論一定程度上類似於圖7的討論。但在這種情況下,數據操作數821和結果831的數據元素是字長度。對於該實施例,數據元素字作為數據元素字節對處理,而掩碼操作數801中的混洗掩碼是字節大小。因此,一對混洗掩碼字節被用於定義每個數據元素字位置。但對於另一實施例,混洗掩碼也可具有字間隔尺寸並描述結果中字大小的數據元素位置。
本示例的掩碼操作數801包括若干字節寬的數據元素,並具有混洗掩碼0x03802、0x02803、0x0F 804、0x0E 805、0x83806、0x82807、0x0D 808、0x0C 809、0x05810、0x04811、0x0B 812、0x0A 813、0x0D 814、0x0C 815、0x01 816和0x00817。數據操作數821包括源數據元素H822、G823、F824、E835、D836、C827、B828、A829。在圖8的數據區段的表示中,數據元素位置也標註於數據下作為十六進位值。如圖8所示,數據操作數821中的每個字大小數據元素都具有數據位置地址,它佔據兩個字節大小位置。例如,數據H822佔據字節大小數據元素位置0xF和0xE。
用掩碼801和數據821進行緊縮混洗操作。圖8的箭頭示出了掩碼801中每個混洗掩碼的數據元素的混洗。在評估每個數據元素混洗掩碼時,來自數據操作數821的指定數據元素位置的合適數據或者『0』被混洗到用於該特殊混洗掩碼的結果831中的相應數據元素位置。在該實施例中,字節大小混洗掩碼成對操作,以指定字大小的數據元素。例如,掩碼操作數801中的兩個最左面的混洗掩碼0x03802、0x02803一同對應於結果831的最左面的字寬數據元素位置832。在混洗操作期間,數據元素字節位置0x03和0x02的兩個數據字節或單個數據字(在這種情況中是數據B828)被排列成結果831中的兩個最左面的字節大小數據元素位置832。
此外,混洗掩碼也可配置成迫使結果中的一字大小數據元件為『0』,如用結果831中的第三個字大小數據元素位置834的混洗掩碼0x83806和0x82807示出的。混洗掩碼0x83 806和0x82 807設置它們的『設定到零』欄位。儘管這裡使兩個混洗掩碼字節成對,但也可實現不同的成對以便例如將四個字節排列在一起作為四字或8個字節排列在一起以形成一雙四字。類似地,成對不限於連續的混洗掩碼或特殊字節。在另一實施例中,字大小混洗掩碼可用於指定字大小數據元素。
圖9是示出混洗數據方法的一個實施例的流程圖。長度值L這裡一般用於表示操作數和數據塊的寬度。根據特殊實施例,L可用於按數據區段的數目指定寬度,比特、字節、字等。在框910處,第一長度L的緊縮數據操作數被接收用於供混洗操作使用。在框920處接收指定混洗模式的長度L的一組M長度混洗掩碼。在該示例中,L是128比特而M是8比特或一字節。在另一實施例中,L和M也可是其它值,如分別為256和16。在框930處,執行混洗操作,其中來自數據操作數的數據元素根據混洗模式被混洗排入結果中。
將在對每個數據元素位置發生了什麼方面進一步描述該實施例的框930處的混洗細節。對於一個實施例,對所有緊縮結果數據元素位置的混洗被並行處理。在另一實施例中,每次可一起處理某些部分的掩碼。在框932處,進行檢查以確定是否設定了零標記。該零標記表示每個混洗掩碼的設定/排空到零欄位。如果在框932處該零標記被確定為設置,則與該特殊混洗掩碼相對應的結果數據元素位置處的項目被設定為『0』。如果在框932處發現該零標記未被設定,則將來自混洗掩碼指定的源數據元素的數據排入與該混洗掩碼相對應的結果的目的地數據元素位置。
當前,使用整數指令的表查找需要大量指令。如果整數操作被用於訪問用於用SIMD指令實現的算法的數據,則每次查找就需要更多數量的指令。但通過使用緊縮字節混洗指令的實施例,急劇減少指令計數和執行時間。例如,如果表大小是16個字節或更少,則在用單個指令的表查找期間,可訪問十六個數據字節。如果表大小在17和32位元組之間,可使用11個SIMD指令查找表數據。如果表大小在33到64位元組之間,則需要23個SIMD指令。
存在某些使用數據並行的應用,由於它們查找表的使用而不用SIMD指令實現。視頻壓縮方法H.26L的量化和分塊算法是使用可裝入128比特寄存器的小查找表的算法示例。在某些情況下,這些算法使用的查找表較小。如果表能裝入單個寄存器,則可用一個緊縮混洗指令完成表查找操作。但如果表的存儲空間要求超過單個寄存器的大小,則緊縮混洗指令的實施例仍可通過不同算法工作。用於處理過大表的一個方法實施例將表劃分成諸部分,每部分等於一個寄存器的容量,且用混洗指令訪問這些表部分中的每一個。混洗指令使用相同的混洗控制序列來訪問表的每個部分。結果,在這些情況下可用緊縮字節混洗指令實現並行表查找,因此允許SIMD指令的使用來改善算法性能。本發明的實施例可幫助改善性能並減少使用小查找表的算法所需的存儲器訪問數量。其它實施例還允許使用SIMD指令的多個查找表元素的訪問。根據本發明的緊縮字節混洗指令允許有效的SIMD指令實現,代替使用小查找表的算法的較無效的整數植入。本發明的該實施例顯示了如何從需要大於單個寄存器的存儲器空間的一表訪問數據。在該示例中,寄存器包含表的不同區段。
圖10A-H示出了使用SIMD指令的並行表查找算法的操作。圖10A-H所述的示例包括來自多個表的數據的查找,其中如一組掩碼中指定的某些選擇的數據元素從這多個表混洗入結果數據的合併塊。在緊縮操作環境下說明以下的討論,特別是以上揭示的緊縮混洗指令。該示例的混洗操作重寫寄存器中的源表數據。如果該表將在查找操作後被重複使用,則表數據應在執行操作前被複製到另一寄存器,從而不需要另一次加載。在可選實施例中,混洗操作利用三個分開的寄存器或存儲器位置兩個源和一個目的地。可選實施例中的目的地是與任一源操作數不同的寄存器或存儲器位置。因此,源表數據不被撤消並可被重複使用。在該示例中,表數據被處理為來自較大表的不同部分。例如,低表數據1021來自表的低地址區域而高表數據1051來自表的高地址區域。本發明的實施例不限制表數據能夠源自哪裡。數據塊1021和1051可相鄰、遠離或甚至重疊。類似地,表數據也可來自不同的數據表或不同的存儲器源。也可想像,這種表查找和數據合併可在來自多個表的數據上進行。例如,代替來自於相同表的不同部分,低表數據1021可來自於第一個表而高表數據1051可來自於第二個表。
圖10A示出了基於一組混洗掩碼的來自表的第一組數據元素的緊縮數據混洗。該第一組數據元素被組成為叫做低表數據1021的操作數。在該示例中,掩碼1001和低表數據1021分別由16個元素構成。掩碼1001和低表數據1021的混洗操作生成臨時結果A1041。混洗控制掩碼的較低部分選擇寄存器中的數據元素。選擇數據元素所需的比特數是寄存器數據元素數量的log2。例如,如果寄存器容量是128比特且數據類型是字節,則寄存器數據元素的數量是16。在這種情況中,需要四個比特來選擇數據元素。圖10B示出了基於圖10A的相同一組混洗掩碼的來自表的第二組數據元素的緊縮數據混洗。該第二組數據元素被組成為叫做高表數據1051的操作數。本示例中,高表數據1051也由16個元素構成。掩碼1001和高表數據1051的混洗操作產生臨時結果B1042。
因為相同的一組掩碼1001與低表數據1021和高表數據1051一起使用,所以它們各自的結果1041和1042表現為具有類似設置的數據,但來自於不同的源數據。例如,結果1041和1042兩者的最左面的數據位置具有來自其各自數據源1021、1051的數據元素0xE1023、1053的數據。圖10C示出了涉及選擇過濾器1043和一組混洗掩碼MASK(掩碼)1001的邏輯緊縮AND操作。這種情況中的選擇過濾器是區分掩碼1001中的哪個混洗掩碼相關於第一表數據1021和哪個相關於第二表數據1051的過濾器。該實施例的混洗掩碼使用源選擇欄位,SRC選擇336,如圖3C中之前所討論的。混洗控制字節的較低比特用於選擇寄存器中的數據元素位置,且排除最高有效比特之外的幾個較高比特用於選擇表的區段。對於該實施例,與用於選擇數據的那些比特緊接上方和緊鄰的比特用來選擇表的部分。選擇過濾器1043將0x10應用於掩碼1001中的所有混洗掩碼,分出來自混洗掩碼的源選擇欄位。緊縮AND操作產生表選擇掩碼1044,它指示最終結果中的哪個數據元素位置應來自第一數據組1021或第二數據組1051。
選擇表部分的比特數等於表部分數量的log2。例如,在具有16位元組寄存器的從17到32位元組的表大小的情況下,最低的4個比特選擇數據且第五個比特選擇表部分。這裡,當存在兩個數據源1021和1051時,源選擇使用每個混洗掩碼的第二四位字節的最低比特,即比特4,來指定數據源。具有0和15之間的指數的表部分用圖10A中的緊縮混洗指令訪問。具有16和31之間的指數的表部分用圖10B中的緊縮混洗指令訪問。選擇表部分的欄位與圖10C中的混洗控制字節/指數分離。在使用較大數量的數據源的實現中,源選擇欄位會需要附加比特。在三十二字節的表的情況下,混洗控制字節0x00到0x0F將選擇第一表部分中的表元素零到十五,且混洗控制字節0x10到0x1F將選擇第二表部分中的表元素十六到三十一。例如,考慮一混洗控制字節指定0x19。0x19的比特表示是0001 1001。較低的四個比特1001選擇第九個字節(從0計數)且被設定為1的第五個比特選擇兩個表中的第二個表。等於0的第五個比特將選擇第一個表。
通過選擇第五位是零的混洗控制字節,對於圖10D中的本實施例,用緊縮比較相等操作計算用於選擇從具有指數0到15的第一表部分訪問到的數據值的掩碼。圖10D示出了低過濾器1045和表選擇掩碼1044的緊縮「比較相等操作」。用於第一表部分的圖10D中產生的低表選擇掩碼通過另一緊縮混洗操作選擇從第一表部分訪問的數據元素。該實例中的低過濾器1045是用於抽出或突出來自第一數據組1021的由混洗掩碼指示的數據元素位置的掩碼。如果本實施例中源選擇欄位是『0』,則數據源將是低表數據1021。比較相等操作產生低表選擇掩碼1046,其中0xFF值用於具有源選擇值『0』的數據元素位置。
通過選擇第五位是1的混洗控制字節,用圖10E中的緊縮比較相等操作計算用於選擇從具有指數16到31的第二表部分訪問到的數據值的掩碼。圖10E示出了作用於高過濾器407和表選擇掩碼1044的類似的比較相等操作。圖10E中產生的用於第二表部分的高表選擇掩碼通過緊縮混洗操作選擇從第二表部分訪問到的數據元素。高過濾器1047是用於抽出來自第二數據組1051的由混洗掩碼的源選擇欄位指示的數據元素位置的掩碼。如果本實施例中源選擇欄位是『1』,則數據源將是高表數據1051。比較相等操作產生高表選擇掩碼1048,其中0xFF值用於具有源選擇值『1』的數據元素位置。
選自兩個表部分的數據元素在圖10F處被合併。圖10F處,示出了對低表選擇掩碼1046和臨時結果A1041的緊縮AND操作。該緊縮AND操作從經由基於源選擇欄位的掩碼1046的第一數據組1021中濾出選擇的混洗數據元素。例如,用於最左面的數據元素位置的混洗掩碼1002中的源選擇欄位具有值『0』,如表選擇掩碼1044中示出的。因此,低表選擇掩碼1046在該位置中具有0xFF值。這裡圖10F中0xFF和最左面的數據元素位置中的數據的與操作使得數據O轉移到選擇的低表數據1049。另一方面,用於從左面起的第三數據元素位置的混洗掩碼1004中的源選擇欄位具有值『1』,指示該數據來自於第一數據組1021之外的源。因此,低表選擇掩碼1046在該位置中具有0x00值。這裡的與操作不會將數據J傳遞到選擇的低表數據1049且該位置保持為空,0x00。
對高表選擇掩碼1048和臨時結果B1042的類似的緊縮AND操作在圖10G中示出。該緊縮AND操作濾出從經掩碼1048的第二數據組1051中選擇的混洗數據元素。不同於圖10F中所述的緊縮AND操作,掩碼1048允許來自第二數據組的源選擇欄位所指定的數據傳遞到選擇的高表數據1050同時保持其它數據元素位置為空。
圖10H示出了來自第一數據組和第二數據組的選擇數據的合併。對選擇的低表數據1049和選擇的高表數據1050執行緊縮邏輯OR操作,以獲得合併的選擇表數據1070,這是本示例中並行表查找算法的期望結果。在可選實施例中,將選擇的低表數據1049和選擇的高表數據1050加在一起的緊縮加法操作也可產生合併的選擇表數據1070。如圖10H所示,在該實施例中,選擇的低表數據1049或選擇的高表數據1050具有用於給定數據位置的0x00值。這是因為沒有0x00值的其它操作數將包含從合適源選擇的期望的表數據。這裡,結果1070中最左面的數據元素位置是O,它是來自第一數據組1021的混洗數據1041。類似地,結果1070中從左面起的第三個數據元素位置是Z,它是來自第二數據組1051的混洗數據1042。
本實施例中用於在過大表中查找數據的方法一般可通過以下操作概括。首先,將表數據複製或加載入寄存器。通過緊縮混洗操作訪問來自每個表部分的表值。標識表部分的源選擇欄位從混洗掩碼中提取。用表部分數對源選擇欄位進行比較是否相等(compare-if-equal)操作以確定哪些表部分是用於混洗數據元素的合適源。比較是否相等操作提供掩碼,以進一步濾出用於每個表部分的期望的混洗數據元素。來自合適表部分的期望的數據元素被合併在一起,形成最終的表查找結果。
圖11是示出使用SIMD指令執行表查找的方法的一個實施例的流程圖。這裡描述的流程通常遵循圖10A-H的方法,但不限於此。這些操作中的某些也可按不同順序或使用各種類型的SIMD指令執行。在框1102處,接收指定混洗模式的一組混洗掩碼。這些混洗掩碼還包括源欄位,以指示從哪個表或源混洗數據元素以獲得期望的結果。在框1104處,加載表的第一部分的數據元素或第一數據組。第一部分數據元素在框1106處根據框1102的混洗模式被混洗。在框1108處加載用於第二部分表的數據元素或第二數據組。在框1110處根據框1102的混洗模式混洗第二部分數據元素。在框1112處,從混洗掩碼中濾出表選擇。本實施例的表選擇包含指定假定數據元素源自哪裡的源選擇欄位。在框1114處,為來自表的第一部分的混洗數據生成表選擇掩碼。在框1116處,為來自表的第二部分的混洗數據生成表選擇掩碼。這些表選擇掩碼將從合適的表數據源中濾出用於特定數據元素位置的期望的混洗數據元素。
框1118處,根據用於第一表部分的框1114的表選擇掩碼,從第一表部分的混洗數據中選擇出數據元素。框1120處,根據用於第二表部分的框1116的表選擇掩碼,從第二表部分的混洗數據中選擇數據元素。在框1118處從第一表部分和在框1120處從第二表部分選擇的混洗數據元素在框1122處被合併在一起,以獲得合併的表數據。一個實施例的合併的表數據包括從第一表數據和第二表數據混洗的數據元素。對於另一實施例,合併的表數據可包括從超過兩個表源或存儲器區域查找的數據。
圖12是示出執行表查找的方法的另一實施例的流程圖。在框1202處,加載具有多個數據元素的表。在框1204處,確定該表是否裝入單個寄存器。如果該表裝入單個寄存器,則在框1216處用混洗操作執行表查找。如果數據不裝入單個寄存器,則在框1206處對於表的每個相關部分用混洗操作執行表查找。執行邏輯緊縮的AND操作,以獲得選擇表部分或數據源的比特或欄位。框1210處的「比較是否相等」查找形成一掩碼,以便從要查找的表的相關部分中選擇表數據。在框1212處,邏輯AND操作用於從表部分中查找和選擇數據項。邏輯OR操作在框1214處合併選擇的數據,以獲得期望的表查找數據。
緊縮混洗指令的一個實施例被實現為用於用排空到零能力在多個寄存器之間重排數據的算法。混合操作的目的是在單個SIMD寄存器中按選擇的結構合併兩個或多個SIMD寄存器的內容,在該選擇的結構中結果中數據的位置與源操作數中它們的原始位置不同。選擇的數據元素首先被移到期望的結果位置且未選擇的數據元素被設定為零。一個寄存器的選擇的數據元素要移到的位置在另一個寄存器中被設定為零。結果,單獨一個結果寄存器會在給定的數據元素位置中包含非零數據項。以下的一般指令序列可用於混合來自兩個操作數的數據緊縮字節混洗數據A,掩碼A;緊縮字節混洗數據B,掩碼B;緊縮邏輯OR結果A,結果B。
操作數數據A和數據B包含要被重排或設定零的元素。操作數掩碼A和掩碼B包含指定數據元素要移動到哪裡以及哪些數據元素要設定為零的混洗控制字節。對於該實施例,未由掩碼A設定為零的目的地位置中的數據元素由掩碼B設定為零,且未由掩碼B設定為零的目的地位置由掩碼A設定為零。圖13A-C示出了用於在多個寄存器之間重排數據的算法。在該示例中,來自兩個數據源或寄存器1304、1310的數據元素被一同混洗入交錯數據塊1314。該示例的包含掩碼1302、1308、源數據1304、1310以及結果1306、1312、1314的數據塊分別是128比特長並由十六個字節大小的數據元素構成。但,可選實施例可包括具有各種大小的數據元素的其它長度的數據塊。
圖13A示出了第一掩碼MASK(掩碼)A1302的作用於第一源數據操作數DATA(數據)A 1304第一緊縮數據混洗操作。對於該示例,期望的交錯結果1314將包括來自第一數據源1304的一個數據元素和來自第二數據源1310的另一數據元素的交錯模式。在該示例中,數據A1304的第五個字節與數據B1310的第十二個字節交錯。在該實施例中,掩碼A1302包括「0x80」和「0x05」的重複模式。該實施例中的0x80值設置了設定到零欄位,其中相關的數據元素位置用『0』填充。0x05值闡明了用於該混洗掩碼的有關數據元素位置用來自數據A1304的數據元素0x5的數據F1排列。本質上,掩碼A1302中的混洗模式在每隔開一個結果數據元素的位置處排列和重複數據F1。這裡,數據F1是要從數據A1304混洗的單塊數據。在可選實施例中,可以混洗來自各種數量的源數據元素的數據。因此,實施例不限於包括單塊數據的模式或任何特定模式。用於掩碼模式的排列組合具有所有類型的可能性。圖13A的箭頭示出了經掩碼A1302的混洗掩碼的數據元素的混洗。因此,該混洗操作的結果A1306由經掩碼模式1302的『0』和F1的模式構成。
圖13B示出了包含第二掩碼MASK(掩碼)B1308以及第二源數據操作數DATA(數據)B 1310的第二緊縮數據混洗操作。掩碼B1308包括「0x0C」和「0x80」的重複模式。0x80值使得該混洗掩碼的有關數據位置接收『0』。0xC0值使得與該混洗掩碼相對應的結果數據元素位置用來自數據B1310的數據元素0xC的數據M2排列。掩碼B1308的混洗模式將數據M2排列到所有其它結果數據元素位置。圖13B中的箭頭示出了掩碼B1308中經該組混洗掩碼的數據元素的混洗。因此,該混洗操作的結果B1312由經掩碼模式1308的『0』和M2的模式構成。
圖13C示出了混洗數據、結果A1306和結果B1312的合併,以實現交錯結果1314。該合併用緊縮邏輯OR操作實現。結果A1306和結果B1312中的『0』值模式允許M2和F1數據值1314的交錯。例如,在最左面的數據元素位置處,『0』和M2的邏輯OR導致結果1314的最左面數據元素位置中的M2。類似地,在最右面的數據元素位置處,F1和『0』的邏輯OR導致結果1314的最右面數據元素位置中的F1。因此,來自多個寄存器或存儲器位置的數據可被重排成期望模式。
圖14是示出在多個寄存器之間重排數據的方法的一個實施例的流程圖。在框1402處從第一寄存器或存儲器位置加載數據。在框1404處,基於第一組混洗掩碼混洗該第一寄存器數據。在框1406處,從第二寄存器或存儲器位置加載數據。該第二寄存器數據在框1408處根據第二組混洗掩碼被混洗。來自第一和第二寄存器混洗的混洗數據在框1410處以邏輯OR合併,以便用來自第一和第二寄存器的數據得出交錯數據塊。
圖15A-K示出了用於在多個寄存器之間混洗數據以生成交錯數據的算法。這是交錯平面色數據的應用示例。常在分開的色平面中處理圖像數據,隨後這些平面稍後被交錯用於進行顯示。下述算法顯示紅平面、綠平面和藍平面數據的交錯,如諸如位圖的圖像格式所使用的。大量色空間和交錯模式都是可能的。這樣,該方法能方便地擴展到其它色空間和格式。該示例實現了常用的圖像處理數據格式過程,其中紅(R)平面、綠(G)平面和藍(B)平面數據被交錯成RGB格式。該示例顯示了根據本發明的排空到零能力如何顯著地減少存儲器訪問。
來自三個源的數據按交錯方式組合在一起。更具體地,數據與象素顏色數據相關。例如,每個象素的顏色數據可包括來自紅(R)、綠(G)和藍(B)源的信息。通過組合顏色信息,可以評估紅/綠/藍(RGB)數據以提供特定象素期望的顏色。這裡,紅數據保存於操作數數據A1512中,綠數據於數據操作數數據B1514中,且藍數據於數據C1516中。該結構可存在於圖形或存儲器系統中,其中用於每個分開顏色的數據被存儲在一起或者在流數據中分別採集。為了在再造或顯示期望圖像時使用該信息,象素數據必須被排列成RGB模式,其中用於特定象素的所有數據被組合在一起。
對於該實施例,具有預定模式的一組掩碼用於將RGB數據交錯在一起。圖15A示出了一組掩碼具有第一模式的掩碼A1502,具有第二模式的掩碼B1504,以及具有第三模式的掩碼C1506。來自每個寄存器的數據將隔開三個字節,以使它可與來自兩個其它寄存器的數據相交錯。具有十六進位值0x80的控制字節設定了最高有效比特,以使相應的字節通過緊縮字節混洗指令被排空到零。在這些掩碼的每一個中,每個第三混洗掩碼被啟用以選擇用於混洗的數據元素,同時兩個插入混洗掩碼具有值0x80。該0x80值指示用於那些相應數據元素位置的掩碼中的設定到零欄位被置1。因此,『0』將被置於與該掩碼相關的數據元素位置中。在該示例中,掩碼模式將基本分出每個顏色的數據元素,以實現交錯。例如,在將掩碼A1502應用於混洗操作中的數據操作數時,掩碼A1502使得六個數據元素(0x0、0x1、0x2、0x3、0x4、0x5)以每個數據元素之間隔開兩個數據元素空間進行混洗。類似地,掩碼B1504將在0x0、0x1、0x2、0x3、0x4處隔開數據元素進行混洗。掩碼C1506將在0x0、0x1、0x2、0x3、0x4處隔開數據元素進行混洗。
注意,在該實現中,每個特定重疊數據元素位置的混洗掩碼具有兩個設定到零欄位和指定數據元素的一個混洗掩碼。例如,參考三組掩碼1502、1504、1506的最右面的數據元素位置,混洗掩碼值為0x00、0x80和0x80,分別用於掩碼A1502、掩碼B1504和掩碼C1506。因此,只有用於掩碼A1502的混洗掩碼0x00指明用於該位置的數據。本實施例中的掩碼被形成模式,以使混洗數據能被方便地合併以形成交錯RGB數據塊。
圖15B示出了要交錯的數據塊數據A1512、數據B1514和數據C1516。對於該實施例,每組數據都具有數據條目,它具有用於十六個象素位置的顏色信息。這裡,附隨數據元素中的每個顏色字母的下標概念表示該象素號。例如,R0是用於象素0的紅數據而G15是用於象素15的綠數據。所示的每個數據元素處的十六進位值是該數據元素位置的號碼。顏色數據(數據A1512、數據B1514、數據C1516)可被複製入其它寄存器,以使數據不會由混洗操作重寫並可被重複使用而不用其它加載操作。在該實施例的示例中,需要使用掩碼1502、1504和1506的三次傳遞(pass)來完成象素數據交錯。對於可選實現和其它數據量,傳遞和混洗操作的次數可按需要變化。
圖15C示出了結果數據塊,MASKED DATA(掩碼數據)A1522,用於使用第一混洗模式MASK(掩碼)A1502的對紅象素數據DATA(數據)A1512的緊縮混洗操作。響應於掩碼A1502,紅象素數據被排入所有第三數據元素位置。類似地,圖15D示出了結果數據塊,MASKED DATA(掩碼數據)B1524,用於使用第二混洗模式MASK(掩碼)B1504的對綠象素數據DATA(數據)B1514的緊縮混洗操作。圖15E示出了結果數據塊,MASKED DATA(掩碼數據)C1526,用於使用第三混洗模式MASK(掩碼)C1506的對藍象素數據DATA(數據)C1516的混洗操作。對於該實施例的掩碼模式,來自這些混洗操作的結果數據塊提供交錯的數據元素以使數據元素中的一個具有數據而兩個具有『0』。例如,這些結果1522、1524、1526的最左面的數據元素位置分別包含R5、『0』和『0』。在下一個數據元素位置處,呈現了用於另一RGB顏色的象素數據。因此,當一起合併時,達到組合的RGB類型。
在該實施例中,用於紅數據和綠數據的以上混洗數據以緊縮邏輯OR操作被首先合併在一起。圖15F示出了用於掩碼數據A1522和掩碼數據B1524的緊縮邏輯OR的結果數據,即交錯的AB數據1530。混洗的藍數據現在以另一緊縮邏輯OR操作與交錯的紅和綠數據合併在一起。圖15G示出了來自於掩碼數據C1526和掩碼數據AB1530的緊縮邏輯OR的新結果,即交錯的A,BC數據1532。因此,圖15G的結果數據塊包含了頭五個象素和第六個象素的一部分的交錯RGB數據。本實施例的算法的後續迭代將為十六個象素的其餘部分產生交錯RGB數據。
在這點上,數據A1512、數據B1514和數據C1516中的數據的三分之一已被交錯。兩種方法可用於處理這些寄存器中的其餘數據。另一組混洗控制字節可用於安排要交錯的數據或者數據A1512、數據B1514和數據C1516中的數據可被右移,以便可再次使用混洗掩碼1502、1504和1506。在這裡示出的實現中,將數據移位以避免需要加載附加混洗控制字節的存儲器訪問。在沒有這些移位操作的情況下,在該實施例中需要九組控制字節代替三組(掩碼A1502、掩碼B1504、掩碼C1506)。該實施例也可在有限數量的寄存器可用且存儲器訪問較長的架構中應用。
在其中有較多寄存器可用的可選實施例中,保持寄存器中的所有或大量掩碼組以使移位操作是不必要的會是更加有效的。此外,在具有許多寄存器和執行單元的架構中,所有混洗操作可並行執行而不必等待移位產生。例如,具有九個混洗單元和九個掩碼組的亂序處理器可並行執行九個混洗操作。在以上實施例中,在再應用掩碼前必須將數據移位。
根據已為該特定顏色處理的數據元素的數目,數據A1512、數據B1514和數據C1516的原始顏色數據中的數據元素被移位。在該示例中,以上已為紅色處理了用於六個象素的數據,從而用於紅數據操作數數據A1512的數據元素被向右移6個數據元素位置。類似地,已為綠和藍兩者處理了用於5個象素的數據,從而用於綠數據操作數數據B1514和用於藍數據操作數數據C1516的數據元素被分別右移5個數據元素位置。被移位的源數據在圖15H中分別示作為用於顏色紅、綠、藍的數據A』1546、數據B』1542和數據C』1544。
用該移位數據重複以上用圖15A-G討論的混洗和邏輯OR操作。分別與掩碼A1502、掩碼B1504和掩碼C1506一起作用於數據B』1542、數據C』1544和數據A』1546的後續緊縮混洗操作結合對三個緊縮混洗結果的緊縮邏輯OR操作提供用於另四個象素的交錯RGB數據和另兩個的一部分。該結果數據,即交錯A』、B』和C』數據1548在圖15I中示出。注意,最右面的兩個數據元素涉及第六個象素,它已將其紅數據R5用第一交錯數據組1532排列。按第二傳遞的處理結果,再次使原始象素顏色數據移位合適數量的位置。這裡,已為紅和藍處理了用於五個附加象素的數據,從而用於紅數據操作數數據A』1546和用於藍數據操作數數據C』1544的數據元素被右移5個數據元素位置。已為綠處理了用於六個象素的數據,從而用於綠數據操作數數據B』1542的數據元素被右移六個位置。圖15J示出了用於該第三次傳遞的移位數據。將以上緊縮混洗和邏輯OR的重複應用於DATA C」1552、DATA A」1554和DATA B」1556。圖15K將用於最後的16個象素的最終交錯RGB數據示作為交錯的A」,B」DATA1558。具有B10的最右面的數據元素相關於第十一個象素,它已使其綠數據G10和紅數據R10與第二交錯數據組1548一起排列。因此,經由具有一組掩碼模式的一系列緊縮混洗和緊縮邏輯OR操作,來自多個源1512、1514和1516的數據按期望的方式一起合併和重排,以便進一步使用或處理這些結果1532、1548、1558。
圖16是示出在多個寄存器之間混洗數據以生成交錯數據的一個實施例的流程圖。例如,本方法的實施例可應用於交錯象素數據的生成,如圖15A-K中所討論的。雖然在三個數據源或數據平面的環境下描述本實施例,但其它實施例可用兩個或更多個數據平面進行操作。這些數據平面可包括用於一個或多個圖像幀的顏色數據。在框1602處,加載用於第一、第二和第三平面的幀數據。在該示例中,用於多個象素的RGB顏色數據可作為來自三個不同平面的單獨顏色獲得。第一平面中的數據用於顏色紅,第二平面中的數據用於綠色,且第三平面中的數據用於藍色。在框1604中,加載具有混洗控制模式(M1、M2和M3)的一組掩碼。這些混洗控制模式確定混洗模式和數據排列,以便一起交錯顏色。根據該實現,可採用任何數量的混洗模式來生成期望的數據排列。
在框1606處,為每個數據平面選擇合適的控制模式。在該實施例中,基於期望模式數據是什麼順序以及當前執行哪個迭代來選擇混洗模式。框1608處,來自第一數據組(紅)的幀數據用第一混洗控制模式進行混洗,以獲得混洗的紅數據。在框1610處,用第二混洗控制模式混洗第二數據組(綠),以獲得混洗的綠數據。在框1612處,用第三混洗控制模式混洗第三數據組(藍),以實現混洗的藍數據。雖然本實施例中三個掩碼和它們的混洗控制模式彼此不同,但在每次迭代期間可在超過一個單獨數據組上使用一掩碼及其混洗模式。此外,某些掩碼會比其它的更常使用。
框1614處,用於三個數據組的框1608、1610、1612的混洗數據被合併在一起,形成該傳遞的交錯結果。例如,第一傳遞的結果會看起來像圖15G的交錯數據1532,其中每個象素的RGB數據被一起組成為一組。框1616處,進行檢查以確定寄存器中是否加載了更多幀數據用於進行混洗。如果否,則在框1620處進行檢查以確定是否存在更多的來自三個數據平面用於被交錯的數據。如果否,則進行所述方法。如果在框1620中存在更多的平面數據,則該過程返回到框1602,加載用於混洗的更多幀數據。
如果框1616處的確定是真,則顏色數據的每個平面中的幀數據被移位預定計數,該計數對應於在最後傳遞期間哪個掩碼模式被應用於該特殊顏色的數據組。例如,與來自圖15G的第一傳遞示例相一致,第一、第二、第三平面中的紅、綠、藍數據分別被移位6、5和5個位置。根據該實現,每次傳遞時為每個顏色數據選擇的混洗模式可以是不同的或者重新使用相同的一個。對於一個實施例在第二次傳遞期間,來自第一迭代的三個掩碼被旋轉,以使第一平面數據現在與第三掩碼配對,第二平面數據與第一掩碼配對,且第三平面數據與第三掩碼配對。該掩碼旋轉允許從一次傳遞到下一次的交錯RGB數據的合適的連續性,如圖15G和15I所示出的。如同在第一次傳遞中,混洗和合併繼續。如果期望第三分個或更多的迭代,本實施例的混洗掩碼模式在不同數據平面之間繼續旋轉以生成更多交錯RGB數據。
根據本發明使用緊縮混洗指令的算法實施例也可改善具有當前硬體資源的處理器和系統性能。但隨著技術繼續進步,本發明的實施例在與更大量的硬體資源和更快、更有效的邏輯電路組合時可對改善性能具有更深的影響。因此,具有字節間隔尺寸和排空到零選項的緊縮混洗指令的一個有效實施例可具有跨九代處理器的不同和更大的影響。在現代處理器架構中簡單添加更多資源不會確保更好的性能改善。通過維持類似於並行表查找和緊縮字節混洗指令(PSHUFB)的一個實施例的應用的效率,更大的性能改善是可能的。
雖然以上示例在128比特寬的硬體/寄存器/操作數環境中作出一般性描述以簡化討論,但其它實施例採用64或128比特寬的硬體/寄存器/操作數來執行緊縮混洗操作、並行表查找和多寄存器數據重排。此外,本發明的實施例不限於特定硬體或技術類型,諸如MMX/SSE/SSE2技術,並可與其它SIMD實現和其它圖形數據處理技術一同使用。
在以上說明書中,參考其示例性實施例描述了本發明。但顯然,可對其進行各種修改和變化而不背離本發明的較寬精神和範圍,如所附權利要求書中所闡述的。因此,說明書和附圖被認為是說明性而非限制性的。
權利要求
1.一種方法,包括接收具有一組L個數據元素的第一操作數和具有一組L個控制元素的第二操作數;以及對於每個控制元素,如果未設置其排空到零欄位,將由所述控制元素指定的來自第一操作數數據元素的數據混洗到相關的結果數據元素位置,而如果其排空到零欄位未設置,則將零置入所述的相關結果數據元素位置。
2.如權利要求1所述的方法,其特徵在於,所述L個控制元素中的每一個都佔據所述第二操作數中的特殊位置並與結果中類似定位的數據元素位置相關聯。
3.如權利要求2所述的方法,其特徵在於,所述L個數據元素中的每一個都佔據所述第一操作數中的特殊位置。
4.如權利要求3所述的方法,其特徵在於,所述控制元素將通過數據元素位置編號指定第一操作數數據元素。
5.如權利要求4所述的方法,其特徵在於,所述控制元素中的每一個都包括排空到零欄位,所述排空到零欄位用於指示與該控制元素相關聯的數據元素位置是否用零值填充;以及選擇欄位,所述選擇欄位用於指示混洗來自哪個第一操作數數據元素的數據。
6.如權利要求5所述的方法,其特徵在於,所述控制元素中的每一個都進一步包含源選擇欄位。
7.如權利要求2所述的方法,其特徵在於,還包括輸出結果數據塊,該數據塊包括響應於所述第二操作數的所述控制元素從所述第一操作數混洗的數據。
8.如權利要求1所述的方法,其特徵在於,所述數據元素中的每一個都包括一字節的數據。
9.如權利要求8所述的方法,其特徵在於,所述控制元素中的每一個都是一字節寬。
10.如權利要求9所述的方法,其特徵在於,L是8且其中所述第一操作數、所述第二操作數和所述結果分別由64比特寬的緊縮數據構成。
11.如權利要求9所述的方法,其特徵在於,L是16且其中所述第一操作數、所述第二操作數和所述結果分別由128比特寬的緊縮數據構成。
12.一種裝置,包括執行單元,用於執行包括含一組L個數據元素的第一操作數和含一組L個控制元素的第二操作數的混洗指令,所述混洗指令用於使得所述執行單元對於每個單獨的控制元素,確定其排空到零欄位是否被設置,且如果是真則將零置入相關的結果數據元素位置,否則將來自由所述單個控制元素指定的第一操作數數據元素的數據混洗到所述相關聯的結果數據元素位置。
13.如權利要求12所述的裝置,其特徵在於,所述L個控制元素中的每一個都佔據所述第二操作數中的一位置並與結果中類似定位的數據元素位置相關聯。
14.如權利要求13所述的裝置,其特徵在於,每個單個控制元素將通過數據元素位置編號指定一第一操作數數據元素。
15.如權利要求14所述的裝置,其特徵在於,所述控制元素中的每一個都包括排空到零欄位,所述排空到零欄位用於指示與該控制元素相關聯的數據元素位置是否用零值填充;以及選擇欄位,所述選擇欄位用於指示混洗來自哪個第一操作數數據元素的數據。
16.如權利要求15所述的裝置,其特徵在於,所述控制元素中的每一個都進一步包括源選擇欄位。
17.如權利要求16所述的裝置,其特徵在於,所述混洗指令將進一步使得所述執行單元生成具有L個數據元素位置的結果,這L個數據元素位置已基於所述一組L個控制元素被填充。
18.如權利要求12所述的裝置,其特徵在於,所述數據元素中的每一個都包括一字節數據且每個所述控制元素都是字節寬。
19.如權利要求18所述的裝置,其特徵在於,L是8且其中所述第一操作數、所述第二操作數和所述結果分別由64比特寬的緊縮數據構成。
20.如權利要求18所述的裝置,其特徵在於,L是16且其中所述第一操作數、所述第二操作數和所述結果分別由128比特寬的緊縮數據構成。
21.一種包含存儲表示預定功能的數據的機器可讀媒介的製品,包括接收具有一組L個數據元素的第一操作數和具有一組L個控制元素的第二操作數;以及對於每個控制元素,如果未設置其排空到零欄位,則將來自由所述控制元素指定的第一操作數數據元素的數據混洗到相關聯的結果數據元素位置,如果其排空到零欄位未設置,則將零置入所述相關聯的結果數據元素位置。
22.如權利要求21所述的製品,其特徵在於,所述機器可讀媒介存儲的所述數據表示集成電路設計,在製造時響應於單個指令執行所述預定功能。
23.如權利要求22所述的製品,其特徵在於,所述預定功能還包括生成具有L個數據元素位置的結果,這L個數據元素位置已根據所述一組L個控制元素被填充。
24.如權利要求23所述的製品,其特徵在於,所述L個控制元素中的每一個都與結果中的類似定位的數據元素位置相關聯。
25.如權利要求24所述的製品,其特徵在於,每個單個控制元素將通過一數據元素位置編號指定第一操作數數據元素。
26.如權利要求25所述的製品,其特徵在於,所述數據元素中的每一個都包括一字節數據。
27.如權利要求26所述的製品,其特徵在於,每個所述控制元素都包括排空到零欄位,所述排空到零欄位用於指示與該控制元素相關聯的數據元素位置是否用零值填充;以及選擇欄位,所述選擇欄位用於指示混洗來自哪個第一操作數數據元素的數據。
28.如權利要求27所述的製品,其特徵在於,所述控制元素中的每一個都進一步包括源選擇欄位。
29.如權利要求21所述的製品,其特徵在於,由所述機器可讀媒介存儲的所述數據表示計算機指令,在由機器執行時使得所述機器執行所述預定功能。
30.一種方法,包括接收具有一組L個數據元素的第一操作數;接收具有一組L個掩碼的第二操作數,其中所述L個掩碼中的每一個都佔據所述第二操作數中的一特殊位置並與結果中的類似定位的數據元素位置相關聯,所述L個掩碼中的每一個包括一排空到零欄位;對於每個掩碼,確定是否設置了其排空到零欄位,且如果是真,則將零置入相關聯的結果數據元素位置;以及如果其排空到零欄位未設置,則將來自由所述掩碼指定的第一操作數數據元素的數據混洗到所述相關聯的結果數據元素位置。
31.如權利要求30所述的方法,其特徵在於,所述L個掩碼中的每一個都佔據所述第二操作數中的一特殊位置並與所述結果中的類似定位的數據元素位置相關聯。
32.如權利要求31所述的方法,其特徵在於,所述L個掩碼中的每一個都包括排空到零欄位,所述排空到零欄位用於指示與該控制元素相關聯的數據元素位置是否用零值填充;以及選擇欄位,所述選擇欄位用於指示混洗來自哪個第一操作數數據元素的數據。
33.如權利要求32所述的方法,其特徵在於,所述掩碼中的每一個都進一步包括源選擇欄位。
34.如權利要求33所述的方法,其特徵在於,所述第一操作數、所述第二操作數和所述結果分別由64比特寬的緊縮數據構成。
35.如權利要求33所述的方法,其特徵在於,所述第一操作數、所述第二操作數和所述結果分別由128比特寬的緊縮數據構成。
36.一種方法,包括接收具有一組L個數據元素的第一操作數;接收具有一組L個混洗掩碼的第二操作數,所述L個混洗掩碼中的每一個都與結果中的類似定位的數據元素位置相關聯;對於每個單個混洗掩碼,確定其排空到零欄位是否被設置,且如果是真,則將零置入相關聯的結果數據元素,否則將來自由所述單個混洗掩碼指定的第一操作數數據元素的數據混洗到所述相關聯的結果數據元素位置。
37.如權利要求36所述的方法,其特徵在於,所述L個混洗掩碼的每一個包括排空到零欄位,所述排空到零欄位用於指示與該控制元素相關聯的數據元素位置是否用零值填充;以及選擇欄位,所述選擇欄位用於指示混洗來自哪個第一操作數數據元素的數據。
38.如權利要求37所述的方法,其特徵在於,所述掩碼中的每一個還包括源選擇欄位。
39.一種裝置,包括第一存儲器位置,用於存儲多個源數據元素;第二存儲器位置,用於存儲多個控制元素,所述控制元素中的每一個對應於一結果數據元素位置,且所述控制元素中的每一個都包括排空到零欄位和選擇欄位;控制邏輯,它耦合到所述第二存儲器位置,所述控制邏輯響應於所述控制元素的值生成多個選擇信號和多個排空到零信號;第一多個多路復用器,它耦合到所述第一存儲器位置和所述多個選擇信號,所述第一多個多路復用器中的每一個響應於與一特定結果數據元素位置相對應的選擇信號混洗用於所述特定結果數據元素位置的數據元素;以及第二多個多路復用器,它耦合到所述第一多個多路復用器和所述多個排空到零信號,所述第二多個多路復用器中的每一個與一特定結果數據元素位置相關聯,如果其排空到零信號是有效的則所述第二多個多路復用器中的每一個輸出零否則輸出為該特定結果數據元素位置混洗的數據元素。
40.如權利要求39所述的裝置,其特徵在於,所述多個源數據元素是第一緊縮數據操作數。
41.如權利要求40所述的裝置,其特徵在於,所述多個控制元素是第二緊縮數據操作數。
42.如權利要求40所述的裝置,其特徵在於,所述第一和第二存儲器位置是單指令多數據寄存器。
43.如權利要求42所述的裝置,其特徵在於,所述第一緊縮操作數是64比特長且所述源數據元素中的每一個都是一字節寬;以及所述第二緊縮操作數是64比特長且所述控制元素中的每一個是一字節寬。
44.如權利要求42所述的裝置,其特徵在於,所述第一緊縮操作數是128比特長且所述源數據元素中的每一個都是一字節寬;以及所述第二緊縮操作數是128比特長且所述控制元素中的每一個是一字節寬。
45.一種裝置,包括控制邏輯,用於接收一組L個混洗掩碼,其中每個混洗掩碼與一唯一的結果數據元素位置相關聯,所述控制邏輯用於為每個結果數據元素位置提供選擇信號和排空到零信號;一組L個多路復用器,它們耦合到所述控制邏輯,其中每個多路復用器也與一唯一的結果數據元素位置相關聯,如果其相關聯的排空到零信號有效則每個多路復用器輸出零,且如果其相關聯的排空到零信號無效則輸出基於其相關聯的選擇信號從一組M個數據元素混洗的數據。
46.如權利要求45所述的裝置,其特徵在於,還包括具有L個唯一數據元素位置的寄存器,每個數據元素位置保持來自其相關聯的多路復用器的輸出。
47.如權利要求46所述的裝置,其特徵在於,L是16,M是16。
48.一種系統,包括存儲器,用於存儲數據和指令;處理器,它耦合到總線上的所述存儲器,所述處理器可操作用於執行混洗操作,所述處理器包括總線單元,用於接收來自所述存儲器的指令,所述指令引起基於來自第二操作數的一組L個混洗控制元素的對來自第一操作數的L個數據元素中的至少一個的數據混洗;執行單元,它耦合到所述總線單元,所述執行單元執行所述指令,所述指令使得所述執行單元對每個混洗控制元素,如果其排空到零欄位未設置,則將來自由所述混洗控制元素指定的第一操作數數據元素的數據混洗到相關聯的結果數據元素位置,且如果其排空到零欄位未設置,則將零置入所述相關聯的結果數據元素位置。
49.如權利要求48所述的系統,其特徵在於,每個混洗控制元素都包括排空到零欄位,所述排空到零欄位指示與該混洗控制元素相關聯的數據元素位置是否將用零值填充;以及選擇欄位,所述選擇欄位用於指示混洗來自哪個第一操作數數據元素的數據。
50.如權利要求49所述的系統,其特徵在於,每個混洗控制元素都進一步包括源選擇欄位。
51.如權利要求48所述的系統,其特徵在於,所述指令是具有排空到零能力的緊縮字節混洗指令。
52.如權利要求48所述的系統,其特徵在於,每個數據元素都是字節寬,每個混洗命令元素是字節寬,且L是8。
53.如權利要求48所述的系統,其特徵在於,所述第一操作數是64比特長且所述第二操作數是64比特長。
全文摘要
用於混洗數據的方法、裝置和程序。一個實施例的方法包括接收具有一組L個數據元素的第一操作數和具有一組L個控制元素的第二操作數。對於每個控制元素,如果其排空到零欄位未設置,則來自由個別控制元素指定的第一操作數數據元素的數據被混洗到相關聯的結果數據元素位置,而如果其排空到零欄位未設置,則將零置入相關聯的結果數據元素位置。
文檔編號G06F17/14GK1813241SQ200480018443
公開日2006年8月2日 申請日期2004年6月24日 優先權日2003年6月30日
發明者小W·梅西, E·德貝斯, P·魯塞爾, H·恩古彥 申請人:英特爾公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀