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

用于融合加法?加法指令的裝置和方法與流程

文檔序號:11635127閱讀:226來源:國知局
用于融合加法?加法指令的裝置和方法與流程

本公開涉及微處理器,并且更具體地涉及用于對微處理器中的數據元素進行操作的指令。



背景技術:

為了提高多媒體應用以及具有類似特征的其他應用的效率,在微處理器系統(tǒng)中已經實現了單指令多數據(singleinstruction,multipledata,simd)架構,以使得一條指令能夠并行地在若干個操作數上操作。特別地,simd架構利用將許多數據元素緊縮在一個寄存器或連續(xù)的存儲器位置中。利用并行硬件執(zhí)行,通過一條指令對多個分開的數據元素執(zhí)行多個操作。這通常產生顯著的性能優(yōu)點,但是以增加的邏輯和因此更大的功耗為代價。

附圖說明

以附圖部分中的這些圖通過舉例的方式而非通過限制性的方式展示了本發(fā)明,在附圖中類似的參考標記指示相似的元件。

圖1a是框圖,展示了根據本發(fā)明的實施例的示例性有序獲取、解碼、引退流水線和示例性寄存器重命名、亂序發(fā)布/執(zhí)行流水線兩者。

圖1b是框圖,展示了根據本發(fā)明的實施例的有序獲取、解碼、引退核的示例性實施例以有待包含在處理器中的示例性寄存器重命名、亂序發(fā)布/執(zhí)行架構核的示例性實施例兩者。

圖2是根據本發(fā)明的實施例的具有集成存儲器控制器和圖形的單核處理器和多核處理器的框圖;

圖3展示了根據本發(fā)明的一個實施例的系統(tǒng)的框圖;

圖4展示了根據本發(fā)明的實施例的第二系統(tǒng)的框圖;

圖5展示了根據本發(fā)明的實施例的第三系統(tǒng)的框圖;

圖6展示了根據本發(fā)明的實施例的片上系統(tǒng)(soc)的框圖;

圖7展示了對照根據本發(fā)明的實施例的用于將源指令集中的二進制指令轉換為目標指令集中的二進制指令的軟件指令轉換器的使用的框圖;

圖8a和圖8b是框圖,展示了根據本發(fā)明的實施例的通用向量友好指令格式及其指令模板;

圖9a至圖9d是框圖,展示了根據本發(fā)明的實施例的示例性專用向量友好指令格式;并且

圖10是根據本發(fā)明一個實施例的寄存器架構的框圖;

圖11a是根據本發(fā)明的實施例的單個處理器核連同其與裸片上互連網絡的連接以及其二級(l2)高速緩存的本地子集的框圖;并且

圖11b是根據本發(fā)明的實施例的圖14a中的處理器核的一部分的放大視圖。

圖12至圖15是流程圖,展示了根據本發(fā)明的實施例的融合加法-加法操作。

圖16是根據本發(fā)明的實施例的融合加法-加法操作的方法的流程圖。

圖17是流程圖,展示了用于在處理設備中實現融合加法-加法操作的示例性數據流。

圖18是流程圖,展示了用于在處理設備中實現融合加法-加法操作的第一替代示例性數據流。

圖19是流程圖,展示了用于在處理設備中實現融合加法-加法操作的第二替代示例性數據流。

具體實施方式

當用simd數據工作時,存在減少總指令計數并提高功率效率(特別是對于小核)會是有益的情況。特別地,實現浮點數據類型的融合加法-加法操作的指令允許減少總指令數量并減少工作負載功率要求。

在下面的描述中,闡述了許多具體細節(jié)。然而,應當理解,可以在沒有這些具體細節(jié)的情況下實踐本發(fā)明的實施例。在其他情況下,未詳細示出公知的電路、結構和技術,以避免模糊對本說明書的理解。然而,本領域技術人員將理解的是,可以在沒有這些具體細節(jié)的情況下實踐本發(fā)明。通過所包含的描述,本領域普通技術人員將能夠實現適當的功能而無需過多的實驗。

在說明書中提到“一個實施例”、“實施例”、“示例實施例”等表明所描述的實施例可以包括特定特征、結構、或特性,但每一個實施例可能不一定包括所述特定特征、結構、或特性。而且,此類短語不一定指相同的實施例。進一步地,當結合實施例描述具體特征、結構或特性時,應認為,無論是否明確描述,結合其他實施例來實現這種特征、結構或特性是在本領域的普通技術人員的知識范圍內。

在以下說明書和權利要求書中,可以使用術語“耦合”和“連接”及其衍生詞。應當理解,這些術語并不意為彼此的同義詞。“耦合”用于指示彼此協作或相互作用的彼此之間可能或可能不直接物理或電接觸的兩個或更多個元件?!斑B接”用于指示彼此耦合的兩個或更多個元件之間的通信的建立。

指令集

指令集(instructionset)或指令集架構(instructionsetarchitecture,isa)是與編程有關的計算機架構的一部分,并且可以包括本機數據類型、指令、寄存器架構、尋址模式、存儲器架構、中斷和異常處置、以及外部輸入和輸出(i/o)。術語指令在本文中一般指代宏指令-即提供給處理器(或將指令翻譯(例如,使用靜態(tài)二進制翻譯,包括動態(tài)編譯的動態(tài)二進制翻譯)、變形、仿真或以其他方式轉換成待由處理器處理的一個或多個其他指令的指令轉換器)以便執(zhí)行的指令,與作為處理器的解碼器解碼宏指令的結果的微指令或微操作(micro-op)相反。

isa與微架構是不同在于,所述微架構是實現指令集的處理器的內部設計。具有不同微架構的處理器可以共享共同的指令集。例如,來自奔騰4(pentium4)處理器、coretm處理器、以及來自加利福尼亞州桑尼威爾(sunnyvale)的超微半導體有限公司(advancedmicrodevices,inc.)的諸多處理器執(zhí)行幾乎相同版本的x86指令集(在更新的版本中已加入了一些擴展),但具有不同的內部設計。例如,isa的相同寄存器架構在不同的微架構中可以使用已知的技術以不同的方式來實現,包括專用物理寄存器、使用寄存器重命名機制(例如,使用寄存器別名表(rat)、重排序緩沖器(rob)以及引退寄存器堆;使用多個映射和寄存器池)等的一個或多個動態(tài)分配物理寄存器。除非另有說明,否則短語寄存器架構、寄存器堆和寄存器在本文中用于指代軟件/編程器可見的寄存器以及指令指定寄存器的方式。在需要特殊性的情況下,形容詞邏輯的(logical)、架構的(architectural)或軟件可見的(softwarevisible)將用于指示寄存器架構中的寄存器/堆,而不同的形容詞將用于指定給定微架構中的寄存器(例如物理寄存器、重排序緩沖器、引退寄存器、寄存器池)。

指令集包括一種或多種指令格式。給定指令格式限定各個字段(位的數目、位的位置)以便在其他事物中指定有待執(zhí)行的操作(操作數)以及對其有待執(zhí)行所述操作的所述(多個)操作數。通過指令模板(或子格式)的定義,一些指令格式被進一步細分。例如,給定指令格式的指令模板可以被定義為具有指令格式的字段的不同子集(所包含的字段通常是按相同的次序,但是至少有一些具有不同的位位置,因為包含較少的字段)和/或被定義為具有不同解釋的給定字段。因此,使用給定的指令格式(并且如果定義了就以所述指令格式的指令模板中的給定指令格式)來表示isa的每條指令,并且所述指令包括用于指定操作和操作數的多個字段。例如,示例性add指令具有特定的操作數和指令格式,所述指令格式包括用于指定操作數的操作碼字段以及用于選擇操作數(源1/目的地和源2)的操作數字段;并且指令流中此add指令的出現將在選擇特定操作數的操作數字段中具有特定內容。

科學、財務、自動向量化通用目的、rms(識別、挖掘和綜合)以及視覺和多媒體應用(例如,2d/3d圖形、圖像處理、視頻壓縮/解壓縮、語音識別算法和音頻處理)通常需要對大量數據項執(zhí)行相同的操作(稱為“數據并行性”)。單指令多數據(singleinstructionmultipledata,simd)指代使處理器對多個數據項執(zhí)行操作的指令類型。simd技術特別適合于可以在邏輯上將寄存器中的位劃分成多個固定大小的數據元素的處理器,每個數據元素代表單獨的值。例如,256位寄存器中的位可以被指定為待作為四個單獨64位緊縮數據元素(四倍字長(q)大小的數據元素)、八個單獨32位緊縮數據元素(雙倍字長(d)大小的數據元素)、十六個單獨16位緊縮數據元素(字長(w)大小的數據元素)、或三十二個單獨8位數據元素(字節(jié)(b)大小的數據元素)進行操作的源操作數。這種數據類型稱為緊縮數據類型或向量數據類型,并且這種數據類型的操作數稱為緊縮數據操作數或向量操作數。換句話說,緊縮數據項或向量指代緊縮數據元素的序列,并且緊縮數據操作數或向量操作數是simd指令(也稱為緊縮數據指令或向量指令)的源或目的地操作數。

作為示例,一種類型的simd指令指定待以豎直方式對兩個源向量操作數執(zhí)行的單個向量操作,以生成相同大小的目的地向量操作數(也稱為結果向量操作數),具有相同數量的數據元素,并且具有相同的數據元素順序。源向量操作數中的數據元素稱為源數據元素,而目的地向量操作數中的數據元素稱為目的地或結果數據元素。這些源向量操作數具有相同的大小,并且包含相同寬度的數據元素,并且因此它們包含相同數量的數據元素。所述兩個源向量操作數的相同位位置中的源數據元素形成數據元素對(也稱為對應的數據元素;即每個源操作數的數據元素位置0中的數據元素對應,每個源操作數的數據元素位置1中的數據元素對應等)。對這些源數據元素對中的每一者分開地執(zhí)行由所述simd指令指定的操作,以生成匹配數量的結果數據元素,并且因此每對源數據元素具有對應的結果數據元素。由于操作是豎直的,并且由于結果向量操作數大小相同、具有相同數量的數據元素,并且結果數據元素以與源向量操作數相同的數據元素順序存儲,所以結果數據元素位于結果向量操作數的與源矢量操作數中的對應的源數據元素對相同的位位置中。除了這種示例性類型的simd指令之外,還存在各種其他類型的simd指令(例如,僅具有一個源向量操作數或具有以水平方式操作的多于兩個的源向量操作數、生成不同大小的結果向量操作、具有不同大小的數據元素、和/或具有不同數據元素順序的simd指令)。應當理解的是,術語目的地向量操作數(或目的地操作數)被定義為執(zhí)行由指令指定的操作(包括將所述目的地操作數存儲在位置(其為寄存器或由所述指令指定的存儲器地址))的直接結果,以使得它可以作為源操作數被另一指令(通過所述另一指令指定相同位置)訪問。

