專利名稱:用于轉換向量數(shù)據(jù)的方法、裝置和指令的制作方法
技術領域:
本公開一般涉及數(shù)據(jù)處理領域,尤其涉及用于轉換向量中使用的數(shù)據(jù)的 方法和有關裝置。
些旦 Ff豕
數(shù)據(jù)處理系統(tǒng)可包括硬件資源,諸如一個或多個處理器、隨機存取存儲
器(RAM)、只讀存儲器(ROM)等。處理器可包括多個處理核。處理系統(tǒng)還可包 括軟件資源,諸如基本輸入/輸出系統(tǒng)(BIOS)、虛擬機監(jiān)控器以及一個或多 個操作系統(tǒng)(OS)。
處理器可為處理向量提供硬件資源。向量是一種持有數(shù)個連續(xù)元素或數(shù) 據(jù)項的數(shù)據(jù)結構。大小為M的向量寄存器可包含N個大小為O的向量元素, 其中N二M/0。例如,64字節(jié)向量寄存器可被分成(a)64個向量元素,且每個 元素持有占據(jù)1字節(jié)的數(shù)據(jù)項;(b)32個各自持有占據(jù)2字節(jié)(或一個"字") 的數(shù)據(jù)項的向量元素;(c)16個各自持有占據(jù)4字節(jié)(或一個"雙字")的數(shù) 據(jù)項的向量元素;(d)8個各自持有占據(jù)8字節(jié)(或一個"四字")的數(shù)據(jù)項的 向量元素。
為了提供數(shù)據(jù)級并行性,處理器可支持單指令、多數(shù)據(jù)(SIMD)操作。 SIMD操作包括將相同操作應用于多個數(shù)據(jù)項。例如,響應于單個SIMD加指 令,處理器可將特定值與向量中的每個元素相加。
附圖簡要說明
本發(fā)明的特征和優(yōu)點將從所附權利要求、以下一個或多個示例實施例的 詳細描述以及相應附圖變得顯而易見,附圖中
圖1是描述其中可實現(xiàn)本發(fā)明的示例實施例的某些方面的適當數(shù)據(jù)處 理環(huán)境的框圖;圖2是根據(jù)本發(fā)明的示例實施例的示例指令和相應的執(zhí)行流水線的框
圖3是在圖1的處理系統(tǒng)中用于處理向量的過程的示例實施例的流程 圖;以及
圖4-6是描述根據(jù)本發(fā)明的示例實施例的示例向量-加載-轉換-和寫入 指令及相關聯(lián)的存儲結構的框圖7是描述根據(jù)本發(fā)明的示例實施例的示例向量-加載-轉換-計算-和 寫入指令及相關聯(lián)的存儲結構的框圖;以及
圖8是描述根據(jù)本發(fā)明的示例實施例的示例向量-轉換-和存儲指令及 相關聯(lián)的存儲結構的框圖。
具體實施例方式
本公開描述了某些新型機器指令,這些指令的每一個都將數(shù)據(jù)格式轉換 操作與一個或多個向量操作相結合。例如, 一種類型的指令將轉換操作與向量 寄存器加載操作合并或組合。這種類型的指令一般被稱為向量-加載-轉換-和 寫入(或"VLoadConWr")指令。另一種類型(或者它可被視為VLoadConWr 類型的變形)將轉換操作、向量算術操作和向量寄存器加載操作組合。這種類 型的指令一般被稱為向量-加載-轉換-計算-和寫入(或"VLoadConComWr") 指令。另一種類型將轉換操作和用于將數(shù)據(jù)從向量寄存器存儲到存儲器的操作 組合。這種類型的指令一般被稱為向量-轉換-和存儲(或"VConStore")指 令??梢话愕厥褂眯g語"合并的向量轉換指令"來指代VLoadConWr、 VLoadConComWr和VConStore指令。本公開還描述了有關的裝置和方法。
圖1是描述其中可實現(xiàn)本發(fā)明的示例實施例的某些方面的適當數(shù)據(jù)處 理環(huán)境12的框圖。數(shù)據(jù)處理環(huán)境12包括具有各種硬件和軟件組件的處理系統(tǒng) 20。硬件組件包括處理器22和處理器24。處理器24可用作中央處理單元 (CPU),而處理器22可充當輔助處理器或協(xié)處理器。每個處理器可包括一 個或多個處理單元或核心。處理單元可被實現(xiàn)為超線程(HT)技術或用于同 時或基本同時執(zhí)行多個線程或指令的任何其它適當技術。
處理系統(tǒng)還可包括其它硬件組件,且硬件組件可經(jīng)由一個或多個系統(tǒng)總線14或其它通信路徑或介質被通信地耦合。本公開使用術語"總線"來指示 共享(例如,多站)通信路徑、以及點到點路徑、互連環(huán)等。在圖1的實施例
中,處理系統(tǒng)20包括一個或多個易失性或非易失性數(shù)據(jù)存儲設備,諸如RAM 26、 ROM 42、諸如硬盤驅動器之類的大容量存儲設備36和/或其它設備或介 質,諸如軟盤、光存儲、磁帶、閃存、存儲棒、數(shù)字通用盤(DVD)等。為了 本公開的目的,術語"只讀存儲器"和"ROM"可用于一般地指示非易失性存 儲設備,如可擦除可編程ROM (EPROM)、電可擦除可編程ROM (EEPROM)、閃速ROM、閃存等。處理器24使用RAM 26作為主存儲器, 且處理器24經(jīng)由嵌入式存儲器控制器與RAM 26通信。處理器24還可通信地 耦合到附加組件,諸如集成驅動電子設備(IDE)控制器、小型計算機系統(tǒng)接 口 (SCSI)控制器、通用串行總線(USB)控制器、輸入/輸出(I/O)端口 28、 輸入設備、諸如顯示器之類的輸出設備等。處理系統(tǒng)20中的芯片組或I/O集 線器(IOH) 34可用于互連各種硬件組件。IOH 34可包括一個或多個橋和/或 集線器以及其它邏輯和存儲組件。
處理系統(tǒng)20可至少部分地通過來自諸如鍵盤、鼠標等輸入設備的輸入 和或從另一個機器、生物測定反饋或其它輸入源或信號接收的指示來控制。處 理系統(tǒng)20可利用至一個或多個遠程數(shù)據(jù)處理系統(tǒng)90的一個或多個連接,諸如 通過網(wǎng)絡接口控制器(NIC) 40、調制解調器、或其它通信端口或耦合。處理 系統(tǒng)可經(jīng)由物理和/或邏輯網(wǎng)絡92——諸如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、 內聯(lián)網(wǎng)、因特網(wǎng)等一一互連。涉及網(wǎng)絡92的通信可使用各種有線和/或無線短 程或長程載波和協(xié)議,包括射頻(RF)、衛(wèi)星、微波、電氣與電子工程師協(xié)會 (IEEE) 802.11、 802.16、 802.20、藍牙、光、紅外線、電纜、激光等。802.11 協(xié)議還可被稱為無線保真(WiFi)協(xié)議。802.16協(xié)議還可被稱為WiMAX或無 線城域網(wǎng)協(xié)議,且關于這些協(xié)議的信息目前可在 grouper.ieee.org/groups/802/16/published.html獲f導。
在圖1的實施例中,處理器22駐留在擴展模塊300 (例如,適配器卡) 上,該擴展模塊300經(jīng)由外圍組件互連(PCI)快速(PCIe)接口與處理單元 24通信。處理器22被實現(xiàn)為包括多個核心(例如,處理核心31、處理核心33、... 處理核心33n)以及諸如存儲器控制器310、 PCIe控制器330和視頻輸出端口340 (可包括例如數(shù)字-模擬轉換器(DAC))之類的其它組件。擴展模塊300 還包括用于存儲將由處理器22使用的指令和數(shù)據(jù)的RAM 320。處理器22可將 R層320用作主存儲器。處理系統(tǒng)20中的高速緩沖存儲器(例如,核心31中 的高速緩沖存儲器160)也可至少暫時地用作主存儲器。處理器22中的核心可 經(jīng)由存儲器控制器310訪問RAM 320,且該核心可經(jīng)由PCIe控制器330與處理 器24通信。核心可經(jīng)由輸出端口 340將輸出發(fā)送到顯示設備。擴展模塊300 上的各種子系統(tǒng)(例如,核心、RAM等)可通過任何適當?shù)囊粋€或多個通信信 道互連。
在圖1的實施例中,處理核心31包括一個或多個寄存器堆150。寄存
器堆150包括各種向量寄存器(例如,向量寄存器V1、向量寄存器V2.....
向量寄存器Vn)。寄存器堆150還可包括各種其它寄存器——諸如用于保持 對在一個或多個執(zhí)行流或線程中執(zhí)行的當前或下一處理器指令的跟蹤的一個 或多個指令指針(IP)寄存器211——以及其它類型的寄存器。處理核心31還 包括解碼器165和執(zhí)行單元130。解碼器160識別并解碼包括合并的向量轉換 指令的指令集中的指令,以便由執(zhí)行單元130執(zhí)行。
處理系統(tǒng)20中的某些或全部核心可相互并行地執(zhí)行指令。此外,每一 個體核心可執(zhí)行SIMD指令。例如,每個核心可用作寬度為16的向量機,并 行處理高達16個元素。具體地,這些類型的向量操作可由稱為向量處理單元 (VPU)的控制邏輯處理。對于帶有16個以上元素的向量,軟件可將向量分 成各自含有16個元素(或其倍數(shù))的子集,且兩個或更多個子集在兩個或更 多個核心上基本同時執(zhí)行。同樣,核心中的一個或多個可以是超標量的(例如, 能夠執(zhí)行并行/SIMD操作和標量操作)。
在圖1的實施例中,VPU 145的至少一部分駐留在執(zhí)行單元130內。如 以下更詳細解釋的,執(zhí)行單元145還包括轉換單元140,用于將數(shù)據(jù)在適用于 VPU 145的內部格式和由軟件指定的外部格式之間轉換。
其它的處理核心還可包括類似解碼器、執(zhí)行單元、高速緩沖存儲器、寄 存器堆的組件。處理器22和處理器24可包括對于理解本發(fā)明而言并非必需的 附加電路。
在圖1的實施例中,解碼器165用于解碼由處理器核心31接收的指令,而執(zhí)行單元130用于執(zhí)行由處理核心31接收的指令。例如,解碼器165可將 由處理器22接收的機器指令解碼成控制信號和/或微碼進入點。這些控制信號 和/或微碼進入點可從解碼器165轉發(fā)到執(zhí)行單元130。例如,響應于接收 VLoadConWr指令,解碼器165可使執(zhí)行單元130執(zhí)行所要求的數(shù)據(jù)轉換和寄 存器加載操作。響應于接收VLoadConComWr指令,解碼器165可使執(zhí)行單元 130執(zhí)行所要求的數(shù)據(jù)轉換、向量算術和寄存器加載操作。響應于接收 VConStore指令,解碼器165可使執(zhí)行單元130執(zhí)行所要求的轉換和存儲操作。
在本文中可參照諸如指令、函數(shù)、過程、數(shù)據(jù)結構、應用程序、配置設 定等數(shù)據(jù)描述本發(fā)明。當機器訪問數(shù)據(jù)時,機器可通過執(zhí)行任務、定義抽象數(shù) 據(jù)類型、建立低級硬件上下文和/或執(zhí)行其它操作而作出響應,如以下詳細描 述的。可將數(shù)據(jù)存儲在易失性和/或非易失性數(shù)據(jù)存儲中。為了本公開的目的, 術語"程序"覆蓋廣泛的軟件組件和結構,包括應用、驅動器、進程、例程、 方法、模塊和子程序。術語"程序"可用于指示完整的編譯單元(即可獨立編 譯的指令集)、多個編譯單元的集合或編譯單元的一部分。術語"程序"還可 用于指示從諸如翻譯、解釋、編譯、聯(lián)接等處理得到的一個或多個指令的組。 因此,術語"程序"可用于指示在由處理系統(tǒng)執(zhí)行時完成所要求的一個或多個 操作的任何指令集合。
在圖1的實施例中,大容量存儲設備36包含OS 102和至少一個程序 100。處理系統(tǒng)20可將OS 102和程序100復制到RAM 26,然后在處理器24 上執(zhí)行OS 102和程序100。 OS 102和/或程序100可包括一個或多個合并的向 量轉換指令(例如,VLoadConWr、 VLoadConComWr禾口/或VConStore指令)。
或者,當程序100執(zhí)行時,它可使OS102生成一個或多個合并的向量 轉換指令,且處理器24可將合并的向量轉換指令發(fā)送到處理器22。處理器22 可將從處理器24接收的指令存儲在RAM 320中作為程序106,且RAM 320 還可包括在核心中的一個或多個上運行并控制程序106的執(zhí)行的微OS 104。
例如,程序100可以是視頻游戲,且OS102可向程序100提供圖形應 用程序接口 (API),以用于請求關于圖形的各種功能,諸如光線跟蹤、光柵 化等。當程序100調用API時,0S102中的設備驅動器可通過生成將由處理器 22執(zhí)行的合并的向量轉換指令和其它指令來作出響應。處理器24可將這些指
13令發(fā)送給處理器22,以作為程序106存儲,如以上指示的。例如,微OS 104 然后可調度這些指令以在處理核心31上運行。例如,在不同的實施例中,程 序可適用不同種類的函數(shù)或應用,諸如文本處理、物理模擬等。
在一個示例應用中,處理系統(tǒng)20使用處理器22來處理向量操作(例如 圖形渲染工作負載),并且這些操作涉及帶有與被處理器22用于大多數(shù)內部 操作的格式不同的格式的數(shù)據(jù)結構。例如,處理核心31可提供512位的向量, 且VPU 145可對如或者DWORD向量或者QWORD向量那樣的向量進行操作。 DWORD向量是16元素向量,每個元素具有32位。QWORD向量是8元素向 量,每個元素具有64位。因此,VPU145可將以下格式用于向量操作
float32: 32位浮點(或"單精度浮點"),
Float64: 64位浮點(或"雙精度浮點"),
sint32: 32位帶符號整數(shù),以及
uint32: 32位無符號整數(shù)。
具體地,在圖1的實施例中,VPU 145將以下的內部表示之一用于向量的 每一個元素。
float32用于DWORD向量,
sint32用于DWORD向量,
uint32用于DWORD向量,或
float64用于QWORD向量。
然而,軟件可決定使用與這些內部格式不同的格式來在存儲器中編碼向量 數(shù)據(jù)(例如,圖形渲染工作負載)。例如,圖形軟件可使用帶有如下格式的數(shù) 據(jù)結構
floatl6: 16位浮點數(shù);
floatll: ll位浮點數(shù);
floatl0: 10位浮點數(shù);
uintl6:映射到
范圍中的整數(shù)的16位值;
uint8:映射到
范圍中的整數(shù)的8位值;
sintl6:映射到[-32768,32767]范圍中的整數(shù)的16位值;
sint8:映射到[-128, 127]范圍中的整數(shù)的8位值; snorml6:映射到[-l, l]范圍中的浮點數(shù)的16位值;
snorm8:映射到[-l, l]范圍中的浮點數(shù)的8位值;
srgb8:通過伽瑪(gamma)校正函數(shù)(一般實現(xiàn)為査找表)映射到[-l, 1]范圍中的浮點數(shù)的8位值;
unorml6:映射到[O, l]范圍中的浮點數(shù)的16位值;
unorml0:映射到[O, l]范圍中的浮點數(shù)的10位值;
unorm8:映射到[O, l]范圍中的浮點數(shù)的8位值;
unorm2:映射到[O, l]范圍中的浮點數(shù)的2位值;
floatllAllB10C:具有兩個FLOATll值和一個FLOAT10值的32位分
組的壓縮數(shù)據(jù)類型,開始于位于高階位的最后一個;以及
unormlOA10B10C2D:具有三個UNORM10值和一個UNORM2值的 32位分組的壓縮數(shù)據(jù)類型,開始于位于高階位的最后一個。
此外,關于floatllAllB10C,持有不同值的四個不同的比特組可被稱為 字段A、 B、 C和D。類似地,unormlOA10B10C2D中的三個不同的位組可被 稱為字段A、 B禾口C。
常規(guī)的系統(tǒng)可使用float32元素的陣列來處理floatl6數(shù)據(jù)元素的很大的 二維陣列(例如,表示屏幕的一個彩色通道)。然而,float32陣列可占據(jù)floatl6 陣列的兩倍空間。因此,如果float32陣列保持高速緩存駐留,則相當大的比 例的高速緩存可能不可用于其它用途。
相反,在圖1的實施例中,程序106使用合并的向量轉換指令。這些指 令使得高速緩存160中的數(shù)據(jù)能夠保持為較小的格式(例如,floatl6),而以 較大格式由VPU145處理(例如,float32)。如以上所指示的,合并的向量轉 換指令包括VLoadConWr指令、VLoadConComWr指令和VConStore指令。這 些指令使用向量作為源或產生向量作為結果或兩者都有。VPU 145可并行計算 向量的所有元素。
因為VPU 145僅可利用上述的內部格式對向量進行操作,所以可能需 要在處理核心31能夠將向量加載到VPU 145之前將軟件所使用的外部格式轉 換成內部表示之一。例如,如果程序106使用帶有floatl6元素的向量,則 VLoadConWr指令可用于從存儲器讀取floatl6向量數(shù)據(jù),將該數(shù)據(jù)轉換成VPU145支持的內部格式之一 (例如,float32),并將轉換的數(shù)據(jù)加載到向量寄存 器。類似地,可將VConStore指令用于將向量寄存器數(shù)據(jù)從內部表示轉換成外 部表示,然而將該數(shù)據(jù)以外部格式存儲到存儲器中。
類似于VLoadConWr指令,VLoadConComWr指令提供從外部格式轉 換成內部格式,并將內部格式加載到向量寄存器。然而,VLoadConComWr指 令允許向量算術操作與這些操作組合。
圖2是根據(jù)本發(fā)明的示例實施例的示例VLoadConComWr指令170和 相應的執(zhí)行流水線112的框圖。在圖2的實施例中,VLoadConComWr指令170 包括以下部分
操作碼(opcode): vLoadConAddWrF32,
目的地自變量VI,
寄存器源自變量V2,
存儲器源自變量0b0000 (其中前綴0b指示二進制記數(shù)法),以及
格式自變量floatl6。
同樣,流水線112包括以下五個階段
階段120:從存儲器取出指令,
階段122:從存儲器讀取數(shù)據(jù),
階段124:轉換數(shù)據(jù),
階段126:執(zhí)行算術,以及
階段128:將結果加載到向量寄存器。
在一個實施例中,處理核心31可并行執(zhí)行5條流水線,且每條流水線具 有5個階段。處理可在處理核心31中的每個時鐘周期或滴答從各階段進行到 下一個。因此,處理核心31可有效地將電路用于每個階段,例如通過一旦當 前指令從取出階段120移至讀取階段122就取出下一個指令。在其它實施例中, 處理核心可使用更少的流水線或更多的流水線,且流水線可使用更少的階段或 更多的階段。
圖3是在圖1的處理系統(tǒng)中用于處理向量的過程的示例實施例的流程 圖。所示的過程在一組指令——本文中稱為程序106——已被存儲在RAM320 中之后開始,如上文所指出的。在框210,處理核心31從RAM320取出程序
16106中的指令之一。在框220,解碼器165確定哪種指令已被取出。具體地, 解碼器165確定指令是否是合并的向量轉換指令。如果指令不是合并的向量轉 換指令,則處理核心31可使用或多或少的常規(guī)技術來執(zhí)行指令,如框222所 指示的。然而,如果指令是合并的向量轉換指令,則取決于合并的向量轉換指 令的類型,處理可沿著三種不同的路徑之一進行下去,如框230所指示的。
如果指令是VLoadConWr指令,則過程可沿"加載"路徑到達框232, 其示出處理核心31從存儲器讀取外部格式數(shù)據(jù)。如框234所指示的,轉換單 元140然后可至少部分地基于指令中的轉換指示符將數(shù)據(jù)轉換成內部格式。執(zhí) 行單元130然后可將內部格式數(shù)據(jù)保存到指定向量寄存器,如框236所示。
例如,圖4是描述根據(jù)本發(fā)明的示例實施例的示例VLoadConWr指令 50及相關聯(lián)的存儲結構的框圖。如圖所示,VLoadConWr指令50包括以下部 分
opcode 52: VLoadConWrF32,
目的地自變量54: VI,
存儲器源自變量56: 0b0000,以及
格式自變量58: floatl6。
如上文參照圖3的框232、 234和236所解釋的,當處理核心31執(zhí)行 VLoadConWr指令50時,執(zhí)行單元130從存儲器讀取外部格式的數(shù)據(jù),將該 數(shù)據(jù)轉換成內部格式,并將內部格式數(shù)據(jù)寫入向量寄存器。在圖4的實施例中, 執(zhí)行單元130至少部分地基于opcode 52確定用于以下"加載"路徑的指令類 型調用。存儲器源自變量56標識將從其讀取數(shù)據(jù)的存儲位置和存儲區(qū)域。例 如,存儲器源自變量56可指定將從其讀取向量元素的存儲位置或存儲區(qū)域114 的起點。格式自變量58標識存儲器中的數(shù)據(jù)的外部格式。例如,floatl6的格 式自變量可指示存儲器中的每個向量元素占據(jù)16比特,且存儲器源自變量56 標識第一元素的位置。目的地自變量54標識用于接收轉換的數(shù)據(jù)的向量寄存 器。
因此,格式自變量58構成影響如何執(zhí)行VLoadConWr指令50的格式 指示符。此外,部分opcode可用作另一個格式指示符。例如,"F32"后綴還 可影響如何執(zhí)行VLoadConWr指令50。在圖4的實施例中,floatl6和"F32"后綴的格式自變量指示利用floatl6格式從存儲器讀取數(shù)據(jù)并轉換成float32格 式,以便在向量寄存器中內部使用。
部分opcode還可用作廣播指示符,用于從多種不同類型的加載操作中 選擇。例如,處理核心31可指示一對一加載,如圖4所示,其中向量寄存器 中的每一個元素從存儲器中的向量獲得相應的元素。處理核心31還可指示一 對多廣播加載以及四對多廣播加載,如以下參照圖5和6詳細解釋的。當叩code 包括"Broadl"時,執(zhí)行單元B0可執(zhí)行類似圖5所示的那些的操作,而當opcode 包括"Broad4"時,執(zhí)行單元130可執(zhí)行類似圖6所示的那些的操作。
圖5是描述根據(jù)本發(fā)明的示例實施例的一對多VLoadConWr指令60及 相關聯(lián)的存儲結構的框圖。如圖所示,在這種情況下,opcode 62是 "vConBroadlF32",目的地自變量64是V1,存儲器源自變量66是0b0000, 而格式參數(shù)68是srgb8。因此,當執(zhí)行VLoadConWr指令60時,處理核心31 基于源自變量66和格式參數(shù)68,從存儲區(qū)域114的第一個8位位置讀取單個 數(shù)據(jù)項。此外,轉換單元140基于opcode 62中的格式屬性"F32"將該數(shù)據(jù)項 轉換成float32。然后VPU 145基于目的地自變量64將經(jīng)轉換的數(shù)據(jù)的副本保 存到VI的16個向量元件中的每一個。
圖6是描述根據(jù)本發(fā)明的示例實施例的四對多VLoadConWr指令70及 相關聯(lián)的存儲結構的框圖。在圖6中,opcode 72是"vConBroad4F32",目的 地自變量74是V1,存儲器源自變量76是0b0000,而格式參數(shù)78是sintl6。 當執(zhí)行VLoadConWr指令70時,處理核心31基于源自變量76、格式參數(shù)78 和opcode 72中的選擇指示符"Broad4",從存儲區(qū)域114中的前四個16位位 置讀取四個數(shù)據(jù)項。轉換單元140然后基于opcode 72中的格式指示符"F32" 將這些項中的每一個轉換成float32。執(zhí)行單元130然后基于目的地自變量74 和opcode 72中的選擇指示符"Broad4",將經(jīng)轉換的數(shù)據(jù)保存在VI中作為 廣播。g卩,VI的16個元素被視為四組四個連續(xù)的元素,且這些組中的每一個 獲取四個經(jīng)轉換的數(shù)據(jù)項中一個副本。
因此,處理器22指示各種不同的VLoadConWr指令。然而,VLoadConWr 指令中的每一個都是單個機器指令,該指令使處理核心31從存儲器讀取數(shù)據(jù)、 將該數(shù)據(jù)轉換成另一個格式并將經(jīng)轉換的數(shù)據(jù)加載到向量寄存器。在一個實施例中,VLoadConWr支持以下數(shù)據(jù)格式轉換
floatl6至float32,
srgb8至float32,
uint8至float32,
sint8至float32,
unorm8至float32,
snorm8至float32,
uintl6至float32,
sintl6至float32,
unorml6至float32,
snorml6至float32,
uint8至uint32,
sint8至sint32,
uintl6至uint32,
sintl6至sint32,
unormlOA10B10C2D字段A (unorml0A)至float32,
unormlOA10B10C2D字段B (unorml0B)至float32,
unormlOA10B10C2D字段C (unorml0C)至float32,
unormlOA10B10C2D字段D (unorm2D)至float32,
floatllAllB10C字段A (floatl 1A)至float32,
floatl 1A1 IB 10C字段B (floatlIB)至float32,以及
floatl 1A1 IB 10C字段C (floatlOC)至float32。 在可選實施例中可支持其它數(shù)據(jù)格式轉換。
再次參照圖3,當執(zhí)行VLoadConComWr指令和VConStore指令時處 理核心31可使用不同的路徑。例如,當處理核心31解碼VLoadConComWr 指令時,圖3的過程可沿"數(shù)學"路徑通過框230到框240和242,與框232 和234相類似,框240和242描述了執(zhí)行單元130從存儲器讀取外部格式的數(shù) 據(jù)并將該數(shù)據(jù)轉換成內部格式。然而,VLoadConComWr指令的路徑還包括待 執(zhí)行的向量算術操作,如框244所示。向量算術操作可由處理核心31中的向
19量算術邏輯單元(ALU)執(zhí)行。因此,向量算術操作還可被稱為向量ALU操 作。這種操作還可被稱為向量數(shù)學。然后可將向量數(shù)學的結果加載到目的地向 量寄存器,如框246所描述的。
例如,當執(zhí)行VLoadConComWr指令時,處理核心31可從存儲器讀取 外部格式的向量。處理核心31還可將數(shù)據(jù)轉換成內部格式。向量ALU操作可 使用經(jīng)轉換的數(shù)據(jù)和可能的另一向量寄存器源來產生向量寄存器結果。
圖7是描述根據(jù)本發(fā)明的示例實施例的示例VLoadConComWr指令170 及相關聯(lián)的存儲結構的框圖。在圖7中,opcode 172是"vConAddF32",目 的地自變量174是V1,向量操作數(shù)自變量176是V2,存儲器源自變量178是 0b0100,而格式參數(shù)180是floatl6。當執(zhí)行VLoadConComWr指令170時,執(zhí) 行單元130可基于存儲器源自變量178和格式參數(shù)180,從在位置0b0100開始 的存儲區(qū)域115讀取floatl6格式的十六個向量元素。轉換單元140然后可基 于格式參數(shù)180和opcode中的格式指示符"F32"將這些元素中的每一個轉換 成float32。執(zhí)行單元130然后可基于opcode中的算術指示符"Add"和向量操 作數(shù)自變量176,利用來自存儲器的經(jīng)轉換的數(shù)據(jù)和向量寄存器V2中的數(shù)據(jù), 使用向量ALU執(zhí)行向量加法。執(zhí)行單元130然后可基于目的地參數(shù)174將ALU 結果寫入向量寄存器V1。
此外,再次參照圖3,處理核心31還支持用于執(zhí)行VConStore指令的 "存儲"路徑。例如,如框250所示,當執(zhí)行VConStore指令時,處理核心31 可將向量寄存器中的數(shù)據(jù)從內部格式轉換成外部格式。如框252所示,處理核 心31然后可將經(jīng)轉換的數(shù)據(jù)存儲在存儲器中。
圖8是描述根據(jù)本發(fā)明的示例實施例的示例VConStore指令80及相關 聯(lián)的存儲結構的框圖。在圖8中,encode 82是"vCon4StoreF16",目的地自 變量84是0b1000,源自變量86是VI,而格式參數(shù)88是float32。 opcode中 的"4"可用作選擇指示符,用于選擇將存儲在存儲器中的源向量的子集。例 如,opcode "vCon4StoreF16"可指示源寄存器中的前四個元素將被轉換并存儲 在存儲器中。opcode "vConlStoreF16"可指示僅源寄存器中的第一個元素將被 轉換并存儲在存儲器中。opcode "vConStoreF16" ( "Con"禾B "Store"之間 沒有數(shù)字)可指示源寄存器中的所有元素將被轉換并存儲在存儲器中。當執(zhí)行VConStore指令80時,轉換單元140可基于格式參數(shù)88、opcode 中的格式指示符"F16"和opcode中的選擇指示符"4",將所選元素從float 32 轉換成floatl6。執(zhí)行單元130然后可基于目的地參數(shù)84,將經(jīng)轉換的數(shù)據(jù)存 儲在以位置0b1000開始的存儲區(qū)域116中。
在一個實施例中,處理核心31支持VConStore指令,用于執(zhí)行以下類 型的格式轉換
float32至floatl6,
float32至floatl6 (舍入為0),
float32至uint8,
float32至sint8,
float32至unorm8,
float32至snorm8,
float32至uintl6,
float32至sintl6,
float3 2至unorm 16 ,
float32至snorml6,
uint32至uint8,
sint32至sint8,
uint32至uintl6,以及
sint32至sintl6。 可選實施例可支持其它類型的轉換。
正如已經(jīng)描述的,當執(zhí)行VLoadConWr指令時,處理核心可(a)從存 儲器加載外部格式的數(shù)據(jù),(b)將數(shù)據(jù)從外部格式轉換成內部格式,以及(c) 以可選擇的廣播(例如, 一對六、四對六等)將數(shù)據(jù)加載到向量寄存器。因此, VLoadConWr可用于將轉換和加載操作以及廣播操作組合在單個指令中。
當執(zhí)行VLoadConComWr指令時,處理核心可(a)從存儲器加載外部 格式的數(shù)據(jù),(b)將數(shù)據(jù)從外部格式轉換成內部格式,(c)執(zhí)行向量ALU 操作,以及(c)將結果加載到向量寄存器。例如,流過流水線的單個指令可 進行加載操作,以從存儲器讀取到臨時向量寄存器,從floatl6轉換至float32格式,將經(jīng)轉換的值與第二向量寄存器相乘,并將結果保存在第三向量寄存器
中。在另一個實施例中,VLoadConComWr指令還可在進行向量算術之前進行 廣播。然而,這一實施例可能需要較長的流水線。
當執(zhí)行VConStore指令時,處理核心可(a)任選地選擇用于存儲的向 量的子集,(b)從內部格式轉換成外部格式,以及(c)將經(jīng)轉換的數(shù)據(jù)存儲 到存儲器。
本文描述的操作可使得程序能夠使用32位或64位整數(shù)或浮點格式進行 內部向量操作,同時數(shù)據(jù)仍被壓縮成較小的數(shù)據(jù)類型,用于與存儲器相互作用, 且除諸如加載和存儲之類的操作外程序不包括用于處理轉換的額外指令。這些 操作可由單個指令觸發(fā),該單個指令提供與諸如存儲、加載和/或向量算術組合 的程序設計員可選擇的轉換。
按照本文所描述和示出的原理和示例實施例,將意識到可在結構和細節(jié) 上對所示實施例進行修改而不背離這些原理。例如,可選實施例可涉及以更多 或更少處理器為特征的處理系統(tǒng),且每一個處理器可包括任何適當數(shù)量的核 心。同樣,可選實施例可使用除PCIe以外的協(xié)議或總線。
在某些實施例中,處理系統(tǒng)中的一個或多個設備可利用諸如可編程或不 可編程邏輯設備或陣列、專用集成電路(ASIC)、嵌入式處理器、智能卡等組 件實現(xiàn)為嵌入式控制器。例如,在可選實施例中,主處理器可駐留在帶有用作 圖形協(xié)處理器或圖形處理單元(GPU)的輔助處理器或協(xié)處理器的主板上。主 處理器和輔助處理器可利用任何適當類型的總線或協(xié)議通信。主處理器、GPU 或兩者能夠執(zhí)行諸如本文所述的那些指令。或者,處理器24和擴展模塊300 的組件中的某些可被集成到單個CPU封裝或集成電路。較佳地,至少一個處 理核心能夠執(zhí)行至少一個合并的向量轉換指令。
同樣,以上的描述解釋指令可包括各種不同的指示符,用于標識待處理 的數(shù)據(jù)和待執(zhí)行的操作的各種特性。例如,opcode (或其部分)和指令參數(shù)或 自變量被描述為格式指示符、選擇指示符、源自變量等。在其它實施例中,可 按本文所述特定方法之外的方式實現(xiàn)指示符。
同樣,上述的討論集中在特定實施例,但預期了其它配置。具體地,即 使在本文中使用了諸如"在一個實施例中"、"在另一個實施例中"等表達,
22這些短語也表示一般參照可能的實施例,且無意將本發(fā)明限于特定實施例配 置。如本文所使用的,這些術語可參照能夠組合成其它實施例的相同或不同的 實施例。
類似地,雖然關于以特定順序執(zhí)行的特定操作描述了示例過程,但可將 眾多的修改應用于這些過程,以導出本發(fā)明的眾多可選實施例。例如,可選實 施例可包括使用比全部公開的操作少的過程、利用附加操作的過程、利用以 不同順序的相同操作的過程、以及其中本文公開的各個操作被組合、細分或以 其它方式改變的過程。
本發(fā)明的可選實施例還包括用于執(zhí)行本發(fā)明的操作的機器可訪問介質 編碼指令。這種實施例還可被稱為程序產品。這種機器可訪問介質可包括而不 限于諸如軟盤、硬盤、CD-ROM、 ROM和RAM的存儲介質;以及其它由機 器或設備制造或形成的制品的其它可檢測配置。還可將指令用于分布式環(huán)境 中,且可本地和/或遠程地存儲該指令用于由單處理器或多處理器機器訪問。
應該理解,本文描述的硬件和軟件組件表示適度自備的功能元件,以使 得每一個都可基本獨立于其它而被設計、配置或更新。在不同的實施例中,用 于提供本文所述和示出的功能的控制邏輯可被實現(xiàn)為硬件、軟件或硬件和軟件 的組合。例如,處理器中的執(zhí)行邏輯可包括用于執(zhí)行取出、解碼和執(zhí)行機器指 令所需的操作的電路和微代碼。
正如本文所使用的,術語"處理系統(tǒng)"和"數(shù)據(jù)處理系統(tǒng)"旨在廣泛地 包括單個機器或多個共同運行的通信耦合的機器或設備的系統(tǒng)。處理系統(tǒng)的例
子包括但不限于分布式計算系統(tǒng)、超級計算機、高性能計算系統(tǒng)、計算群、大 型計算機、迷你計算機、客戶機-服務器系統(tǒng)、個人計算機、工作站、服務器、 便攜計算機、膝上型計算機、平板、電話、個人數(shù)字助理(PDA)、手持設備、 諸如音頻和/或視頻設備的娛樂設備、用于處理或發(fā)射信息的其它平臺或設備。 鑒于可從本文描述的示例實施例容易地導出的廣泛的有用置換,該詳細 描述旨在是僅為說明性的,而不應被理解為限制本發(fā)明的范圍。因此,本發(fā)明 要求的是落在所附權利要求的范圍和精神內的所有實現(xiàn)以及這些實現(xiàn)的所有 等價技術方案。
權利要求
1. 一種用于執(zhí)行組合了數(shù)據(jù)格式轉換與至少一個向量操作的機器指令的處理器,所述處理器包括控制邏輯,能夠執(zhí)行包括具有格式轉換指示符和向量寄存器指示符的向量-加載-轉換-和寫入指令的處理器指令;其中,響應于所述向量-加載-轉換-和寫入指令,所述控制邏輯能夠至少部分地基于所述格式轉換指示符,將數(shù)據(jù)從第一格式轉換成第二格式;以及在將所述數(shù)據(jù)轉換成所述第二格式后,將所述第二格式的所述數(shù)據(jù)保存到由所述向量寄存器指示符標識的向量寄存器的多個元素。
2. 如權利要求1所述的處理器,其特征在于,所述控制邏輯還能夠執(zhí)行具有格式轉換指示符和向量寄存器指示符的向量-加載-轉換-計算-和寫入指令,其中響應于所述向量-加載-轉換-計算-和寫入指令,所述控制邏輯能夠 至少部分地基于所述格式轉換指示符,將數(shù)據(jù)從所述第一格式轉換成所 述第二格式;至少部分地基于所述第二格式的數(shù)據(jù),執(zhí)行向量算術操作;以及 將所述向量算術操作的結果保存到由所述向量寄存器指示符標識的所 述向量寄存器的多個元素。
3. 如權利要求2所述的處理器,其特征在于,所述控制邏輯還能夠執(zhí)行具有格式轉換指示符和存儲位置指示符的向量-轉換-和存儲指令,其中 響應于所述向量-轉換-和存儲指令,所述控制邏輯能夠 將來自向量寄存器元素的數(shù)據(jù)從所述第一格式轉換成所述第二格式;以及將所述第二格式的所述數(shù)據(jù)保存到與所述存儲位置指示符相對應的存 儲位置。
4. 如權利要求1所述的處理器,其特征在于 當所述向量-加載-轉換-和寫入指令包括存儲位置指示符時,所述處理器2能夠在將數(shù)據(jù)轉換成所述第二格式并將所述第二格式的所述數(shù)據(jù)保存到所述 向量寄存器之前,從與所述存儲位置指示符相對應的存儲位置讀取所述第一格 式的所述數(shù)據(jù)。
5. 如權利要求1所述的處理器,其特征在于,所述將數(shù)據(jù)從第一格式轉換 成第二格式的操作包括將占據(jù)小于32位或大于32位的數(shù)據(jù)項轉換成占據(jù)32位的格式。
6. —種用于執(zhí)行組合了數(shù)據(jù)格式轉換與至少一個向量操作的機器指令的處理器,所述處理器包括控制邏輯,能夠執(zhí)行包括具有格式轉換指示符和向量寄存器指示符的向 量-加載-轉換-計算-和寫入指令的處理器指令;其中響應于所述向量-加載-轉換-計算-和寫入指令,所述控制邏輯能夠 至少部分地基于所述格式轉換指示符,將數(shù)據(jù)從第一格式轉換成第二格式;至少部分地基于所述第二格式的數(shù)據(jù),執(zhí)行向量算術操作;以及 將所述向量算術操作的結果保存到由所述向量寄存器指示符標識的向 量寄存器的多個元素。
7. 如權利要求6所述的處理器,其特征在于 當所述向量-加載-轉換-計算-和寫入指令包括存儲位置指示符時,所述處理器能夠在將數(shù)據(jù)轉換成所述第二格式并執(zhí)行所述向量算術操作之前,從與 所述存儲位置指示符相對應的存儲位置讀取所述第一格式的所述數(shù)據(jù)。
8. —種用于執(zhí)行組合了數(shù)據(jù)格式轉換與至少一個向量操作的機器指令的處理器,所述處理器包括控制邏輯,能夠執(zhí)行包括具有格式轉換指示符和存儲位置指示符的向量-轉換-和存儲指令的處理器指令;其中,響應于所述向量-轉換-和存儲指令,所述控制邏輯能夠將來自向量寄存器的至少一個元素的數(shù)據(jù)從第一格式轉換成第二格式;以及在將所述數(shù)據(jù)轉換成所述第二格式之后,將所述第二格式的數(shù)據(jù)保存到 與所述存儲位置指示符相對應的至少一個存儲位置。
9. 如權利要求8所述的處理器,其特征在于 當所述向量-轉換-和存儲指令具有用于標識包含所述第一格式的數(shù)據(jù)的所述向量寄存器的向量寄存器指示符時,所述控制邏輯能夠執(zhí)行所述向量-轉換-和存儲指令。
10. —種具有用于組合數(shù)據(jù)格式轉換與寫入操作的機器指令存儲于其 中的機器可訪問介質,其中所述機器指令包括格式轉換指示符和向量寄存器指示符,以及 所述機器指令在由處理器執(zhí)行時導致所述處理器至少部分地基于所述格式轉換指示符,將數(shù)據(jù)從第一格式轉換成第 二格式;以及在將所述數(shù)據(jù)轉換成所述第二格式后,將所述第二格式的所述數(shù)據(jù) 保存到由所述向量寄存器指示符標識的向量寄存器的多個元素。
11. 如權利要求IO所述的機器可訪問介質,其特征在于 所述向量寄存器指示符包括第一指令自變量;以及 所述格式轉換指示符包括來自包含以下的組的至少一個指示符 第二指令自變量;以及至少部分指令操作碼。
12. 如權利要求10所述的機器可訪問介質,其特征在于,所述機器指令還包括用于標識與所述第一格式的數(shù)據(jù)相關聯(lián)的存儲位置的源自變量。
13. —種具有用于組合數(shù)據(jù)格式轉換與向量算術和寫入操作的機器指令存儲于其中的機器可訪問介質,其中所述機器指令包括格式轉換指示符和向量寄存器指示符,以及 所述機器指令在由處理器執(zhí)行時導致所述處理器 至少部分地基于所述格式轉換指示符,將數(shù)據(jù)從第一格式轉換成第二格式;至少部分地基于所述第二格式的數(shù)據(jù),執(zhí)行向量算術操作;以及 在執(zhí)行所述向量算術操作之后,將所述向量算術操作的結果保存到 由所述向量寄存器指示符標識的向量寄存器的多個元素。
14. 如權利要求13所述的機器可訪問介質,其特征在于 所述向量寄存器指示符包括第一指令自變量;以及 所述格式轉換指示符包括來自包含以下的組的至少一個指示符 第二指令自變量;以及至少部分指令操作碼。
15. 如權利要求13所述的機器可訪問介質,其特征在于,所述機器指 令還包括用于標識與所述第一格式的數(shù)據(jù)相關聯(lián)的存儲位置的源自變量。
16. —種具有用于組合數(shù)據(jù)格式轉換與存儲操作的機器指令存儲于其中的機器可訪問介質,其中所述機器指令包括格式轉換指示符和存儲位置指示符,以及所述機器指令在由處理器執(zhí)行時導致所述處理器至少部分地基于所述格式轉換指示符,將來自向量寄存器的至少一個元素的數(shù)據(jù)從第一格式轉換成第二格式;以及在轉換所述數(shù)據(jù)之后,將所述第二格式的數(shù)據(jù)保存到與所述存儲位 置指示符相對應的至少一個存儲位置。
17. 如權利要求16所述的機器可訪問介質,其特征在于,所述格式轉 換指示符包括來自包含以下的組的至少一個指示符指令自變量;以及 至少部分指令操作碼。
18. 如權利要求16所述的機器可訪問介質,其特征在于,所述機器指 令還包括用于標識所述向量寄存器的源自變量。
19. 一種用于處理向量指令的方法,所述方法包括取出向量-加載-轉換-和寫入處理器指令,所述向量-加載-轉換-和寫入處理器指令具有格式轉換指示符和向量寄存器指示符;以及通過執(zhí)行以下操作來執(zhí)行所述向量-加載-轉換-和寫入處理器指令至少部分地基于格式轉換指示符,將數(shù)據(jù)從第一格式轉換成第二格式;以及在將所述數(shù)據(jù)轉換成所述第二格式后,將所述第二格式的所述數(shù)據(jù)保存到由所述向量寄存器指示符標識的向量寄存器的多個元素。
20. 如權利要求19所述的方法,其特征在于所述第一格式的數(shù)據(jù)包括占據(jù)預定位數(shù)的數(shù)據(jù)項;以及 所述將數(shù)據(jù)從第一格式轉換成第二格式的操作包括生成占據(jù)與所述預 定位數(shù)不同的位數(shù)的新數(shù)據(jù)項。
21. —種用于處理向量指令的方法,所述方法包括取出向量-加載-轉換-計算-和寫入處理器指令,所述向量-加載-轉換-計算-和寫入處理器指令具有格式轉換指示符和向量寄存器指示符;通過執(zhí)行以下操作來執(zhí)行所述向量-加載-轉換-計算-和寫入處理器指令至少部分地基于所述格式轉換指示符,將數(shù)據(jù)從第一格式轉換成第二格式;至少部分地基于所述第二格式的數(shù)據(jù),執(zhí)行向量算術操作;以及 將所述向量算術操作的結果保存到由所述向量寄存器指示符標識 的向量寄存器的多個元素。
22. 如權利要求21所述的方法,其特征在于 所述第一格式的數(shù)據(jù)包括占據(jù)預定位數(shù)的數(shù)據(jù)項;以及 所述將數(shù)據(jù)從第一格式轉換成第二格式的操作包括生成占據(jù)與所述預定位數(shù)不同的位數(shù)的新數(shù)據(jù)項。
23. —種用于處理向量指令的方法,所述方法包括 取出向量-轉換-和存儲處理器指令,所述向量-轉換-和存儲處理器指令具有格式轉換指示符和存儲位置指示符;通過執(zhí)行以下操作來執(zhí)行所述向量-轉換-和存儲處理器指令將來自向量寄存器的至少一個元素的數(shù)據(jù)從第一格式轉換成第二格式;以及將所述第二格式的所述數(shù)據(jù)保存到與所述存儲位置指示符相對應 的至少一個存儲位置。
24. 如權利要求23所述的方法,其特征在于 所述向量寄存器中的數(shù)據(jù)包括各自占據(jù)預定位數(shù)的多個數(shù)據(jù)項;以及 所述將數(shù)據(jù)從第一格式轉換成第二格式的操作包括生成占據(jù)與所述預定位數(shù)不同的位數(shù)的新數(shù)據(jù)項。
25. —種計算機系統(tǒng),包括 用于存儲向量-加載-轉換-和寫入指令的存儲器;以及處理器,它耦合到所述存儲器,所述處理器包括能夠解碼所述向量-加 載-轉換-和寫入指令的控制邏輯。
26. 如權利要求25所述的計算機系統(tǒng),其特征在于 所述處理器包括一個或多個向量寄存器,每一個向量寄存器都能夠保持多個向量元素;以及所述向量-加載-轉換-和寫入指令包括用于標識期望數(shù)據(jù)格式轉換的格式轉換指示符;以及 用于在所述一個或多個向量寄存器中,將期望向量寄存器標識為所述向量-加載-轉換-和寫入指令的結果的目的地的向量寄存器指示符。
27. —種計算機系統(tǒng),包括用于存儲向量-加載-轉換-計算-和寫入指令的存儲器;以及 處理器,它耦合到所述存儲器,所述處理器包括能夠解碼所述向量-加 載-轉換-和寫入指令的控制邏輯。
28. 如權利要求27所述的計算機系統(tǒng),其特征在于 所述處理器包括一個或多個向量寄存器,每一個向量寄存器都能夠保持多個向量元素;以及所述向量-加載-轉換-計算-和寫入指令包括用于標識期望數(shù)據(jù)格式轉換的格式轉換指示符;以及 用于在所述一個或多個向量寄存器中,將期望向量寄存器標識為所述向量-加載-轉換-計算-和寫入指令的結果的目的地的向量寄存器指示符。
29. —種計算機系統(tǒng),包括用于存儲向量-轉換-和存儲指令的存儲器;以及處理器,它耦合到所述存儲器,所述處理器包括能夠解碼所述向量-轉 換-和存儲指令的控制邏輯。
30.如權利要求29所述的計算機系統(tǒng),其特征在于所述處理器包括一個或多個向量寄存器,每一個向量寄存器都能夠保持 多個向量元素;以及所述向量-轉換-和存儲指令包括用于標識期望數(shù)據(jù)格式轉換的格式轉換指示符;以及 用于將期望存儲位置標識為所述向量-轉換-和存儲指令的結果的目 的地的存儲位置指示符。
全文摘要
本發(fā)明涉及用于轉換向量數(shù)據(jù)的方法、裝置和指令,提供了一種計算機處理器,包括用于解碼機器指令的解碼器和用于執(zhí)行這些指令的執(zhí)行單元。該解碼器和執(zhí)行單元能夠解碼并執(zhí)行包括一個或多個格式轉換指示符的向量指令。例如,處理器能夠執(zhí)行向量-加載-轉換-和寫入(VLoadConWr)指令,它用于將來自存儲器的數(shù)據(jù)加載到向量寄存器。VLoadConWr指令可包括格式轉換指示符,以指示來自存儲器的數(shù)據(jù)應在該數(shù)據(jù)被加載到向量寄存器之前從第一格式轉換成第二格式。描述并要求保護其他實施例。
文檔編號G06F9/30GK101488083SQ200810190320
公開日2009年7月22日 申請日期2008年12月25日 優(yōu)先權日2007年12月26日
發(fā)明者A·羅希爾, D·M·卡爾曼, E·斯普林格, R·D·凱文 申請人:英特爾公司