諸如具有包括x86、mmxtm、流式simd擴展(sse)、sse2、sse3、sse4.1和sse4.2指令的指令集的coretm處理器所采用的simd技術已經使應用性能能夠得到顯著改善。已經發(fā)布和/或公布了引用高級向量擴展(avx)(avx1和avx2)以及使用向量擴展(vex)編碼方案的一組附加simd擴展(例如,參見64和ia-32架構軟件開發(fā)人員手冊,2011年10月;以及參見高級向量擴展編程參考,2011年6月)。

圖1a是框圖,展示了根據本發(fā)明的實施例的示例性有序獲取、解碼、引退流水線和示例性寄存器重命名、亂序發(fā)布/執(zhí)行流水線兩者。圖1b是框圖,展示了根據本發(fā)明的實施例的有序獲取、解碼、引退核的示例性實施例以有待包含在處理器中的示例性寄存器重命名、亂序發(fā)布/執(zhí)行架構核的示例性實施例兩者。圖1a和圖1b中的實線框展示了流水線和核的有序部分,而虛線框的可選添加展示了寄存器重命名亂序發(fā)布/執(zhí)行流水線和核。

在圖1a中,處理器流水線100包括獲取階段102、長度解碼階段104、解碼階段106、分配階段108、重命名階段110、調度(也稱為分派或發(fā)布)階段112、寄存器讀取/存儲器讀取階段114、執(zhí)行階段116、回寫/存儲器寫階段118、異常處理階段122以及提交階段124。圖1b示出了處理器核190,所述處理器核包括耦合到執(zhí)行引擎單元150的前端單元130,并且所述執(zhí)行引擎單元和前端單元都耦合到存儲器單元170。核190可以是精簡指令集計算(risc)核、復雜指令集計算(cisc)核心、超長指令字(vliw)核、或混合或替代核類型。作為又一選項,核190可以是專用核,例如網絡或通信核、壓縮引擎、協處理器核、通用計算圖形處理單元(gpgpu)核、圖形核等。

前端單元130包括耦合到指令高速緩存單元134的分支預測單元132,所述指令高速緩存單元被耦合到指令翻譯后備緩沖器(tlb)136,所述指令轉換后備緩沖器被耦合到指令獲取單元138,所述指令獲取單元被耦合到解碼單元140。解碼單元140(或解碼器)可以對指令進行解碼并且生成從原始指令解碼出的、或以其他方式反映原始指令或從原始指令衍生出的作為輸出的一個或多個微操作、微代碼入口點、微指令、其他指令或其他控制信號。解碼單元140可以使用各種不同的機制來實現。合適機制的示例包括但不限于:查找表、硬件實施方式、可編程邏輯陣列(pla)、微代碼只讀存儲器(rom)等。在一個實施例中,核190包括微代碼rom或存儲用于某些宏指令的微碼的其他介質(例如,在解碼單元140中或者在前端單元130內)。解碼單元140被耦合到執(zhí)行引擎單元150中的重命名/分配器單元152。

執(zhí)行引擎單元150包括耦合到引退單元154的重命名/分配器單元152和一組一個或多個調度器單元156。所述調度器單元156表示任何數量的不同調度器,包括保留站、中央指令窗口等。所述調度器單元156被耦合到物理寄存器堆單元158。所述(多個)物理寄存器堆單元158各自表示一個或多個物理寄存器堆,其中不同的物理寄存器堆存儲一個或多個不同的數據類型,例如標量整數、標量浮點、壓縮整數、壓縮浮點、向量整數、向量浮點狀態(tài)(例如,作為有待執(zhí)行的下一指令的地址的指令指針)等。在一個實施例中,物理寄存器堆單元158包括向量寄存器單元、寫掩碼寄存器單元、以及標量寄存器單元。這些寄存器單元可以提供架構向量寄存器、向量掩碼寄存器、以及通用寄存器。物理寄存器堆單元158被引退單元154重疊,所述引退單元用于展示可以實現寄存器重命名和無序執(zhí)行的各種方式(例如,使用(多個)重排序緩沖器和(多個)引退寄存器堆;使用(多個)未來堆,(多個)歷史緩沖區(qū),以及(多個)引退寄存器堆;使用寄存器映射和寄存器池等)。

引退單元154和(多個)物理寄存器堆單元158被耦合到(多個)執(zhí)行群集160。所述(多個)執(zhí)行群集160包括一組一個或多個執(zhí)行單元162和一組一個或多個存儲器訪問單元164。執(zhí)行單元162可以執(zhí)行各種操作(例如,移位、加法、減法、乘法)以及對各種類型的數據(例如,標量浮點、壓縮整數、壓縮浮點、向量整數、向量浮點)執(zhí)行。雖然一些實施例可以包括專用于特定功能或功能集合的多個執(zhí)行單元,但其他實施例可以僅包括執(zhí)行所有功能的一個執(zhí)行單元或多個執(zhí)行單元。所述(多個)調度器單元156、(多個)物理寄存器堆單元158、以及(多個)執(zhí)行集群160被示出為可能是復數的,因為某些實施例為某些類型的數據/操作創(chuàng)建分開的流水線(例如,標量整數流水線、標量浮點/壓縮整數/壓縮浮點/向量整數/向量浮點流水線、和/或存儲器訪問流水線,所述流水線各自具有其本身的調度器單元、(多個)物理寄存器堆單元、和/或執(zhí)行集群,并且在分開的存儲器訪問流水線的情況下,實現了其中只有該流水線的執(zhí)行集群具有(多個)存儲器訪問單元164的某些實施例)。還應當理解的是,在使用分開的流水線的情況下,這些流水線中的一者或多者可以是亂序發(fā)布/執(zhí)行流水線,并且其余的是有序流水線。

所述一組存儲器訪問單元164被耦合到存儲器單元170,所述存儲器單元包括耦合到數據高速緩存單元174的數據tlb單元172,所述數據高速緩存單元被耦合到二級(l2)高速緩存單元176。在一個示例性實施例中,存儲器訪問單元164可以包括各自被耦合到存儲器單元170中的數據tlb單元172的加載單元、存儲地址單元、以及存儲數據單元。指令高速緩存單元134被進一步耦合到存儲器單元170中的二級(l2)高速緩存單元176。l2高速緩存單元176被耦合到一個或多個其他級的高速緩存并且最終被耦合到主存儲器。

作為示例,示例性寄存器重命名亂序發(fā)布/執(zhí)行核架構可以如下實現流水線100:1)指令獲取單元138執(zhí)行獲取階段102和長度解碼階段104;2)解碼單元140執(zhí)行解碼階段106;3)重命名/分配器單元152執(zhí)行分配階段108和重命名階段110;4)所述(多個)調度器單元156執(zhí)行調度階段112;5)所述(多個)物理寄存器堆單元158和存儲器單元170執(zhí)行寄存器讀/寫階段114;執(zhí)行集群160執(zhí)行執(zhí)行階段116;6)存儲器單元170和所述(多個)物理寄存器堆單元158執(zhí)行回寫/存儲器寫階段118;7)各種單元可以涉及異常處理階段122;以及8)引退單元154和所述(多個)物理寄存器堆單元158執(zhí)行提交階段124。

核190可以支持一個或多個指令集(例如,x86指令集(具有已經添加了較新版本的一些擴展);加利福尼亞州桑尼維爾的mips技術公司的mips指令集;加利福尼亞州桑尼維爾的arm控股公司的arm指令集(具有任選的附加擴展,例如neon)),包括本文所描述的指令。在一個實施例中,核190包括支持緊縮數據指令集擴展(例如,avx1、avx2、和/或某種形式的通用向量友好指令格式(u=0和/或u=1),如下所述)的邏輯,從而允許使用緊縮數據來執(zhí)行許多多媒體應用所使用的操作。

應當理解,核可以支持多線程化(執(zhí)行兩個或更多個并行的操作或線程集),并且可以以各種方式來完成所述多線程化,此各種方式包括時分多線程化、同步多線程化(其中,單個物理核為物理核正同步多線程化的各線程中的每一個線程提供邏輯核)、或其組合(例如,時分獲取和解碼以及此后諸如超線程化技術中的同步多線程化)。

雖然在亂序執(zhí)行的上下文中描述了寄存器重命名,但應當理解的是,可以在有序架構中使用寄存器重命名。雖然處理器的所示實施例還包括分開的指令和數據高速緩存單元134/174和共享的l2高速緩存單元176,但替代實施例可以具有用于指令和數據兩者的單個內部高速緩存,例如一級(l1)內部高速緩存、或多級內部高速緩存。在一些實施例中,所述系統(tǒng)可以包括在所述核和/或處理器外部的內部高速緩存和外部高速緩存的組合??商娲?,所有高速緩存都可以在所述核和/或處理器的外部。

圖2是根據本發(fā)明的實施例的可以具有多于一個核的、可以具有集成存儲器控制器的、以及可以具有集成圖形的處理器200的框圖。圖2中的實線框展示了具有單個核202a、系統(tǒng)代理210、一組一個或多個總線控制器單元216的處理器200,而虛線框的可選添加展示了具有多個核202a-n、系統(tǒng)代理210中的一組一個或多個集成存儲器控制器單元214以及專用邏輯208的替代處理器200。

因此,處理器200的不同實施方式可以包括:1)cpu,其中專用邏輯208是集成圖形和/或科學(吞吐量)邏輯(其可以包括一個或多個核),并且核202a-n是一個或多個通用核(例如,通用有序核、通用亂序核、兩者的組合);2)協處理器,其中核202a-n是旨在主要用于圖形和/或科學(吞吐量)的大量專用核;以及3)協處理器,其中核202a-n是大量通用有序核。因此,處理器200可以是通用處理器、協處理器或專用處理器,例如網絡或通信處理器、壓縮引擎、圖形處理器、gpgpu(通用圖形處理單元)、高吞吐量集成眾核(mic)協處理器(包括30個或更多個核)、嵌入式處理器等。所述處理器可以在一個或多個芯片上實現。處理器200可以是一個或多個襯底的一部分和/或可以使用諸如例如bicmos、cmos或nmos的多種加工技術中的任何一種技術在一個或多個襯底上被實現。

存儲器層級包括所述核內的一個或多個級別的高速緩存,一組或一個或多個共享高速緩存單元206、以及外部存儲器(未示出),所述外部存儲器被耦合到所述一組集成存儲器控制器單元214。所述一組共享高速緩存單元206可以包括一個或多個中級高速緩存,如二級(l2)、三級(l3)、四級(l4)、或其他級別的高速緩存、終極高速緩存(llc)、和/或其組合。雖然在一個實施例中,基于環(huán)形的互連單元212將集成圖形邏輯208、所述一組共享高速緩存單元206、以及系統(tǒng)代理單元210/(多個)集成存儲器控制器單元214互連,但替代實施例可以使用任何數量的用于互連這樣的單元的已知技術。在一個實施例中,維持一個或多個高速緩存單元206與核202a-n之間的相干性。

在一些實施例中,所述核202a-n中的一個或多個核能夠進行多線程。系統(tǒng)代理210包括協調和操作核202a-n的那些組件。系統(tǒng)媒介單元210可以包括例如功率控制單元(pcu)和顯示單元。pcu可以是或包括用于調節(jié)核202a-n和集成圖形邏輯208的功率狀態(tài)所需的邏輯和組件。顯示單元用于驅動一個或多個外部連接的顯示器。就架構指令集而言,核202a-n可以是同質的或異構的;也就是說,核202a-n中的兩個或更多個核能夠執(zhí)行相同的指令集,而其他的核能夠僅執(zhí)行所述指令集的子集或不同指令集。在一個實施例中,核202a-n是異構的,并且包括下面描述的“小”核和“大”核兩者。

圖3-6是示例性計算機架構的框圖。本領域已知的用于膝上型計算機、臺式機,手持pc、個人數字助理、工程工作站、服務器、網絡設備、網絡中樞、交換機、嵌入式處理器、數字信號處理器(dsp)、圖形設備、視頻游戲設備、機頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設備、以及各種其他電子設備的其他系統(tǒng)設計和配置也是合適的。一般,能夠結合本文所公開的處理器和/或其他執(zhí)行邏輯的各種各樣的系統(tǒng)或電子設備通常是合適的。

現在參考圖3,示出的是根據本發(fā)明的一個實施例的系統(tǒng)300的框圖。系統(tǒng)300可以包括耦合到控制器中樞320的一個或多個處理器310、315。在一個實施例中,控制器中樞320包括圖形存儲器控制器中樞(gmch)390和輸入/輸出中樞(ioh)350(其可以在分開的芯片上);gmch390包括存儲器和圖形控制器,存儲器340和協處理器345被耦合到所述圖形控制器;ioh350將輸入/輸出(i/o)設備360耦合到gmch390??商娲?,存儲器和圖形控制器中的一者或兩者被集成在處理器(如本文所述)內,存儲器340和協處理器345通過ioh350直接耦合到單個芯片中的處理器310和控制器中樞320。

圖3中用虛線表示附加處理器315的特性。每個處理器310、315可以包括本文描述的一個或多個處理核,并且可以是某一版本的處理器200。存儲器340可以例如是動態(tài)隨機存取存儲器(dram)、相變存儲器(pcm)或兩者的組合。對于至少一個實施例,控制器中樞320經由多點總線(例如前端總線(fsb)、諸如快速路徑互連(qpi)的點對點接口或類似連接件395)與(多個)處理器310、315通信。在一個實施例中,協處理器345是專用處理器,例如高吞吐量mic處理器、網絡或通信處理器、壓縮引擎、圖形處理器、gpgpu、嵌入式處理器等。在一個實施例中,控制器中樞320可以包括集成圖形加速器。就一系列指標量度(包括體系結構、微體系結構、熱、功耗特性等)而言,物理資源310、315之間存在多種差異。

在一個實施例中,處理器310執(zhí)行控制一般類型的數據處理操作的指令。協處理器指令可以被嵌入在所述指令中。處理器310將這些協處理器指令識別為應由附連的協處理器345執(zhí)行的類型。相應地,處理器310將協處理器總線或其他互連上的這些協處理器指令(或表示協處理器指令的控制信號)發(fā)布到協處理器345。(多個)協處理器345接受并執(zhí)行接收到的協處理器指令。

現在參考圖4,示出了根據本發(fā)明的實施例的更具體的第一示例性系統(tǒng)400的框圖。如圖4所示,多處理器系統(tǒng)400是點對點互連系統(tǒng),且包括經由點對點互連450耦合的第一處理器470和第二處理器480。處理器470和480各自可以是某一版本的處理器200。在本發(fā)明的一個實施例中,處理器470和480分別是處理器310和315,而協處理器438是協處理器345。在另一實施例中,處理器470和480分別是處理器310和345。

處理器470和480被示出為分別包括集成存儲器控制器(imc)單元472和482。處理器470還包括作為其總線控制器單元的一部分的點對點(p-p)接口476和478;類似地,第二處理器480包括p-p接口486和488。處理器470、480可以使用p-p接口電路478、488通過點對點(p-p)接口450交換信息。如圖4所示,imc472和482將處理器聯接到對應存儲器、即存儲器432和存儲器434上,所述存儲器可以是主存儲器的本地附接到對應處理器上的部分。處理器470、480可以各自使用點對點接口電路476、494、486、498經由單獨的p-p接口452、454來與芯片組490交換信息。芯片組490可以可選地經由高性能接口439與協處理器438交換信息。在一個實施例中,協處理器438是專用處理器,例如高吞吐量mic處理器、網絡或通信處理器、壓縮引擎、圖形處理器、gpgpu、嵌入式處理器等。

共享高速緩存(未示出)可以包括在任一處理器中或者在兩個處理器外部但經由p-p互連與所述處理器相連接,使得如果處理器被置于低功耗模式中,則任一或兩個處理器的本地高速緩存信息可以被存儲在所述共享高速緩存中。芯片組490可以經由接口496耦合至第一總線416。在一個實施例中,第一總線416可以是外圍部件互連(pci)總線,或諸如pciexpress總線或另一種第三代i/o互連總線的總線,盡管本發(fā)明的范圍不限于此。

如圖4所示,不同i/o設備414可以連同總線橋接器418耦合到第一總線416,所述總線橋接器可以將第一總線416耦合到第二總線420。在一個實施例中,一個或多個附加處理器415(例如協處理器、高吞吐量mic處理器、gpgpu、加速器(例如,圖形加速器或數字信號處理(dsp)單元)、字段可編程門陣列、或任何其他處理器)被耦合到第一總線416。在一個實施例中,第二總線420可以是低引腳數(lpc)總線。在一個實施例中,各個設備可以耦合至第二總線420,所述設備包括例如鍵盤和/或鼠標422、多個通信設備427、以及可以包括指令/代碼數據430的存儲單元428(如磁盤驅動器或者其他大容量存儲設備)。進一步地,音頻i/o424可以耦合至第二總線420。注意到,其他架構是可能的。例如,替代圖4的點對點體系結構,系統(tǒng)可以實現多站式總線或其他這樣的架構。

現在參考圖5,示出了根據本發(fā)明的實施例的更具體的第二示例性系統(tǒng)500的框圖。圖4和圖5中的相同元件具有相同的參考數字,并且已經從圖5中省略了圖4的某些方面以避免使圖5的其他方面模糊。圖5展示了處理器470、480可以分別包括集成存儲器和i/o控制邏輯(“cl”)472和482。因此,cl472、482包括集成存儲器控制器單元并且包括i/o控制邏輯。圖5展示了不僅存儲器432、434被耦合至cl472、482,而且i/o設備514也被耦合至控制邏輯472、482。傳統(tǒng)i/o設備515被耦合至芯片組490。

現在參考圖6,示出的是根據本發(fā)明的實施例的soc600的框圖。圖2中的相似元件具有相同的附圖標記。此外,虛線框是關于更先進的soc的可選特征。在圖6中,(多個)互連單元602被耦合到:應用處理器610,所述應用處理器包括一組一個或多個核202a-n和一個或多個共享高速緩存單元206;系統(tǒng)代理單元210;(多個)總線控制器單元216;(多個)集成存儲器控制器單元214;一組或一個或多個協處理器620,所述協處理器可以包括集成圖形邏輯、圖像處理器、音頻處理器、以及視頻處理器;靜態(tài)隨機存取存儲器(sram)單元630;直接存儲器訪問(dma)單元632;以及顯示單元640,所述顯示單元用于耦合到一個或多個外部顯示器。在一個實施例中,所述(多個)協處理器620是專用處理器,例如網絡或通信處理器、壓縮引擎、gpgpu、高吞吐量mic處理器、嵌入式處理器等。

本文公開的機制的實施例能夠以硬件、軟件、固件或這些實現途徑的組合來實現。本發(fā)明的實施例可以被實現為在可編程系統(tǒng)上執(zhí)行的計算機程序或程序代碼,所述可編程系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設備、以及至少一個輸出設備。諸如圖4所示的代碼430的程序代碼可以被應用于輸入指令以執(zhí)行本文所述的功能并且生成輸出信息。輸出信息能夠以已知的方式應用于一個或多個輸出設備。出于此應用的目的,處理系統(tǒng)包括具有處理器(例如,數字信號處理器(dsp)、微控制器、專用集成電路(asic)、或微處理器)的任何系統(tǒng)。程序代碼能夠以高級程序或面向對象的編程語言來實現,以與處理系統(tǒng)通信。如果需要,程序代碼還能夠以匯編或機器語言實現。事實上,本文描述的機制的范圍不限于任何特定的編程語言。在任何情況下,所述語言可以是編譯或解釋語言。

可以由機器可讀介質上所存儲的表屬性指令實現至少一個實施例的一個或多個方面,該指令代表處理器內的各種邏輯,當被機器讀取時該指令使該機器制作用于執(zhí)行在此所描述的技術的邏輯。此類表示(稱為“ip核”)可以被存儲在有形的機器可讀介質上并提供給各顧客或制造設施以加載至實際制作該邏輯或處理器的制作機器中。這樣的機器可讀存儲介質可以包括但不限于:由機器或設備制造或形成的物品的非瞬態(tài)有形安排,包括諸如硬盤的存儲介質;任何其他類型的盤,包括軟盤、光盤、致密盤只讀存儲器(cd-rom)、致密盤可擦寫光盤(cd-rw)、和磁光盤;半導體設備,例如只讀存儲器(rom);隨機存取存儲器(ram),例如動態(tài)隨機存取存儲器(dram)、靜態(tài)隨機存取存儲器(sram);可擦可編程只讀存儲器(eprom);閃存存儲器;電可擦可編程只讀存儲器(eeprom);相變存儲器(pcm);磁卡或光卡;或者適合于存儲電子指令的任何其他類型的介質。

因此,本發(fā)明的實施例還包括包含指令或包含設計數據(如硬件描述語言(hdl))的非瞬態(tài)有形機器可讀介質,所述非瞬態(tài)有形機器可讀介質限定本文描述的結構、電路、設備、處理器和/或系統(tǒng)特征。這樣的實施例也可以被稱為程序產品。在一些情況下,可以使用指令轉換器將指令從源指令集轉換為目標指令集。例如,所述指令轉換器可以將指令翻譯(例如,使用靜態(tài)二進制翻譯、包括動態(tài)編譯的動態(tài)二進制翻譯)、變形、仿真、或以其他方式轉換為有待由核處理的一個或多個其他指令。指令轉換器能夠以軟件、硬件、固件或其組合來實現。指令轉換器可以位于處理器上、處理器外、或者部分在處理器上并且部分在處理器外。

圖7是對照根據本發(fā)明的實施例的用于將源指令集中的二進制指令轉換為目標指令集中的二進制指令的軟件指令轉換器的使用的框圖。在所示實施例中,指令轉換器是軟件指令轉換器,然而可替代地,指令轉換器能夠以軟件、固件、硬件或其各種組合來實現。圖7示出了可以使用x86編譯器704來編譯高級語言702的程序以生成x86二進制代碼706,所述x86二進制代碼可以由具有至少一個x86指令集核的處理器716本機執(zhí)行。具有至少一個x86指令集核的處理器716表示可以通過兼容地執(zhí)行或以其他方式處理以下各項來執(zhí)行與具有至少一個x86指令集核的intel處理器基本相同功能的任何處理器:(1)intelx86指令集核的指令集的實質部分、或(2)目標代碼版本的應用或目標是在具有至少一個x86指令集核的intel處理器上運行的其他軟件,以便實現與具有至少一個x86指令集核的intel處理器基本相同的結果。x86編譯器704表示可操作用于生成x86二進制代碼706(例如,目標代碼)的編譯器,所述x86二進制代碼可以在具有或不具有附加鏈接處理的情況下在具有至少一個x86指令集核716的處理器上執(zhí)行。

類似地,圖7示出了可以使用替代性指令集編譯器708來編譯高級語言702的程序以生成替代性指令集二進制代碼710,可以由不具有至少一個x86指令集核的處理器714(例如,具有執(zhí)行加利福尼亞州桑尼維爾的mips技術公司的mips指令集和/或執(zhí)行加利福尼亞州桑尼維爾的arm控股公司的arm指令集的多個核的處理器)本機執(zhí)行所述替代性指令集二進制代碼。指令轉換器712用于將x86二進制代碼706轉換為可由不具有x86指令集核的處理器714本機執(zhí)行的代碼。此經轉換的代碼不太可能與替代性指令集二進制代碼710相同,因為能夠實現這一點的指令轉換器很難制作;然而,經轉換的代碼將完成一般操作,并且由來自所述替代性指令集的指令構成。因此,指令轉換器712表示通過仿真、模擬或任何其他過程允許不具有x86指令集處理器或核的處理器或其他電子設備執(zhí)行x86二進制代碼706的軟件、固件、硬件或其組合。

示例性指令格式

本文描述的所述(多個)指令的實施例能夠以不同的格式實現。另外,以下詳述示例性系統(tǒng)、架構、以及流水線。所述(多個)指令的實施例可以在這樣的系統(tǒng)、架構、以及流水線上執(zhí)行,但不限于所詳述的實施例。向量友好指令格式是適用于向量指令的指令格式(例如,存在某些特定于向量操作的字段)。雖然描述了通過所述向量友好指令格式使向量操作和標量操作均受支持的實施例,但是替代實施例僅使用向量操作向量友好指令格式。

圖8a和圖8b是框圖,展示了根據本發(fā)明的實施例的通用向量友好指令格式及其指令模板。圖8a是框圖,展示了根據本發(fā)明的實施例的通用向量友好指令格式及其a類指令模板;而圖8b是框圖,展示了根據本發(fā)明的實施例的通用向量友好指令格式及其b類指令模板。具體地,為通用向量友好指令格式800限定了a類和b類指令模板,所述指令模板都不包括存儲器訪問805指令模板和存儲器訪問820指令模板。

在向量友好指令格式的上下文中的術語“通用”是指不綁定到任何特定指令集的指令格式。雖然將描述本發(fā)明的實施例,其中向量友好指令格式支持以下各項:具有32位(4字節(jié))或64位(8字節(jié))數據元素寬度(或大小)的64字節(jié)向量操作數長度(或大小)(并且因此,64字節(jié)向量由16個雙字大小元素或者8個四字大小元素組成);具有16位(2字節(jié))或8位(1字節(jié))數據元素寬度(或大小)的64字節(jié)向量操作數長度(或大小);具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))或8位(1字節(jié))數據元素寬度(或大小)的32字節(jié)向量操作數長度(或大小);以及具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))或8位(1字節(jié))數據元素寬度(或大小)的16字節(jié)向量操作數長度(或大小);替代實施例可以支持具有更多、更少或不同的數據元素寬度(例如,128位(16字節(jié))數據元素寬度)的更多、更少和/或不同的向量操作數大小(例如,256字節(jié)向量操作數)。

圖8a中的a類指令模板包括:1)在無存儲器訪問805指令模板中,示出了無存儲器訪問,完全舍入控制式操作810指令模板和無存儲器訪問,數據變換式操作815指令模板;以及2)在存儲器訪問820指令模板中,示出了存儲器訪問,時間825指令模板和存儲器訪問,非時效性的830指令模板。圖8b中的b類指令模板包括:1)在無存儲器訪問805指令模板中,示出了無存儲器訪問,寫掩碼控制、部分舍入控制式操作812指令模板和無存儲器訪問、寫掩碼控制、vsize式操作817指令模板;以及2)在存儲器訪問820指令模板中,示出了存儲器訪問,寫掩碼控制827指令模板。通用向量友好指令格式800包括以下按照圖8a和圖8b所示的次序列出的以下字段。

格式字段840-該字段中的特定值(指令格式標識符值)唯一地標識所述向量友好指令格式,并且因此在指令流中出現向量友好指令格式的指令。如此,在僅具有通用向量友好指令格式的指令集不需要該字段的情況下,該字段是任性的。

基礎操作字段842-其內容區(qū)分不同的基礎操作。

寄存器索引字段844-其內容直接或通過地址生成來指定源操作數和目的地操作數的位置,無論是在寄存器還是存儲器中。這些包含足夠數量的位以從pxq(例如32×512、16×128、32×1024、64×1024)寄存器堆中選擇n個寄存器。雖然在一個實施例中,n可以是多達三個源和一個目的地寄存器,但替代實施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多達兩個源(其中這些源之一也用作目的地),可以支持多達三個來源(其中一個源也用作目的地),可以支持多達兩個源和一個目的地)。

修飾符字段846-其內容區(qū)分通用向量指令格式的指令的出現,所述指令指定來自不是通用向量指令格式的指令的存儲器訪問;也就是說,在無存儲器訪問805指令模板語存儲器訪問820指令模板之間。存儲器訪問操作讀和/或寫存儲器層級(在一些情況下,使用多個寄存器中的值指定所述源和/或目的地址),而無存儲器訪問操作不讀和/或寫存儲器層級(例如,所述源和目的地是寄存器)。雖然在一個實施例中,該字段還選擇三種不同的方式來執(zhí)行存儲器地址計算,但替代實施例可以支持更多、更少或不同的方式來執(zhí)行存儲器地址計算。

擴充操作字段850-其內容區(qū)分各種不同操作中除了基礎操作之外的哪一種有待被執(zhí)行。該字段是特定于上下文的。在本發(fā)明的一個實施例中,該字段被劃分為類字段868、阿爾法字段852、以及貝塔字段854。擴充操作字段850允許在單條指令而不是2條、3條或4條指令中執(zhí)行常見的操作組。

比例字段860-其內容允許索引字段的內容按比例縮放以用于存儲器地址生成(例如,對于地址生成,使用2比例*索引+基址)。

移位字段862a-其內容作存儲器地址生成的一部分(例如,對于地址生成,使用2比例*索引+基址+移位)。

移位因子字段862b(注意,移位字段862a直接并置在移位因子字段862b上指示使用了一者或另一者)-其內容用作地址生成的一部分;所述移位因子字段指定有待由存儲器訪問(n)的大小來縮放的移位因子,其中n是存儲器訪問中的字節(jié)數(例如,對于地址生成,使用2比例*索引+基址+經縮放移位)。冗余的低次序位被忽略,并且因此,移位因子字段的內容乘以存儲器操作數總大小(n),以便產生用于計算有效地址的最終移位?;谌牟僮鞔a字段874(本文所描述的)和數據操作字段854c,由運行時的處理器硬件確定n的值。移位字段862a和移位因子字段862b從不用于無存儲器訪問805指令模板和/或不同實施例可以僅實現兩者之一或一個都不實現的意義上說是可選的。

數據元素寬度字段864-其內容區(qū)分多個數據元素寬度中的哪一個有待被使用(在一些實施例中,針對所有指令;在其他實施例中,僅針對一些指令)。該字段從其在如果僅支持一個數據元素寬度和/或使用所述操作數的一些方面來支持多個數據元素寬度的情況下則不需要的意義上說是可選的。

寫掩碼字段870-其內容基于每個數據元素位置控制目的地向量操作數中的數據元素位置是否反映基礎操作和擴充操作的結果。a類指令模板支持合并寫掩碼,而b類指令模板支持合并和歸零寫掩碼。當合并時,向量掩碼允許在執(zhí)行(由所述基礎操作和擴充操作指定的)任何操作期間保護目的地中的任何元素集合免受更新;在另一實施例中,在對應的掩碼位具有0的情況下保留目的地的每個元素的舊值。相比之下,當歸零時,向量掩碼允許在執(zhí)行(由所述基礎操作和擴充操作指定的)任何操作期間保護目的地中的任何元素歸零;在一個實施例中,當對應的掩碼位具有0值時,將目的地的元素設置為0。該功能的子集是控制正在執(zhí)行的操作的向量長度(即正在修改的元素的跨度,從第一個到最后一個)的能力;然而,所修改的元素不必是連續(xù)的。因此,寫入掩模字段870允許部分向量操作,包括負載、存儲、算術、邏輯等。雖然描述了本發(fā)明的多個實施例,其中寫掩模字段的870內容選擇多個寫掩碼寄存器中的包含有待使用的寫掩碼的一個寫掩碼寄存器(并且因此寫掩碼字段的870內容間接地標識要執(zhí)行的掩碼),替代實施例代替地或另外允許掩模寫字段的870內容直接指定有待執(zhí)行的掩碼。

立即數字段872-其內容允許立即數的指定。該字段從其不存在于不支持立即數的通用向量友好格式的實現中并且不存在于不使用立即數的指令中的意義上說是可選的。

類字段868-其內容區(qū)分不同類別的指令。參考圖8a和圖8b,該字段的內容在a類和b類指令之間進行選擇。在圖8a和圖8b中,使用圓角方格指示字段(例如,圖8a和圖8b中分別為類字段868的a類字段868a和b類字段868b)中存在特定值。

a類指令模板

在無存儲器訪問805a類指令模板的情況下,阿爾法字段852被解釋為rs字段852a,其內容區(qū)分所述不同擴充操作類型中的哪一種有待執(zhí)行(例如,舍入852a.1和數據變換852a.2分別被指定用于無存儲器訪問舍入式操作810和無存儲器訪問數據變換式操作815指令模板),而貝塔字段854區(qū)分所指定類型的操作中的哪一個有待執(zhí)行。在無存儲器訪問805指令模板中,不存在比例字段860、移位字段862a、以及移位比例字段862b。

無存儲器訪問指令模板-完全舍入控制式操作

在無存儲器訪問完全舍入控制式操作810指令模板中,貝塔字段854被解釋為舍入控制字段854a,其(多項)內容提供靜態(tài)舍入。雖然在本發(fā)明的所描述的實施例中,舍入控制字段854a包括抑制所有浮點異常(sae)字段856和舍入操作控制字段858,但替代實施例可以支持并可以將這兩個概念編碼到同一個字段中、或者僅具有這些概念/字段中的一者或另一者(例如,可以只具有舍入操作控制字段858)。

sae字段856-其內容區(qū)分是否禁用異常事件報告;當sae字段的856內容表示抑制被啟用時,給定指令不會報告任何類型的浮點異常標志并且不引發(fā)任何浮點異常處理程序。

舍入操作控制字段858-其內容區(qū)分一組舍入操作中的哪一個要執(zhí)行(例如,上入、下舍、朝向零舍入以及舍入到最近整數)。因此,舍入操作控制字段858允許基于每條指令改變舍入模式。在本發(fā)明的其中處理器包括用于指定舍入模式的控制寄存器的一個實施例中,舍入操作控制字段的850內容覆蓋所述寄存器的值。

無存儲器訪問指令模板-數據變換式操作

在無存儲器訪問數據變換式操作815指令模板中,貝塔字段854被解釋為數據變換字段854b,其內容區(qū)分多項數據變換的哪一項有待執(zhí)行(例如,無數據變換、混合、廣播)。

在存儲器訪問820a類指令模板的情況下,阿爾法字段852被解釋為驅逐提示字段852b,其內容區(qū)分驅逐提示中的哪一個有待使用(在圖8a中,時效性的852b.1和非時效性的852b.2分別被指定用于存儲器訪問時效性的825指令模板和存儲器訪問非時效性的830指令模板),而貝塔字段854被解釋為數據操縱字段854c,其內容區(qū)分多項數據操縱操作(也稱為原語)中的哪一些有待執(zhí)行(例如,無操縱;廣播;源的向上轉換;以及目的地的向下轉換)。存儲器訪問820指令模板包括比例字段860、以及可選的移位字段862a或移位比例字段862b。向量存儲器指令通過轉換支持對來存儲器執(zhí)行向量加載和向量存儲。與常規(guī)向量指令一樣,向量存儲器指令以數據元素方式傳送來自存儲器的數據或將數據傳送到存儲器,實際傳送的元素由被選擇為寫掩碼的向量掩碼的內容決定。

存儲器訪問指令模板-時效性的

時效性的數據是可能很快重新使用足以從高速緩存中受益的數據。然而,這是一個提示,并且不同的處理器能夠以不同的方式實現所述時態(tài)數據,包括完全忽略提示。

存儲器訪問指令模板-非時效性的

非時效性的數據是在一級高速緩存中不太可能很快重新使用足以從高速緩存中受益的數據,并且應優(yōu)先考慮驅逐。然而,這是一個提示,并且不同的處理器能夠以不同的方式實現所述時態(tài)數據,包括完全忽略提示。

b類指令模板

在b類指令模板的情況下,阿爾法字段852被解釋為寫掩碼控制(z)字段852c,其內容區(qū)分由寫掩碼字段870控制的寫掩碼應為合并還是歸零。在無存儲器訪問805b類指令模板的情況下,貝塔字段854的一部分被解釋為rl字段857a,其內容區(qū)分所述不同擴充操作類型中的哪一種有待執(zhí)行(例如,舍入857a.1和向量長度(vsize)857a.2分別被指定用于無存儲器訪問寫掩碼操作部分舍入控制式操作812指令模塊和無存儲器訪問寫掩碼控制vsize式操作817指令模板),而貝塔字段854的其余部分區(qū)分所指定類型的操作中的哪一個有待執(zhí)行。在無存儲器訪問805指令模板中,不存在比例字段860、移位字段862a、以及移位比例字段862b。在無存儲器訪問寫掩碼操作部分舍入控制式操作810指令模塊中,貝塔字段854的其余部分被解釋為舍入操作字段859a,并且異常事件報告被禁用(給定指令不報告任何類型的浮點異常標志并且不引發(fā)任何浮點異常處理程序)。

舍入操作控制字段859a(就像舍入操作控制字段858一樣)-其內容區(qū)分一組舍入操作中的哪一個要執(zhí)行(例如,上入、下舍、朝向零舍入以及舍入到最近整數)。因此,舍入操作控制字段859a允許基于每條指令改變舍入模式。在本發(fā)明的其中處理器包括用于指定舍入模式的控制寄存器的一個實施例中,舍入操作控制字段的850內容覆蓋所述寄存器的值。在無存儲器訪問寫掩碼控制vsize式操作817指令模板中,貝塔字段854的其余部分被解釋為向量長度字段859b,其內容區(qū)分多個數據向量長度的哪一個有待執(zhí)行(例如,128、256或512字節(jié))。

在存儲器訪問820b類指令模板的情況下,貝塔字段854的一部分被解釋為廣播字段857b,其內容區(qū)分是否要執(zhí)行廣播式數據操縱操作,而貝塔字段854的其余部分被解釋為向量長度字段859b。存儲器訪問820指令模板包括比例字段860、以及可選的移位字段862a或移位比例字段862b。

在存儲器訪問820b類指令模板的情況下,貝塔字段854的一部分被解釋為廣播字段857b,其內容區(qū)分是否要執(zhí)行廣播式數據操縱操作,而貝塔字段854的其余部分被解釋為向量長度字段859b。存儲器訪問820指令模板包括比例字段860、以及可選的移位字段862a或移位比例字段862b。關于通用向量友好指令格式800,示出了包括格式字段840、基礎操作字段842以及數據元素寬度字段864的全操作碼字段874。盡管示出了全操作碼字段874包括所有這些字段的一個實施例,但在不支持所有這些字段的實施例中全操作碼字段874包括比所有這些字段更少的字段。全操作碼字段874提供操作代碼(操作數)。擴充操作字段850、數據元素寬度字段864以及寫掩碼字段870允許基于每條指令以通用向量友好指令格式指定這些特征。寫掩碼字段和數據元素寬度字段的組合創(chuàng)建了多個類型化指令,因為它們允許基于不同數據元素寬度應用掩碼。

在a類和b類中發(fā)現的各種指令模板在不同情況下都是有益的。在本發(fā)明的一些實施例中,不同處理器或處理器內的不同的核僅支持a類、僅支持b類或支持兩類。例如,旨在用于通用計算的高性能通用亂序核可以僅支持b類,旨在主要用于圖形和/或科學(吞吐量)計算的核可以僅支持a類,并且旨在用于支持兩者的核可以支持兩者(當然,具有來自兩類的模板和指令的一些混合而不是來自兩類的所有模板和指令的核是在本發(fā)明的范圍內)。此外,單個處理器可以包括多個核,所有這些核都支持相同的類,或者其中不同的核支持不同的類。例如,在具有分開的圖形核和通用核的處理器中,旨在主要用于圖形和/或科學計算的圖形核之一可以僅支持a類,而通用核中的一者或多者可以是高性能通用核,其中亂序執(zhí)行和寄存器重命名旨在用于僅支持類b的通用計算。

不具有分開的圖形核的另一處理器可以包括支持a類和b類兩者的更為通用的有序或亂序核。當然,在本發(fā)明的不同實施例中,來自一類的特征也可以在另一類中實現。以高級語言書寫的程序將被放入(例如,及時編譯或靜態(tài)編譯)到各種不同的可執(zhí)行形式中,包括:1)僅具有由用于執(zhí)行的目標處理器支持的類的指令的形式;或2)具有使用所有類別的指的不同組合書寫的替代例程并且具有控制流程代碼的形式,所述控制流程代碼基于當前正在執(zhí)行代碼的處理器所支持的指令來選擇要執(zhí)行的例程。

圖9a至圖9d是框圖,展示了根據本發(fā)明的示例性實施例的專用向量友好指令格式。圖9示出了專用向量友好指令格式900,所述專用向量友好指令格式從其指定所述字段的位置、大小、解釋和次序以及某些字段的值的意義上說是特定的。可以使用專用向量友好指令格式900來擴展x86指令集,并且因此所述字段中的一些字段與現有的x86指令集及其擴展(例如,avx)中使用的字段相似或相同。該格式與現有的帶有擴展的x86指令集的前綴編碼字段、實際操作數字節(jié)字段、modr/m字段、sib字段、移位字段、以及立即數字段保持一致。示出了來自圖8的從圖9映射到其中的字段。

應當理解的是,盡管為了說明的目的,在通用向量友好指令格式800的上下文中參考專用向量友好指令格式900來描述本發(fā)明的實施例,但是本發(fā)明不限于專用向量友好指令格式900,除非聲稱。例如,通用向量友好指令格式800考慮了各種字段的各種可能的大小,而專用向量友好指令格式900被示出為具有特定大小的字段。作為特定示例,雖然數據元素寬度字段864被示為專用向量友好指令格式900中的一位字段,但本發(fā)明不限于此(即,通用向量友好指令格式800考慮了其他大小的數據元素寬度字段864)。通用向量友好指令格式800包括以下按照圖9a所示的次序列出的以下字段。

evex前綴(字節(jié)0-3)902以四字節(jié)形式編碼。

格式字段840(evex字節(jié)0,位[7:0])-第一字節(jié)(evex字節(jié)0)是格式字段840,并且所述第一字節(jié)包含0x62(在本發(fā)明的一個實施例中,用于區(qū)分向量友好指令格式的唯一值)。第二至第四字節(jié)(evex字節(jié)1-3)包括提供特定能力的多個位字段。

rex字段905(evex字節(jié)1,位[7-5])由evex.r位字段(evex字節(jié)1,位[7]-r)、evex.x位字段(evex字節(jié)1,位[6]-x)和857bex字節(jié)1,位[5]-b)組成。evex.r、evex.x和evex.b位字段提供與對應的vex位字段相同的功能,并且使用ls補碼形式進行編碼,即zmm0被編碼為811b,zmm15被編碼為0000b。指令的其他字段對如本領域已知的(rrr,xxx和bbb)編碼寄存器索引的低3位進行編碼,以便可以通過添加evex.r、evex.x、以及evex.b來形成rrrr、xxxx、以及bbbb。

rex’字段810-這是rex’字段810的第一部分并且是用于對擴展的32寄存器集的較高16或較低16進行編碼的evex.r’位字段(evex字節(jié)1,位[4]-r’)。在本發(fā)明的一個實施例中,該位以及如下所指示的其他位以位反轉格式存儲,以(在眾所周知的x8632位模式中)從bound指令區(qū)分誰的實際操作數字節(jié)為62,但是在modr/m字段中不接受mod字段中的11的值;本發(fā)明的替代實施例不以反轉格式存儲該位和下面的指示的其他位。使用值1來對較低的16個寄存器進行編碼。換句話說,r’rrrr是通過將evex.r’、evex.r和來自其他字段的另一rrr組合而形成的。

操作碼映射字段915(evex字節(jié)1,位[3:0]-mmmm)-其內容對隱含的前導操作數字節(jié)(0f、0f38、或0f3)進行編碼。

數據元素寬度字段864(evex字節(jié)2,位[7]-w)-用符號evex.w表示。evex.w用于定義數據類型(32位數據元素或64位數據元素)的粒度(大小)。

evex.vvvv920(evex字節(jié)2,位[6:3]-vvvv)-evex.vvvv的作用可以包括以下內容:1)evex.vvvv對第一源寄存器操作數進行編碼,以反向(ls補碼)形式指定,并且對于具有2個或更多個源操作數的指令有效;2)evex.vvvv對目的地寄存器操作數進行編碼,對于某些向量移位以ls補碼形式指定;或者3)evex.vvvv不對任何操作數進行編碼,所述字段被保留并且應包含811b。因此,evex.vvvv字段920對以反轉(ls補碼)形式存儲的第一源寄存器說明符的4個低次序位進行編碼。取決于指令,使用另外不同的evex位字段將說明符大小擴展到32個寄存器。

evex.u868類字段(evex字節(jié)2,位[2]-u)-如果evex.u=0,則所述類字段表示a類或evex.u0;如果evex.u=1,則所述類字段表示b類或evex.u1。

前綴編碼字段925(evex字節(jié)2,位[1:0]-pp)為所述基礎操作字段提供多個附加位。除了為evex前綴格式的傳統(tǒng)sse指令提供支持之外,所述前綴編碼字段還具有壓縮simd前綴的優(yōu)點(而不是要求一個字節(jié)來表示simd前綴,evex前綴只需要2位)。在一個實施例中,為了支持使用傳統(tǒng)格式和evex前綴格式的simd前綴(66h、f2h、f3h)的傳統(tǒng)sse指令,這些傳統(tǒng)simd前綴被編碼到simd前綴編碼字段中;并且在運行時在提供給解碼器的pla之前擴展到傳統(tǒng)simd前綴中(因此,pla可以同時執(zhí)行這些傳統(tǒng)指令的傳統(tǒng)格式和evex格式,而無需修改)。雖然較新的指令可以將evex前綴編碼字段的內容的直接用作操作數擴展,但是為了一致性,某些實施例以類似的方式擴展但允許由這些傳統(tǒng)simd前綴指定不同的含義。替代實施例可以重新設計pla以支持2位simd前綴編碼,并且因此不需要擴展。

阿爾法字段852(evex字節(jié)3,位[7]-eh;也稱為evex.eh、evex.rs、evex.rl、evex.寫掩碼控制和evex.n;也用α表示)-如前所述,該字段是特定于上下文的。

貝塔字段854(evex字節(jié)3,位[6:4]-sss,也稱為evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;也用βββ表示)-如前所述,該字段是特定于上下文的。

rex’字段810-這是rex’字段的其余部分并且是可以用于對擴展的32寄存器集的較高16或較低16進行編碼的evex.v’位字段(evex字節(jié)3,位[3]-v’)。該位是以位反轉格式存儲的。使用值1來對較低的16個寄存器進行編碼。換句話說,v’vvvv是通過組合evex.v’、evex.vvvv形成的。

寫掩碼字段870(evex字節(jié)3,位[2:0]-kkk)-其內容指定寫掩碼寄存器中的寄存器的索引,如前所述。在本發(fā)明的一個實施例中,特定值evex.kkk=000具有特定的行為,意味著沒有寫掩碼用于特定指令(這能夠以各種方式實現,包括使用硬連線到所有或繞過掩碼硬件的硬件的寫掩碼)。

實際操作碼字段930(字節(jié)4)-其也稱為操作碼字節(jié)。在此字段中指定所述操作碼的一部分。

modr/m字段940(字節(jié)5)包括mod字段942、reg字段944、以及r/m字段946。如前所述,mod字段的942內容在存儲器訪問和無存儲器訪問操作之間進行區(qū)分。reg字段944的作用可以歸結為兩種情況:對目的地寄存器操作數或源寄存器操作數進行編碼,或者被視為操作數擴展并且不用于對任何指令操作數進行編碼。r/m字段946的作用可以包括如下:對引用存儲器地址的指令操作數進行編碼,或對目的地寄存器操作數或源寄存器操作數進行編碼。

比例索引基址(sib)字節(jié)(字節(jié)6)-如前所述,比例字段的850內容用于存儲器地址生成。sib.xxx954和sib.bbb956-這些字段的內容先前已經參考了寄存器索引xxxx和bbbb。

移位字段862a(字節(jié)7-10)-當mod字段942包含10時,字節(jié)7-10是移位字段862a,并且所述移位字段與傳統(tǒng)32位移位(disp32)一樣工作并且以字節(jié)粒度工作。

移位因子字段862b(字節(jié)7)-當mod字段942包含01時,字節(jié)7是移位因子字段862b。這個字段的位置與傳統(tǒng)的x86指令集8位移位(disp8)的位置相同,所述字段以字節(jié)粒度工作。由于disp8是擴展符號,它只能在-128和127字節(jié)偏移之間尋址;就64字節(jié)高速緩存線而言,disp8使用只能設置四個非常有用的值-128、-64、0和64的8位;由于通常需要更大的范圍,因此使用disp32;然而,disp32需要4個字節(jié)。與disp8和disp32相比,移位因子字段862b是disp8的重新解釋;當使用移位因子字段862b時,實際移位由移位因子字段的內容乘以存儲器操作數訪問(n)的大小來確定。這種類型的移位稱為disp8*n。這減少了平均指令長度(單個字節(jié)用于移位,但具有更大的范圍)。這樣的壓縮移位是基于有效移位是存儲訪問粒度的倍數的假設,并且因此地址偏移的冗余低次序位不需要進行編碼。換句話說,移位因子字段862b代替?zhèn)鹘y(tǒng)的x86指令集8位移位。因此,移位因子字段862b以與x86指令集8位移位相同的方式進行編碼(因此modrm/sib編碼規(guī)則沒有變化),只有disp8超載到disp8*n除外。換句話說,編碼規(guī)則或編碼長度沒有變化,但只有在由硬件解釋移位值(這需要通過按存儲器操作數的大小來縮放移位來獲得字節(jié)地址偏移)時如此。立即數字段872如前所述地操作。

全操作碼字段

圖9b是框圖,展示了根據本發(fā)明的一個實施例的專用向量友好指令格式900的構成全操作碼字段874的字段。具體地,全操作碼字段874包括格式字段840、基礎操作字段842以及數據元素寬度(w)字段864?;A操作字節(jié)842包括前綴編碼字段925、操作碼映射字段915、以及實際操作碼字段930。

寄存器索引字段

圖9c是框圖,展示了根據本發(fā)明的一個實施例的專用向量友好指令格式900的構成寄存器索引字段844的字段。具體地,寄存器索引字段844包括rex字段905、rex’字段910、modr/m.reg字段944、modr/m.r/m字段946、vvvv字段920、xxx字段954、以及bbb字段956。

擴充操作字段

圖9d是框圖,展示了根據本發(fā)明的一個實施例的專用向量友好指令格式900的構成擴充操作字段850的字段。當類(u)字段868包含0時,所述字段表示evex.u0(a類868a);當所述字段包含1時,所述字段表示evex.u1(b類868b)。當u=0并且mod字段942包含11(表示無存儲器訪問操作)時,阿爾法字段852(evex字節(jié)3,位[7]-eh)被解釋為rs字段852a。當rs字段852a包含1(舍入852a.1)時,貝塔字段854(evex字節(jié)3,位[6:4]-sss)被解釋為舍入控制字段854a。舍入控制字段854a包括一位sae字段856和兩位舍入操作字段858。當rs字段852a包含0(數據變換852a.2)時,貝塔字段854(evex字節(jié)3,位[6:4]-sss)被解釋為三位數據變換字段854b。當u=0并且mod字段942包含00、01或10(表示存儲器訪問操作)時,阿爾法字段852(evex字節(jié)3,位[7]-eh)被解釋為驅逐提示(eh)字段852b,并且貝塔字段854(evex字節(jié)3,位[6:4]-sss)被解釋為三位數據操縱字段854c。

當u=1時,阿爾法字段852(evex字節(jié)3,位[7]-eh)被解釋為寫掩碼控制(z)字段852c。當u=1并且mod字段942包含11(表示無存儲器訪問操作)時,貝塔字段854的一部分(evex字節(jié)3,位[4]-s0)被解釋為rl字段857a;當所述rl字段包含1(舍入857a.1)時,貝塔字段854的其余部分(evex字節(jié)3,位[6-5]-s2-1)被解釋為舍入操作字段859a,而當rl字段857a包含0(vsize857.a2)時,貝塔字段854的其余部分(evex字節(jié)3,位[6-5]-s2-1)被解釋為向量長度字段859b(evex字節(jié)3,位[6-5]-l1-0)。當u=1并且mod字段942包含00、01或10(表示存儲器訪問操作)時,貝塔字段854(evex字節(jié)3,位[6:4]-sss)被解釋為向量長度字段859b(evex字節(jié)3,位[6-5]-l1-0)和廣播字段857b(evex字節(jié)3,位[4]-b)。

圖10是根據本發(fā)明一個實施例的方法的寄存器架構1000的框圖。在所示的實施例中,存在512位寬的32個向量寄存器1010;這些寄存器的參考號為zmm0到zmm31。較低的16個zmm寄存器的次序較低的256位疊加在寄存器ymm0-16上。較低的16個zmm寄存器的次序較低的128位(ymm寄存器的次序較低的128位)疊加在寄存器xmm0-15上。專用向量友好指令格式900對這些疊加的寄存器堆進行操作,如下表所示。

換句話說,向量長度字段859b在最大長度與一個或多個其他較短長度之間進行選擇,其中每個這樣的較短長度是前一長度的一半長度;并且沒有向量長度字段859b的指令模板對最大向量長度進行操作。進一步地,在一個實施例中,專用向量友好指令格式900的b類指令模板對壓縮或標量單/雙精度浮點數據以及壓縮或標量整數數據進行操作。標量操作是對zmm/ymm/xmm寄存器中的最低階的數據元素位置執(zhí)行的操作;取決于所述實施例,次序較高的數據元素位置或者在所述指令之前保持不變或者被歸零。

寫掩碼寄存器1015-在所示實施例中,存在8個寫掩碼寄存器(k0至k7),每個寫掩碼寄存器的大小為64位。在替代實施例中,寫掩碼寄存器1015的大小為16位。如前所述,在本發(fā)明的一個實施例中,向量掩模寄存器k0不能用作寫掩碼;當通常指示k0的編碼用于寫掩碼時,所述向量掩模寄存器選擇0xffff的硬連線寫掩碼,有效地禁止所述指令的寫掩碼。

通用寄存器1025-在所示實施例中,存在十六個64位通用寄存器,所述通用寄存器與現有的x86尋址模式一起使用以對多個存儲器操作數進行尋址。這些寄存器用名稱rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp、以及r8到r15作為參考標記。

標量浮點堆棧寄存器堆(x87堆棧)1045,在其上重疊有mmx壓縮整數平面寄存器堆1050-在所示實施例中,x87堆棧是用于使用x87指令集擴展對32位/64位/80位浮點數據字節(jié)執(zhí)行標量浮點操作的八元素堆棧;而mmx寄存器用于對64位壓縮整數數據執(zhí)行操作,以及為在mmx寄存器與xmm寄存器之間執(zhí)行的某些操作保存操作數。本發(fā)明的替代實施例可以使用更寬或更窄的寄存器。另外,本發(fā)明的替代實施例可以使用更多、更少或不同的寄存器堆和寄存器。

圖11a和圖11b示出了更特定的示例性有序核架構的框圖,該核是芯片中的若干個邏輯塊(包括相同類型和/或不同類型的其他核)之一。取決于應用,所述邏輯塊通過具有某些固定功能邏輯、存儲器i/o接口和其他必需i/o邏輯的高帶寬互連網絡(例如,環(huán)形網絡)進行通信。

圖11a是根據本發(fā)明的裸片實施例的單個處理器核、和其與上互連網絡1102的連接以及其二級(l2)高速緩存1104的本地子集的框圖。在一個實施例中,指令解碼器1100支持具有緊縮數據指令集擴展的x86指令集。l1高速緩存1106允許對高速緩存存儲器的低時延訪問進入標量單元和向量單元。雖然在一個實施例中(為了簡化設計),標量單元1108和向量單元1110使用分開的寄存器組(分別為標量寄存器1112和向量寄存器1114),并且在它們之間傳送的數據被寫入存儲器并且然后從一級(l1)高速緩存1106中回讀,但本發(fā)明的替代實施例可以使用不同的途徑(例如,使用單個寄存器組或者包括允許數據在兩個寄存器堆之間傳送而未被書寫和回讀的通信路徑)。

l2高速緩存1104的本地子集是全局l2高速緩存的一部分,所述全局l2高速緩存被劃分為多個分開的本地子集,每個處理器核一個。每個處理器核具有到其本身的l2高速緩存1104的本地子集的直接訪問路徑。由處理器核讀取的數據被存儲在其l2高速緩存子集1104中并且可以被快速訪問,與其他處理器核并行地訪問其本地l2的高速緩存子集。由處理器核寫的數據被存儲在其本身的l2高速緩存子組1104中,并且如果需要,則從其他子集劃掉。所述環(huán)形網絡確保共享數據的相干性。所述環(huán)形網絡是雙向的,允許諸如處理器核、l2高速緩存和其他邏輯塊的媒介在芯片內彼此通信。每個環(huán)形數據路徑在每個方向為1012位寬。

圖11b是根據本發(fā)明的實施例的圖11a中的處理器核的一部分的放大視圖。圖11b包括l1高速緩存1104的l1數據高速緩存1106a部分、以及關于向量單元1110和向量寄存器1114的更多細節(jié)。具體地,向量單元1110是16位寬向量處理單元(vpu)(參見16位寬alu1128),所述向量處理單元執(zhí)行整數、單精度浮點和雙精度浮點指令中的一者或多者。vpu支持用混合單元1120對寄存器輸入進行混合、用轉換單元1122a-b進行數字轉換、以及用復制單元1124對存儲器輸入進行復制。寫掩碼寄存器1126允許預測結果向量寫。

本發(fā)明的實施例可以包括上面已經描述的各個步驟。這些步驟可以體現在可用于使通用或專用處理器執(zhí)行這些步驟的機器可執(zhí)行指令中??商娲兀@些操作可以由含有用于執(zhí)行這些操作的硬件連線的邏輯的特定硬件部件執(zhí)行,或者由程序計算機部件和自定義硬件部件的任意組合執(zhí)行。

如本文所述,指令可以是指硬件的具體配置,例如被配置為用于執(zhí)行某些操作或具有存儲在非瞬態(tài)計算機可讀介質中實施的存儲器中的預定功能或軟件指令的專用集成電路(asic)。因此,可以使用在一個或多個電子設備(例如,終端站、網絡元件等)上存儲和執(zhí)行的代碼和數據來實現這些圖中所示的技術。這樣的電子設備使用計算機機器可讀媒體(例如,非瞬態(tài)計算機機器可讀存儲媒體(例如,磁盤;光盤;隨機存取存儲器;只讀存儲器;閃速存儲器設備;相變存儲器)以及瞬態(tài)計算機機器可讀通信媒體(例如,電、光、聲或其他形式的傳播信號—例如載波、紅外信號、數字信號等))來(在內部和/或通過網絡與其他電子設備)存儲和傳達代碼和數據。

此外,這樣的電子設備典型地包括耦合到一個或多個其他組件(例如,一個或多個存儲設備(非瞬態(tài)機器可讀存儲媒體)、用戶輸入/輸出設備(例如鍵盤、觸摸屏和/或顯示器)、以及網絡連接件)的一組一個或多個處理器。所述一組處理器和其他組件的耦合典型地通過一個或多個總線和橋接器(也稱為總線控制器)。存儲設備和攜帶網絡流量的信號分別代表一個或多個機器可讀存儲媒體和機器可讀通信媒體。因此,給定電子設備的存儲設備典型地存儲用于在所述電子設備的所述一組一個或多個處理器上執(zhí)行的代碼和/或數據。當然,可以使用軟件、固件和/或硬件的不同組合來實現本發(fā)明的實施例的一個或多個部分。

用于執(zhí)行融合加法-加法操作的裝置和方法

如以上所提及的,當用向量/simd數據工作時,存在減少總指令計數并提高功率效率(特別是對于小核)會是有益的情況。特別地,實現浮點數據類型的融合加法-加法操作的指令允許減少總指令數量并減少工作負載功率要求。

圖12-15展示了在512位向量/simd操作數上的融合加法-加法操作的實施例,每個操作數作為包含單精度浮點值的16個單獨的32位緊縮數據元素進行操作。然而,應當注意,圖12-15中所展示的特定向量和緊縮數據元素大小僅用于說明的目的。本發(fā)明的基本原理可以使用任何向量或緊縮數據元素大小來實現。參考圖12-15,源1和源2操作數(分別為1205-1505和1201-1501)可以是simd緊縮數據寄存器,并且源3操作數1203-1503可以是存儲器中的simd緊縮數據寄存器或位置。響應于融合加法-加法操作,根據向量格式來設置舍入控制。在本文所描述的實施例中,可以根據圖8a的a類指令模板(包括無存儲器訪問舍入式操作810)或圖8b的b類指令模板(包括無存儲器訪問寫掩碼控制部分舍入控制式操作812)來設置舍入控制。

如圖12所示,占據源2操作數的最低有效32位的初始緊縮數據元素(例如,1201中具有值7的緊縮數據元素)被添加到來自源3操作數的對應緊縮數據元素(例如,1203中具有值15的緊縮數據元素),生成第一結果數據元素。第一結果數據元素進行舍入并添加到源1/目的地操作數的對應緊縮數據元素(例如,1205中具有值8的緊縮數據元素),生成第二結果數據元素。第二結果數據元素進行舍入并寫回到源1/目的地操作數1207的相同緊縮數據元素位置(例如,具有值-16的緊縮數據元素1215)。在一個實施例中,用操作/指令對立即數字節(jié)值進行編碼,其中立即數的最低有效3位1209各自包含一或零,為每個操作數的相應緊縮數據元素中的每一者分配正或負值用于融合加法-加法操作。立即數字節(jié)的立即數位[7:3]1211對源3的存儲器中的寄存器或位置進行編碼。對于對應的源操作數的每個相應的緊縮數據元素重復融合加法-加法操作,其中每個源操作數包括多個緊縮數據元素(例如,對于一組對應的操作數,每個操作數具有16個緊縮數據元素,具有512位的向量操作數長度,其中每個緊縮數據元素為32位寬)。

另一實施例涉及四個緊縮數據操作數。類似于圖12,圖13展示了占用源2操作數1301的最低有效32位的初始緊縮數據元素。初始緊縮數據元素被添加到來自源3操作數1303的對應緊縮數據元素,生成第一結果數據元素。第一結果數據元素進行舍入并且被添加到源1操作數1305的對應緊縮數據元素,產生第二結果數據元素。與圖12相反,第二結果數據元素在進行舍入后被寫到第四緊縮數據操作數、目的地操作數1307的對應緊縮數據元素(例如,具有值-16的緊縮數據元素1315)中。在一個實施例中,用操作/指令對立即數字節(jié)值進行編碼,其中最低有效3位1309各自包含一或零,為每個操作數的緊縮數據元素中的每一者分別分配正或負值用于融合加法-加法操作。立即數字節(jié)的立即數位[7:3]1311對源3的存儲器中的寄存器或位置進行編碼。對于對應的源操作數的每個相應的緊縮數據元素重復融合加法-加法操作,其中每個源操作數包括多個緊縮數據元素(例如,對于一組對應的操作數,每個操作數具有16個緊縮數據元素,具有512位的向量操作數長度,其中每個緊縮數據元素為32位寬)。

圖14展示了包括添加了具有32位緊縮數據元素寬度的寫掩碼寄存器k11419的替代實施例。寫掩碼寄存器k1的低16位包括一和零的混合。寫掩模寄存器k1中的低16位位置各自對應于緊縮數據元素位置之一。對于源1/目的地操作數1407中的每個緊縮數據元素位置,寫掩碼寄存器k1中的對應位控制是否將操作的結果寫到目的地。例如,如果寫掩碼是0,則操作的結果不被寫入目的地緊縮數據元素位置(例如,具有值6的緊縮數據元素1421);如果寫掩碼是1,則操作的結果被寫入目的地緊縮數據元素位置(例如,具有值-16的緊縮數據元素1415)。

在另一實施例中,如圖15所示,源1/目的地操作數1405被替換為附加源操作數、源1操作數1505(例如,對于具有四個緊縮數據操作數的實施例)。在這些實施例中,目的地操作數1507包含來自緊縮數據元素位置中的掩碼寄存器k1的對應位位置為零的那些緊縮數據元素位置(例如,具有值6的緊縮數據元素1521)中操作之前的源1操作數的內容,并且包含緊縮數據元素位置中的掩碼寄存器k1的對應位位置為1的那些緊縮數據元素位置(例如,具有值-16的緊縮數據元素1515)的操作結果。

根據上述融合加法-加法指令的實施例,操作數可以參照圖12-15和圖9a進行如下編碼。目的地操作數1207-1507(也是圖12和圖14中的源1/目的地操作數)是緊縮數據寄存器并且在reg字段944中進行編碼。源2操作數1201-1501是緊縮數據寄存器并且在vvvv字段920中進行編碼。在一個實施例中,源3操作數1203-1503為緊縮數據寄存器,并且在另一實施例中,其為32位浮點緊縮數據存儲器位置。源3操作數可以在立即數字段872中或在r/m字段946中進行編碼。

圖16是流程圖,展示了根據一個實施例的在執(zhí)行融合加法-加法操作期間由處理器遵循的示例性步驟。所述方法可以在上述架構的上下文中實現,但不限于任何特定架構。在步驟1601處,解碼單元(例如,解碼單元140)接收指令并且對指令進行解碼以確定要執(zhí)行融合加法-加法操作。所述指令可以指定三個或四個源緊縮數據操作數的集合,每個源緊縮數據操作數具有n個緊縮數據元素的數組。根據具有立即數字節(jié)的位位置中的對應值(例如,源3操作數內的立即數字節(jié)中的最低有效3位,每位包含一或零,為每個操作數的緊縮數據元素中的每一者分別分配正或負值用于融合加法-加法操作),緊縮數據操作數的每一者中的每個緊縮數據元素的值為正或負。

在步驟1603處,解碼單元140訪問寄存器(例如物理寄存器堆單元158中的寄存器)或存儲器(例如存儲器單元170)內的位置。可以根據指令中指定的寄存器地址訪問物理寄存器堆單元158中的寄存器或存儲器單元170中的存儲器位置。例如,融合加法-加法操作可以包括src1、src2、src3和dest寄存器地址,其中src1是第一源寄存器的地址,src2是第二源寄存器的地址,并且src3是第三源寄存器的地址。dest是存儲了結果數據的目的地址寄存器的地址。在一些實施方式中,用src1標記的存儲位置還用于存儲所述結果,并且被稱為src1/dest。在一些實施方式中,src1、src2、src3和dest的任一者或全部都定義了處理器的可尋址存儲器空間中的存儲器位置。例如,src3可以標識存儲器單元170中的存儲器位置,而src2和src1/dest在物理寄存器堆單元158中分別標識第一和第二寄存器。為了簡化本文的描述,將描述關于訪問物理寄存器堆的實施例。然而,可以將這些訪問改為存儲器。

在步驟1605處,執(zhí)行單元(例如,執(zhí)行引擎單元150)能夠對所訪問的數據執(zhí)行融合加法-加法操作。根據融合加法-加法操作,源2操作數的初始緊縮數據元素被添加到來自源3操作數的對應緊縮數據元素,生成第一結果數據元素。第一結果數據元素進行舍入并且被添加到源1/目的地操作數的對應緊縮數據元素,產生第二結果數據元素。第二結果數據元素進行舍入并寫回到源1/目的地操作數的相同緊縮數據元素位置。對于涉及四個緊縮數據操作數的實施例,第二結果數據元素在進行舍入后被寫到第四緊縮數據操作數、目的地操作數的對應緊縮數據元素中。在一個實施例中,在源3操作數中對立即數字節(jié)值進行編碼,其中最低有效3位各自包含一或零,為每個操作數的相應緊縮數據元素中的每一者分配正或負值用于融合加法-加法操作。立即數位[7:3]對源3的存儲器中的寄存器進行編碼。

對于包括寫掩碼寄存器的實施例,源1/目的地操作數中的每個緊縮數據元素位置根據寫掩碼寄存器中的相應位位置是零還是一而分別包含源1/目的地中的緊縮數據元素位置的內容或操作的結果。對于對應源操作數的每個相應緊縮數據元素重復融合加法-加法操作,其中每個源操作數包括多個緊縮數據元素。根據指令的要求,源1/目的地操作數或目的地操作數可以在存儲了融合加法-加法操作的結果的物理寄存器堆單元158中指定寄存器。在步驟1607處,根據指令的要求,可以將融合加法-加法操作的結果存儲回物理寄存器堆單元158或存儲器單元170中的位置。

圖17展示了用于實現融合加法-加法操作的示例性數據流。在一個實施例中,處理單元1701的執(zhí)行單元1705是融合加法-加法單元1705,并且耦合到物理寄存器堆單元1703以從相應源寄存器接收源操作數。在一個實施例中,融合加法-加法單元可操作用于對存儲在由第一、第二和第三源操作數指定的寄存器中的緊縮數據元執(zhí)行融合加法-加法操作。

融合加法-加法單元進一步包括用于在來自源操作數中的每一者的緊縮數據元素上操作的(多個)子電路(即,算術邏輯單元)。每個子電路將來自源2操作數(1201-1501)的一個緊縮數據元素添加到源3操作數(1203-1503)的對應緊縮數據元素,生成第一結果數據元素。根據具有三個或四個源操作數的指令,第一結果數據元素相應地進行舍入并添加到源1/目的地操作數或源1操作數(1205-1505)的對應緊縮數據元素,生成第二結果數據元素。第二結果數據元素進行舍入并寫回到源1/目的地操作數或目的地操作數(1207-1507)的對應緊縮數據元素位置。在完成操作之后,例如,在回寫或引退階段,源1/目的地操作數或目的地操作數中的結果可以被寫回到物理寄存器堆單元1703。

圖18展示了用于實現融合加法-加法操作的替代性數據流。類似于圖17,處理單元1801的執(zhí)行單元1807是融合加法-加法單元1807,并且可操作用于對存儲在由第一、第二和第三源操作數指定的寄存器中的緊縮數據元執(zhí)行融合加法-加法操作。在一個實施例中,調度器1805耦合到物理寄存器堆單元1803以從相應源寄存器接收源操作數,并且調度器耦合到融合加法-加法單元1807。調度器1805從物理寄存器堆單元1803中的相應源寄存器接收源操作數,并且將源操作數分派到融合加法-加法單元1807,以執(zhí)行融合加法-加法操作。

在一個實施例中,如果不存在兩個融合加法-加法單元和兩個可用于執(zhí)行單個融合加法-加法指令的子電路,則調度器1805將所述指令分派給融合加法-加法單元兩次,而不分派第二指令,直到第一指令完成(即,調度器1805分派融合加法-加法指令并且等待將來自源2操作數(1201-1501)的一個緊縮數據元素添加到源3操作數(1203-1503)的對應緊縮數據元素,生成第一結果數據元素;調度器然后第二次分派融合加法-加法指令,并且根據具有三個或四個源操作數的指令,第一結果數據元素相應地進行舍入并添加到源1/目的地操作數或源1操作數(1205-1505)的對應緊縮數據元素,生成第二結果數據元素。第二結果數據元素進行舍入并寫回到源1/目的地操作數或目的地操作數(1207-1507)的對應緊縮數據元素位置。在完成操作之后,例如,在回寫或引退階段,源1/目的地操作數或目的地操作數中的結果可以被寫回到物理寄存器堆單元1803。

圖19展示了用于實現融合加法-加法操作的另一替代性數據流。類似于圖18,處理單元1901的執(zhí)行單元1907是融合加法-加法單元1907,并且可操作用于對存儲在由第一、第二和第三源操作數指定的寄存器中的緊縮數據元執(zhí)行融合加法-加法操作。在一個實施例中,物理寄存器堆單元1903耦合到附加執(zhí)行單元,所述附加執(zhí)行單元也是融合加法-加法單元1905(也可操作用于對存儲在由第一、第二和第三源操作數指定的寄存器中的緊縮數據元素執(zhí)行融合加法-加法操作),并且兩個融合加法-加法單元是串聯的(即,融合加法-加法單元1905的輸出耦合到融合加法-加法單元1907的輸入)。

在一個實施例中,第一融合加法-加法單元(即,融合加法-加法單元1905)執(zhí)行將來自源2操作數(1201-1501)的一個緊縮數據元素與源3操作數(1203-1503)的對應緊縮數據元素相加,生成第一結果數據元素。在一個實施例中,在第一結果數據元素進行舍入之后,第二融合加法-加法單元(即,融合加法-加法單元1907)根據具有三個或四個源操作數的指令而執(zhí)行將第一結果數據元素與源1/目的地操作數或源1操作數(1205-1505)的對應緊縮數據元素相加,生成第二結果數據元素。第二結果數據元素進行舍入并寫回到源1/目的地操作數或目的地操作數(1207-1507)的對應緊縮數據元素位置。在完成操作之后,例如,在回寫或引退階段,源1/目的地操作數或目的地操作數中的結果可以被寫回到物理寄存器堆單元1903。

在本文整個詳細描述中,出于解釋的目的,闡述了許多具體的細節(jié)以便提供對本發(fā)明的徹底理解。然而,對于本領域技術人員而言,可以在不具有這些具體細節(jié)中的一些細節(jié)的情況下實踐本發(fā)明將是明顯的。在某些情況下,為了避免模糊本發(fā)明的主題,未詳細描述公知的結構和功能。因此,本發(fā)明的范圍和精神應根據以下權利要求來判定。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
六盘水市| 荃湾区| 东台市| 鲜城| 东至县| 疏附县| 修武县| 岚皋县| 双桥区| 安阳县| 镇江市| 沽源县| 安溪县| 蓝山县| 德钦县| 台州市| 巴中市| 永丰县| 古蔺县| 余庆县| 晋江市| 安多县| 阿坝| 广东省| 抚松县| 石泉县| 沈丘县| 河池市| 芜湖市| 张家川| 江源县| 新田县| 广宁县| 胶州市| 修水县| 收藏| 灵璧县| 喜德县| 五家渠市| 禄丰县| 黑山县|