用于滑動窗口數(shù)據(jù)訪問的設(shè)備和方法
【專利摘要】描述了用于獲取數(shù)據(jù)流的多個部分并將其存儲到多個寄存器。例如,根據(jù)一個實施例的方法包括以下操作:確定N個矢量寄存器的集合,以將存儲在系統(tǒng)存儲器中的數(shù)據(jù)流的N個指定部分讀取進入所述N個矢量寄存器的集合;對于所述數(shù)據(jù)流的N個指定部分中的每一個,確定系統(tǒng)存儲器地址;在系統(tǒng)存儲器地址處從系統(tǒng)存儲器獲取所述數(shù)據(jù)流的N個指定部分;以及將所述數(shù)據(jù)流的N個指定部分存儲到N個矢量寄存器。
【專利說明】用于滑動窗口數(shù)據(jù)訪問的設(shè)備和方法
發(fā)明領(lǐng)域
[0001]本發(fā)明的實施例一般涉及計算機系統(tǒng)的領(lǐng)域。本發(fā)明的實施例尤其涉及用于滑動窗口數(shù)據(jù)訪問的設(shè)備和方法。
【背景技術(shù)】
[0002]【背景技術(shù)】
[0003]指令集,或指令集架構(gòu)(ISA)是涉及編程的計算機架構(gòu)的一部分,并可以包括本機數(shù)據(jù)類型、指令、寄存器架構(gòu)、尋址模式、存儲器架構(gòu),中斷和異常處理,以及外部輸入和輸出(I/o)。在本文中術(shù)語指令一般指宏指令一即被提供給處理器(或指令轉(zhuǎn)換器,該指令轉(zhuǎn)換器(例如使用靜態(tài)二進制翻譯、包括動態(tài)編譯的動態(tài)二進制翻譯)翻譯、變形、仿真,或以其他方式將指令轉(zhuǎn)換成要由處理器處理的一個或多個指令)的指令)以用于執(zhí)行的指令一而不是微指令或微操作(miCTo-op)—它們是處理器的解碼器解碼宏指令的結(jié)果。
[0004]ISA與微架構(gòu)不同,微架構(gòu)是實現(xiàn)指令集的處理器的內(nèi)部設(shè)計。帶有不同的愾架構(gòu)的處理器可以共享共同的指令集。例如,INTEL?奔騰四(Pentium4)處理器、Intel?酷睿(Core?)處理器、以及來自加利福尼亞州桑尼威爾(Sunnyvale)的超微半導(dǎo)體有限公司(Advanced Micro Devices, Inc.)的諸多處理器執(zhí)行幾乎相同版本的x86指令集(在更新的版本中加入了一些擴展),但具有不同的內(nèi)部設(shè)計。例如,ISA的相同寄存器架構(gòu)在不同的微架構(gòu)中可使用已知的技術(shù)以不同方法來實現(xiàn),包括專用物理寄存器、使用寄存器重命名機制(諸如,使用寄存器別名表RAT、重排序緩沖器R0B、以及隱退寄存器組;使用多映射和寄存器池)的一個或多個動態(tài)分配物理寄存器等。除非另作說明,短語寄存器架構(gòu)、寄存器組,以及寄存器在本文中被用來指代對軟件/編程器以及指令指定寄存器的方式可見的東西。在需要特殊性的情況下,形容詞邏輯、架構(gòu),或軟件可見的將用于表示寄存器架構(gòu)中的寄存器/文件,而不同的形容詞將用于指定給定微型架構(gòu)中的寄存器(例如,物理寄存器、重新排序緩沖器、退役寄存器、寄存器池)。
[0005]指令集包括一個或多個指令格式。給定指令格式定義各個字段(位的數(shù)量、位的位置)以指定要執(zhí)行的操作(操作碼)以及對其要執(zhí)行該操作的操作碼等。通過指令模板(或子格式)的定義來進一步分解一些指令格式。例如,給定指令格式的指令模板可被定義為具有指令格式的字段(所包括的字段通常在相同的階中,但是至少一些字段具有不同的位位置,因為包括更少的字段)的不同子集,和/或被定義為具有不同解釋的給定字段。由此,ISA的每一指令使用給定指令格式(并且如果定義,則在該指令格式的指令模板的給定一個中)來表達,并且包括用于指定操作和操作碼的字段。例如,示例性ADD指令具有專用操作碼以及包括指定該操作碼的操作碼字段和選擇操作數(shù)的操作數(shù)字段(源I/目的地以及源2)的指令格式,并且該ADD指令在指令流中的出現(xiàn)將具有選擇專用操作數(shù)的操作數(shù)字段中的專用內(nèi)容。
[0006]科學、金融、自動矢量化的通用,RMS(識別、挖掘以及合成),以及可視和多媒體應(yīng)用程序(例如,2D/3D圖形、圖像處理、視頻壓縮/解壓縮、語音識別算法和音頻操縱)常常需要對大量的數(shù)據(jù)項執(zhí)行相同操作(被稱為“數(shù)據(jù)并行性”)。單指令多數(shù)據(jù)(SIMD)是指使處理器對多個數(shù)據(jù)項執(zhí)行操作的一種指令。SMD技術(shù)特別適于能夠在邏輯上將寄存器中的比特分割為若干個固定大小的數(shù)據(jù)元素的處理器,每一個元素都表示單獨的值。例如,256比特寄存器中的比特可以被指定為四個單獨的64比特打包的數(shù)據(jù)元素(四字(Q)大小的數(shù)據(jù)元素),八個單獨的32比特打包的數(shù)據(jù)元素(雙字(D)大小的數(shù)據(jù)元素),十六單獨的16比特打包的數(shù)據(jù)元素(一字(W)大小的數(shù)據(jù)元素),或三十二個單獨的8比特數(shù)據(jù)元素(字節(jié)(B)大小的數(shù)據(jù)元素)來被操作的源操作數(shù)。這種類型的數(shù)據(jù)被稱為打包的數(shù)據(jù)類型或矢量數(shù)據(jù)類型,這種數(shù)據(jù)類型的操作數(shù)被稱為打包的數(shù)據(jù)操作數(shù)或矢量操作數(shù)。換句話說,打包數(shù)據(jù)項或矢量指的是打包數(shù)據(jù)元素的序列,并且打包數(shù)據(jù)操作數(shù)或矢量操作數(shù)是SIMD指令(也稱為打包數(shù)據(jù)指令或矢量指令)的源操作數(shù)或目的地操作數(shù)。
[0007]作為示例,一種類型的SIMD指令指定要以垂直方式對兩個源矢量操作數(shù)執(zhí)行的單個矢量操作,以利用相同數(shù)量的數(shù)據(jù)元素,以相同數(shù)據(jù)元素順序,生成相同大小的目的地矢量操作數(shù)(也稱為結(jié)果矢量操作數(shù))。源矢量操作數(shù)中的數(shù)據(jù)元素被稱為源數(shù)據(jù)元素,而目的地矢量操作數(shù)中的數(shù)據(jù)元素被稱為目的地或結(jié)果數(shù)據(jù)元素。這些源矢量操作數(shù)是相同大小,并包含相同寬度的數(shù)據(jù)元素,如此,它們包含相同數(shù)量的數(shù)據(jù)元素。兩個源矢量操作數(shù)中的相同位位置中的源數(shù)據(jù)元素形成數(shù)據(jù)元素對(也稱為相對應(yīng)的數(shù)據(jù)元素;即,每個源操作數(shù)的數(shù)據(jù)元素位置O中的數(shù)據(jù)元素相對應(yīng),每個源操作數(shù)的數(shù)據(jù)元素位置I中的數(shù)據(jù)元素相對應(yīng),等等)。由該SIMD指令所指定的操作分別地對這些源數(shù)據(jù)元素對中的每一對執(zhí)行,以生成匹配的數(shù)量的結(jié)果數(shù)據(jù)元素,如此,每一對源數(shù)據(jù)元素都具有對應(yīng)的結(jié)果數(shù)據(jù)元素。由于操作是垂直的并且由于結(jié)果矢量操作數(shù)大小相同,具有相同數(shù)量的數(shù)據(jù)元素,并且結(jié)果數(shù)據(jù)元素與源矢量操作數(shù)以相同數(shù)據(jù)元素順序來存儲,因此,結(jié)果數(shù)據(jù)元素與源矢量操作數(shù)中的它們的對應(yīng)的源數(shù)據(jù)元素對處于結(jié)果矢量操作數(shù)的相同比特位置。除此示例性類型的SMD指令之外,還有各種其他類型的SMD指令(例如,只有一個或具有兩個以上的源矢量操作數(shù)的;以水平方式操作的;生成不同大小的結(jié)果矢量操作數(shù)的,具有不同大小的數(shù)據(jù)元素的,和/或具有不同的數(shù)據(jù)元素順序的)。應(yīng)該理解,術(shù)語目的地矢量操作數(shù)(或目的地操作數(shù))被定義為執(zhí)行由指令所指定的操作的直接結(jié)果,包括將該目的地操作數(shù)存儲在某一位置(寄存器或在由該指令所指定的存儲器地址),以便它可以作為源操作數(shù)由另一指令訪問(由另一指令指定該同一個位置)。
[0008]諸如由具有包括x86、MMX?、流式 SMD 擴展(SSE)、SSE2、SSE3、SSE4.1 以及 SSE4.2指令的指令集的丨ntel? Core?處理器使用的技術(shù)之類的SMD技術(shù),在應(yīng)用程序性能方面實現(xiàn)了大大的改善。已經(jīng)發(fā)布和/或公布了涉及高級矢量擴展(AVX) (AVX1和AVX2)且使用矢量擴展(VEX)編碼方案的附加SMD擴展集(例如,參見2011年10月的丨ntel? 64和IA-32架構(gòu)軟件開發(fā)手冊,并且參見2011年6月的丨ntel?高級矢量擴展編程參考)。
[0009]與本發(fā)明的實施例有關(guān)的背景
[0010]以下描述的本發(fā)明的實施例解決與當前的連續(xù)且重疊的數(shù)據(jù)流存儲器訪問相關(guān)聯(lián)的低效。正如本文中所使用的,“連續(xù)”表示對存儲器位置的順序訪問(例如,訪問存儲在順序存儲器位置中的16個元素)。“重疊”表示相同的數(shù)據(jù)元素中的一些以相繼訪問的方式被訪問。
[0011]圖8示出其中順序存儲器訪問801-804從連續(xù)增加的存儲器位置(地址0_3)讀取數(shù)據(jù)流815的重疊部分。存儲器訪問801讀取在存儲器位置addrO處開始的數(shù)據(jù)元素a-h ;地址指針然后從addrO移動到addrl,并且存儲器訪問802讀取數(shù)據(jù)元素b_I ;地址指針然后移動到addr2,并且存儲器訪問803讀取數(shù)據(jù)元素c_j ;最后地址指針移動到addr3,并且存儲器訪問804讀取數(shù)據(jù)元素d-k。因此,在當前實現(xiàn)中,諸如圖8所示,存在與對數(shù)據(jù)流815的迭代訪問的數(shù)量相同的單獨存儲器請求。這種操作方式的缺點是增加指令數(shù),導(dǎo)致代碼膨脹以及花費在合并指令之間的相關(guān)性上的潛在可能的增加的循環(huán)。另外,這種操作可導(dǎo)致處理器內(nèi)增加的執(zhí)行端口壓力、增加的內(nèi)部緩沖器使用(例如,重排序緩沖器和填充緩沖器)。
[0012]附圖簡述
[0013]圖1A是示出根據(jù)本發(fā)明的實施例的示例性有序流水線以及示例性寄存器重命名的無序發(fā)布/執(zhí)行流水線兩者的框圖;
[0014]圖1B是示出根據(jù)本發(fā)明的實施例的有序架構(gòu)核的示例性實施例以及包括在處理器中的示例性寄存器重命名的無序發(fā)布/執(zhí)行架構(gòu)核兩者的框圖;
[0015]圖2是根據(jù)本發(fā)明的實施例的單核處理器和多核處理器的框圖,具有集成的存儲器控制器和圖形器件;
[0016]圖3示出了根據(jù)本發(fā)明一個實施例的系統(tǒng)的框圖;
[0017]圖4示出了根據(jù)本發(fā)明的實施例的第二系統(tǒng)的框圖;
[0018]圖5示出了根據(jù)本發(fā)明的實施例的第三系統(tǒng)的框圖;
[0019]圖6示出了根據(jù)本發(fā)明的實施例的片上系統(tǒng)(SoC)的框圖;
[0020]圖7示出了對比根據(jù)本發(fā)明實施例的使用軟件指令轉(zhuǎn)換器將源指令集中的二進制指令轉(zhuǎn)換為目標指令集中的二進制指令的框圖;
[0021]圖8示出其中多個存儲器請求讀取數(shù)據(jù)流的重疊元素的現(xiàn)有技術(shù);
[0022]圖9示出根據(jù)本發(fā)明的一個實施例的架構(gòu);
[0023]圖10示出根據(jù)本發(fā)明的一個實施例的方法;
[0024]圖1lA-C示出了根據(jù)本發(fā)明的實施例的包括VEX前綴的示例性指令格式;
[0025]圖12A和12B是示出根據(jù)本發(fā)明的實施例的通用矢量友好指令格式及其指令模板的框圖;
[0026]圖13A-D是示出根據(jù)本發(fā)明的實施例的示例性專用矢量友好指令格式的框圖;
[0027]圖14是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)的框圖;
[0028]圖15A是根據(jù)本發(fā)明的實施例的連接到管芯上(on-die)互聯(lián)網(wǎng)絡(luò)且具有第二級(L2)高速緩存的本地子集的單處理器核的方框圖;以及
[0029]圖15B是根據(jù)本發(fā)明的各實施例的圖14A中的處理器核的一部分的展開圖。
[0030]詳細描述
[0031]示例性處理器架構(gòu)和數(shù)據(jù)類型
[0032]圖1A是示出根據(jù)本發(fā)明的各實施例的示例性有序流水線和示例性的寄存器重命名的無序發(fā)布/執(zhí)行流水線的框圖。圖1B是示出根據(jù)本發(fā)明的各實施例的要包括在處理器中的有序架構(gòu)核的示例性實施例和示例性的寄存器重命名的無序發(fā)布/執(zhí)行架構(gòu)核的框圖。圖1A-10B中的實線框解說了有序流水線和有序核,而虛線框中的可選附加項解說了寄存器重命名的、無序發(fā)布/執(zhí)行流水線和核。給定有序方面是無序方面的子集的情況下,無序方面將被描述。
[0033]在圖1A中,處理器流水線100包括獲取級102、長度解碼級104、解碼級106、分配級108、重命名級110、調(diào)度(也稱為分派或發(fā)布)級112、寄存器讀/存儲器讀取級114、執(zhí)行級116、寫回/存儲器寫入級118、異常處理級122和提交級124。
[0034]圖1B示出了包括耦合到執(zhí)行引擎單元150的前端單元130的處理器核190,且執(zhí)行引擎單元和前端單元兩者都耦合到存儲器單元170。核190可以是精簡指令集合計算(RISC)核、復(fù)雜指令集合計算(CISC)核、非常長的指令字(VLIW)核或混合或替代核類型。作為又一選項,核190可以是專用核,諸如例如網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用計算圖形處理器單元(GPGPU)核、或圖形核等等。
[0035]前端單元130包括稱合到指令高速緩存單元132的分支預(yù)測單元134,該指令高速緩存單元136被耦合到指令翻譯后備緩沖器(TLB) 138,該指令翻譯后備緩沖器140被耦合到指令獲取單元938,指令獲取單元938被耦合到解碼單元940。解碼單元140 (或解碼器)可解碼指令,并生成從原始指令解碼出的、或以其他方式反映原始指令的、或從原始指令導(dǎo)出的一個或多個微操作、微代碼進入點、微指令、其他指令、或其他控制信號作為輸出。解碼單元140可使用各種不同的機制來實現(xiàn)。合適的機制的示例包括但不限于查找表、硬件實現(xiàn)、可編程邏輯陣列(OLA)、微代碼只讀存儲器(ROM)等。在一個實施例中,核190包括存儲(例如,在解碼單元140中或否則在前端單元130內(nèi)的)某些宏指令的微代碼的微代碼ROM或其他介質(zhì)。解碼單元140耦合至執(zhí)行引擎單元150中的重命名/分配器單元152。
[0036]執(zhí)行引擎單元150包括重命名/分配器單元152,該重命名/分配器單元154耦合至引退單元156和一個或多個調(diào)度器單元956的集合。調(diào)度器單元156表示任何數(shù)目的不同調(diào)度器,包括預(yù)留站、中央指令窗等。調(diào)度器單元156被耦合到物理寄存器組單元158。每個物理寄存器組單元158表示一個或多個物理寄存器組,其中不同的物理寄存器組存儲一種或多種不同的數(shù)據(jù)類型,諸如標量整數(shù)、標量浮點、打包整數(shù)、打包浮點、矢量整數(shù)、矢量浮點、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等。在一個實施例中,物理寄存器組單元158包括矢量寄存器單元、寫掩碼寄存器單元和標量寄存器單元。這些寄存器單元可以提供架構(gòu)矢量寄存器、矢量掩碼寄存器、和通用寄存器。物理寄存器組單元158被引退單元154重疊以示出可以用來實現(xiàn)寄存器重命名和無序執(zhí)行的各種方式(例如,使用記錄器緩沖器和引退寄存器組;使用將來的文件、歷史緩沖器和引退寄存器組;使用寄存器圖和寄存器池等等)。引退單元154和物理寄存器組單元158被耦合到執(zhí)行群集160。執(zhí)行群集160包括一個或多個執(zhí)行單元162的集合和一個或多個存儲器訪問單元164的集合。執(zhí)行單元162可以執(zhí)行各種操作(例如,移位、加法、減法、乘法),以及對各種類型的數(shù)據(jù)(例如,標量浮點、打包整數(shù)、打包浮點、矢量整型、矢量浮點)執(zhí)行。盡管某些實施例可以包括專用于特定功能或功能集合的多個執(zhí)行單元,但其他實施例可包括全部執(zhí)行所有函數(shù)的僅一個執(zhí)行單元或多個執(zhí)行單元。調(diào)度器單元156、物理寄存器組單元158和執(zhí)行群集160被示為可能有多個,因為某些實施例為某些類型的數(shù)據(jù)/操作(例如,標量整型流水線、標量浮點/打包整型/打包浮點/矢量整型/矢量浮點流水線,和/或各自具有其自己的調(diào)度器單元、物理寄存器單元和/或執(zhí)行群集的存儲器訪問流水線一以及在分開的存儲器訪問流水線的情況下,實現(xiàn)其中僅該流水線的執(zhí)行群集具有存儲器訪問單元164的某些實施例)創(chuàng)建分開的流水線。還應(yīng)當理解,在分開的流水線被使用的情況下,這些流水線中的一個或多個可以為無序發(fā)布/執(zhí)行,并且其余流水線可以為有序發(fā)布/執(zhí)行。
[0037]存儲器訪問單元164的集合被耦合到存儲器單元170,該存儲器單元172包括耦合到數(shù)據(jù)高速緩存單元174的數(shù)據(jù)TLB單元176,其中數(shù)據(jù)高速緩存單元974耦合到二級(L2)高速緩存單元976。在一個示例性實施例中,存儲器訪問單元164可包括加載單元、存儲地址單元和存儲數(shù)據(jù)單元,其中的每一個均耦合至存儲器單元170中的數(shù)據(jù)TLB單元172。指令高速緩存單元134還耦合到存儲器單元170中的第二級(L2)高速緩存單元176。L2高速緩存單元176被耦合到一個或多個其他級的高速緩存,并最終耦合到主存儲器。
[0038]作為示例,示例性寄存器重命名的、無序發(fā)布/執(zhí)行核架構(gòu)可以如下實現(xiàn)流水線100:1)指令獲取138執(zhí)行獲取和長度解碼級102和104 ;2)解碼單元140執(zhí)行解碼級106 ;3)重命名/分配器單元152執(zhí)行分配級108和重命名級110 ;4)調(diào)度器單元156執(zhí)行調(diào)度級112 ;5)物理寄存器組單元158和存儲器單元170執(zhí)行寄存器讀取/存儲器讀取級114 ;執(zhí)行群集160執(zhí)行執(zhí)行級116 ;6)存儲器單元170和物理寄存器組單元158執(zhí)行寫回/存儲器寫入級118 ;7)各單元可牽涉到異常處理級122 ;以及8)引退單元154和物理寄存器組單元158執(zhí)行提交級124。
[0039]核190可支持一個或多個指令集合(例如,x86指令集合(具有與較新版本一起添加的某些擴展);加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集合;加利福尼州桑尼維爾市的ARM控股的ARM指令集合(具有諸如NEON等可選附加擴展)),其中包括本文中描述的各指令。在一個實施例中,核190包括支持打包數(shù)據(jù)指令集擴展(例如,AVXUAVX2和/或以下描述的一些形式的一般矢量友好指令格式(U = O和/或U= I))的邏輯,從而允許很多多媒體應(yīng)用使用的操作能夠使用打包數(shù)據(jù)來執(zhí)行。
[0040]應(yīng)當理解,核可支持多線程化(執(zhí)行兩個或更多個并行的操作或線程的集合),并且可以按各種方式來完成該多線程化,此各種方式包括時分多線程化、同步多線程化(其中單個物理核為物理核正同步多線程化的各線程中的每一個線程提供邏輯核)、或其組合(例如,時分獲取和解碼以及此后諸如用Intel?超線程化技術(shù)來同步多線程化)。
[0041]盡管在無序執(zhí)行的上下文中描述了寄存器重命名,但應(yīng)當理解,可以在有序架構(gòu)中使用寄存器重命名。盡管所解說的處理器的實施例還包括分開的指令和數(shù)據(jù)高速緩存單元134/174以及共享L2高速緩存單元176,但替換實施例可以具有用于指令和數(shù)據(jù)兩者的單個內(nèi)部高速緩存,諸如例如一級(LI)內(nèi)部高速緩存或多個級別的內(nèi)部緩存。在某些實施例中,該系統(tǒng)可包括內(nèi)部高速緩存和在核和/或處理器外部的外部高速緩存的組合。或者,所有高速緩存都可以在核和/或處理器的外部。
[0042]圖2是根據(jù)本發(fā)明的實施例的可具有一個以上核、可具有集成存儲器控制器、并且可具有集成圖形的處理器200的框圖。圖2的實線框示出了處理器200,處理器200具有單個核202A、系統(tǒng)代理210、一組一個或多個總線控制器單元216,而可選附加的虛線框示出了替代的處理器200,具有多個核202A-N、系統(tǒng)代理單元210中的一組一個或多個集成存儲器控制器單元214以及專用邏輯208。
[0043]因此,處理器200的不同實現(xiàn)可包括:I) CPU,其中專用邏輯208是集成圖形和/或科學(吞吐量)邏輯(其可包括一個或多個核),并且核202A-N是一個或多個通用核(例如,通用的有序核、通用的無序核、這兩者的組合);2)協(xié)處理器,其中核202A-N是主要預(yù)期用于圖形和/或科學(吞吐量)的大量專用核;以及3)協(xié)處理器,其中核202A-N是大量通用有序核。因此,處理器200可以是通用處理器、協(xié)處理器或?qū)S锰幚砥?,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU (通用圖形處理單元)、高吞吐量的集成眾核(MIC)協(xié)處理器(包括30個或更多核)、或嵌入式處理器等。該處理器可以被實現(xiàn)在一個或多個芯片上。處理器200可以是一個或多個襯底的一部分,和/或可以使用諸如例如BiCMOSXMOS或NMOS等的多個加工技術(shù)中的任何一個技術(shù)將其實現(xiàn)在一個或多個襯底上。
[0044]存儲器層次結(jié)構(gòu)包括在各核內(nèi)的一個或多個級別的高速緩存、一個或多個共享高速緩存單元206的集合、以及耦合至集成存儲器控制器單元214的集合的外部存儲器(未示出)。該共享高速緩存單元206的集合可以包括一個或多個中間級高速緩存,諸如二級(L2)、三級(L3)、四級(L4)或其他級別的高速緩存、末級高速緩存(LLC)、和/或其組合。盡管在一個實施例中,基于環(huán)的互連單元212將集成圖形邏輯208、共享高速緩存單元206的集合以及系統(tǒng)代理單元210/集成存儲器控制器單元214互連,但替代實施例可使用任何數(shù)量的公知技術(shù)來將這些單元互連。在一個實施例中,在一個或多個高速緩存單元206與核202-A-N之間維持相干性。
[0045]在某些實施例中,核202A-N中的一個或多個核能夠多線程化。系統(tǒng)代理210包括協(xié)調(diào)和操作核202A-N的那些組件。系統(tǒng)代理單元210可包括例如功率控制單元(P⑶)和顯示單元。P⑶可以是或包括調(diào)整核202A-N和集成圖形邏輯208的功率狀態(tài)所需的邏輯和組件。顯示單元用于驅(qū)動一個或多個外部連接的顯示器。
[0046]核202A-N在架構(gòu)指令集合方面可以是同構(gòu)的或異構(gòu)的;8卩,這些核202A-N中的兩個或更多個核可能能夠執(zhí)行相同的指令集合,而其他核可能能夠執(zhí)行該指令集合的僅僅子集或不同的指令集合。
[0047]圖3-6是示例性計算機架構(gòu)的框圖。本領(lǐng)域已知的對膝上型設(shè)備、臺式機、手持PC、個人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機、嵌入式處理器、數(shù)字信號處理器(DSP)、圖形設(shè)備、視頻游戲設(shè)備、機頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設(shè)備以及各種其他電子設(shè)備的其他系統(tǒng)設(shè)計和配置也是合適的。一般來說,能夠納入本文中所公開的處理器和/或其它執(zhí)行邏輯的大量系統(tǒng)和電子設(shè)備一般都是合適的。
[0048]現(xiàn)在參考圖3,所示出的是根據(jù)本發(fā)明一實施例的系統(tǒng)300的框圖。系統(tǒng)300可以包括一個或多個處理器310、315,這些處理器耦合到控制器中樞320。在一個實施例中,控制器中樞320包括圖形存儲器控制器中樞(GMCH) 390和輸入/輸出中樞(IOH) 350 (其可以在分開的芯片上);GMCH 390包括存儲器340和協(xié)處理器345耦合到的存儲器和圖形控制器;Ι0Η 350將輸入/輸出(I/O)設(shè)備360耦合到GMCH 390。替代地,存儲器和圖形控制器中的一個或兩個在處理器(如本文中所描述的)內(nèi)集成,存儲器340和協(xié)處理器345直接耦合到處理器310、以及單一芯片中的具有IOH 350的控制器中樞320。
[0049]附加處理器315的任選性質(zhì)用虛線表示在圖3中。每一處理器310、315可包括本文中描述的處理核中的一個或多個,并且可以是處理器200的某一版本。
[0050]存儲器340可以是例如動態(tài)隨機存取存儲器(DRAM)、相變化存儲器(PCM)或這兩者的組合。對于至少一個實施例,控制器中樞320經(jīng)由諸如前側(cè)總線(FSB)之類的多點總線(mult1-drop bus)、諸如快速通道互連(QPI)之類的點對點接口、或者類似的連接395與處理器310、315進行通信。
[0051]在一個實施例中,協(xié)處理器345是專用處理器,諸如例如高吞吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。在一個實施例中,控制器中樞320可以包括集成圖形加速計。
[0052]按照包括架構(gòu)、微架構(gòu)、熱、功耗特征等等優(yōu)點的度量譜,物理資源310、315之間存在各種差別。
[0053]在一個實施例中,處理器310執(zhí)行控制一般類型的數(shù)據(jù)處理操作的指令。嵌入在這些指令中的可以是協(xié)處理器指令。處理器310識別如具有應(yīng)當由附連的協(xié)處理器345執(zhí)行的類型的這些協(xié)處理器指令。因此,處理器310在協(xié)處理器總線或者其他互連上將這些協(xié)處理器指令(或者表示協(xié)處理器指令的控制信號)發(fā)布到協(xié)處理器345。協(xié)處理器345接受并執(zhí)行所接收的協(xié)處理器指令。
[0054]現(xiàn)在參考圖4,示出了根據(jù)本發(fā)明的一個實施例的第一更專用的示例性系統(tǒng)400的框圖。如圖4所示,多處理器系統(tǒng)400是點對點互連系統(tǒng),并包括經(jīng)由點對點互連450耦合的第一處理器470和第二處理器480。處理器470和480中的每一個都可以是處理器200的某一版本。在本發(fā)明的一個實施例中,處理器470和480分別是處理器310和315,而協(xié)處理器438是協(xié)處理器345。在另一實施例中,處理器470和480分別是處理器310和協(xié)處理器345。
[0055]處理器470和480被示為分別包括集成存儲器控制器(MC)單元472和482。處理器470還包括作為其總線控制器單元的一部分的點對點(P-P)接口 476和478 ;類似地,第二處理器480包括點對點接口 486和488。處理器470、480可以使用點對點(P-P)電路478、488經(jīng)由P-P接口 450來交換信息。如圖4所示,IMC 472和482將各處理器耦合至相應(yīng)的存儲器,即存儲器432和存儲器434,這些存儲器可以是本地附連至相應(yīng)的處理器的主存儲器的一部分。
[0056]處理器470、480可各自經(jīng)由使用點對點接口電路476、494、486、498的各個P-P接口 452、454與芯片組490交換信息。芯片組490可以可選地經(jīng)由高性能接口 439與協(xié)處理器438交換信息。在一個實施例中,協(xié)處理器438是專用處理器,諸如例如高吞吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。
[0057]共享高速緩存(未示出)可以被包括在任一處理器之內(nèi)或被包括兩個處理器外部但仍經(jīng)由P-P互連與這些處理器連接,從而如果將某處理器置于低功率模式時,可將任一處理器或兩個處理器的本地高速緩存信息存儲在該共享高速緩存中。
[0058]芯片組490可經(jīng)由接口 496耦合至第一總線416。在一個實施例中,第一總線416可以是外圍部件互連(PCI)總線,或諸如PCI Express總線或其它第三代I/O互連總線之類的總線,但本發(fā)明的范圍并不受此限制。
[0059]如圖4所示,各種I/O設(shè)備414可以連同總線橋418耦合到第一總線416,總線橋418將第一總線416耦合至第二總線420。在一個實施例中,諸如協(xié)處理器、高吞吐量MIC處理器、GPGPU的處理器、加速計(諸如例如圖形加速計或數(shù)字信號處理器(DSP)單元)、場可編程門陣列或任何其他處理器的一個或多個附加處理器415被耦合到第一總線416。在一個實施例中,第二總線420可以是低引腳計數(shù)(LPC)總線。各種設(shè)備可以被耦合至第二總線420,在一個實施例中這些設(shè)備包括例如鍵盤/鼠標422、通信設(shè)備427以及諸如可包括指令/代碼和數(shù)據(jù)430的盤驅(qū)動器或其它海量存儲設(shè)備的存儲單元428。此外,音頻I/0424可以被耦合至第二總線420。注意,其它架構(gòu)是可能的。例如,取代圖4的點對點架構(gòu),系統(tǒng)可以實現(xiàn)多站總線或其它這類架構(gòu)。
[0060]現(xiàn)在參考圖5,示出了根據(jù)本發(fā)明的一個實施例的第二更專用的示例性系統(tǒng)500的框圖。圖4和5中的類似元件使用類似附圖標記,且在圖5中省略了圖4的某些方面以避免混淆圖5的其它方面。
[0061]圖5示出處理器470、480可分別包括集成存儲器和I/O控制邏輯(“CL”)472和482。因此,CL 472、482包括集成存儲器控制器單元并包括I/O控制邏輯。圖5不僅示出耦合至CL 472,482的存儲器432、434,而且還示出同樣耦合至控制邏輯472、482的I/O設(shè)備514。傳統(tǒng)I/O設(shè)備515被耦合至芯片組490。
[0062]現(xiàn)在參照圖6,所示出的是根據(jù)本發(fā)明一個實施例的SoC 600的框圖。在圖2中,相似的部件具有同樣的附圖標記。另外,虛線框是更先進的SoC的可選特征。在圖6中,互連單元(多個)602被耦合至:應(yīng)用處理器610,該應(yīng)用處理器包括一個或多個核202A-N的集合以及共享高速緩存單元206 ;系統(tǒng)代理單元210 ;總線控制器單元216 ;集成存儲器控制器單元214 ;—組或一個或多個協(xié)處理器620,其可包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態(tài)隨機存取存儲器(SRAM)單元630 ;直接存儲器訪問(DMA)單元632 ;以及用于耦合至一個或多個外部顯示器的顯示單元640。在一個實施例中,協(xié)處理器620包括專用處理器,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、GPGPU、高吞吐量MIC處理器、或嵌入式處理器等等。
[0063]本文公開的機制的各實施例可以被實現(xiàn)在硬件、軟件、固件或這些實現(xiàn)方法的組合中。本發(fā)明的實施例可實現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計算機程序或程序代碼,該可編程系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設(shè)備以及至少一個輸出設(shè)備。
[0064]可將程序代碼(諸如圖4中解說的代碼430)應(yīng)用于輸入指令,以執(zhí)行本文描述的各功能并生成輸出信息。輸出信息可以按已知方式被應(yīng)用于一個或多個輸出設(shè)備。為了本申請的目的,處理系統(tǒng)包括具有諸如例如數(shù)字信號處理器(DSP)、微控制器、專用集成電路(ASIC)或微處理器之類的處理器的任何系統(tǒng)。
[0065]程序代碼可以用高級程序化語言或面向?qū)ο蟮木幊陶Z言來實現(xiàn),以便與處理系統(tǒng)通信。程序代碼也可以在需要的情況下用匯編語言或機器語言來實現(xiàn)。事實上,本文中描述的機制不僅限于任何特定編程語言的范圍。在任一情形下,語言可以是編譯語言或解釋
;五古
P口口 ο
[0066]至少一個實施例的一個或多個方面可以由存儲在機器可讀介質(zhì)上的表征性指令來實現(xiàn),該指令表示處理器中的各種邏輯,該指令在被機器讀取時使得該機器制作用于執(zhí)行本文所述的技術(shù)的邏輯。被稱為“IP核”的這些表示可以被存儲在有形的機器可讀介質(zhì)上,并被提供給多個客戶或生產(chǎn)設(shè)施以加載到實際制造該邏輯或處理器的制造機器中。
[0067]這樣的機器可讀存儲介質(zhì)可以包括但不限于通過機器或設(shè)備制造或形成的物品的非瞬態(tài)、有形安排,其包括存儲介質(zhì),諸如硬盤;任何其它類型的盤,包括軟盤、光盤、緊致盤只讀存儲器(CD-ROM)、緊致盤可重寫(CD-RW)的以及磁光盤;半導(dǎo)體器件,例如只讀存儲器(ROM)、諸如動態(tài)隨機存取存儲器(DRAM)和靜態(tài)隨機存取存儲器(SRAM)的隨機存取存儲器(RAM)、可擦除可編程只讀存儲器(EPROM)、閃存、電可擦除可編程只讀存儲器(EEPROM);相變化存儲器(PCM);磁卡或光卡;或適于存儲電子指令的任何其它類型的介質(zhì)。[0068]因此,本發(fā)明的各實施例還包括非瞬態(tài)、有形機器可讀介質(zhì),該介質(zhì)包含指令或包含設(shè)計數(shù)據(jù),諸如硬件描述語言(HDL),它定義本文中描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特性。這些實施例也被稱為程序產(chǎn)品。
[0069]在某些情況下,指令轉(zhuǎn)換器可用來將指令從源指令集轉(zhuǎn)換至目標指令集。例如,指令轉(zhuǎn)換器可以變換(例如使用靜態(tài)二進制變換、包括動態(tài)編譯的動態(tài)二進制變換)、變形、仿真或以其它方式將指令轉(zhuǎn)換成將由核來處理的一個或多個其它指令。指令轉(zhuǎn)換器可以用軟件、硬件、固件、或其組合實現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、在處理器外、或者部分在處理器上部分在處理器外。
[0070]圖7是根據(jù)本發(fā)明的各實施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進制指令轉(zhuǎn)換成目標指令集中的二進制指令的框圖。在所示的實施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但作為替代該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來實現(xiàn)。圖7示出了用高級語言702的程序可以使用x86編譯器704來編譯,以生成可以由具有至少一個x86指令集核716的處理器原生執(zhí)行的x86 二進制代碼706。具有至少一個x86指令集核716的處理器表示任何處理器,這些處理器能通過兼容地執(zhí)行或以其他方式處理以下內(nèi)容來執(zhí)行與具有至少一個x86指令集核的英特爾處理器基本相同的功能:1)英特爾x86指令集核的指令集的本質(zhì)部分,或2)被定向為在具有至少一個x86指令集核的英特爾處理器上運行的應(yīng)用或其它程序的對象代碼版本,以便取得與具有至少一個x86指令集核的英特爾處理器基本相同的結(jié)果。x86編譯器704表示用于生成x86 二進制代碼706 (例如,對象代碼)的編譯器,該二進制代碼706可通過或不通過附加的鏈接處理在具有至少一個x86指令集核716的處理器上執(zhí)行。類似地,圖7示出用高級語言702的程序可以使用替代的指令集編譯器708來編譯,以生成可以由不具有至少一個x86指令集核714的處理器(例如具有執(zhí)行加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集,和/或執(zhí)行加利福尼亞州桑尼維爾市的ARM控股公司的ARM指令集的核的處理器)原生執(zhí)行的替代指令集二進制代碼710。指令轉(zhuǎn)換器712被用來將x86 二進制代碼706轉(zhuǎn)換成可以由不具有x86指令集核714的處理器原生執(zhí)行的代碼。該轉(zhuǎn)換后的代碼不大可能與替換性指令集二進制代碼710相同,因為能夠這樣做的指令轉(zhuǎn)換器難以制造;然而,轉(zhuǎn)換后的代碼將完成一般操作并由來自替換性指令集的指令構(gòu)成。因此,指令轉(zhuǎn)換器712通過仿真、模擬或任何其它過程來表示允許不具有x86指令集處理器或核的處理器或其它電子設(shè)備執(zhí)行x86 二進制代碼706的軟件、固件、硬件或其組合。
[0071 ] 本發(fā)明用于滑動窗口數(shù)據(jù)訪問的實施例
[0072]以下描述的本發(fā)明的實施例包括用于提供對連續(xù)和重疊的數(shù)據(jù)流的迭代訪問的指令。這些實施例提供優(yōu)于需要多次相繼的存儲器訪問操作的當前已知技術(shù)的顯著優(yōu)點。在一個實施例中,響應(yīng)于單個指令的執(zhí)行,對連續(xù)且重疊的數(shù)據(jù)流的所有迭代訪問被加載到若干物理寄存器,從而有效地展開若干迭代上的循環(huán),從而節(jié)約存儲器訪問,節(jié)約微架構(gòu)緩沖器(例如重排序緩沖器和填充緩沖器),通過避免多次分裂來提高性能,以及潛在地節(jié)約高速緩存的功率。
[0073]圖9示出根據(jù)本發(fā)明的一個實施例配置在處理器910內(nèi)的滑動窗口訪問(SWA)邏輯905。在一個實施例中,SWA邏輯905執(zhí)行指令(以下描述它的一些實施例)以從存儲器并發(fā)檢索數(shù)據(jù)流915的多個部分并將所檢索的部分存儲到多個內(nèi)部寄存器——在圖9中標識為ZMMl至ZMM5。在所示的特定示例中,數(shù)據(jù)元素a-g被獲取并存儲在ZMMl中,數(shù)據(jù)元素b-h被獲取并存儲在ZMM2中,數(shù)據(jù)元素c-1被獲取并存儲在ZMM3中,數(shù)據(jù)元素d_j被獲取并存儲在ZMM4中,數(shù)據(jù)元素e-k被獲取并存儲在ZMM5中。如所指出的,為了簡單起見,在圖9中僅示出五個寄存器。然而,應(yīng)理解,本發(fā)明的基本原理可用于獲取數(shù)據(jù)流的多個部分并將其存儲在任意數(shù)量的寄存器中。
[0074]作為另一個例示,本發(fā)明的一個實施例可由以下的偽代碼表示:
[0075]For (i = O ;i<X, i++) {//X 是 16 的倍數(shù)且 i 大于 4*16 迭代
[0076]Yl = memory [i];
[0077]Y2 = memory [i+1];
[0078]Y3 = memory [i+2];
[0079]…
[0080]Y16 = memory [i+15];
[0081]}
[0082]在該示例中,最初的16個數(shù)據(jù)元素被獲取并存儲在Yl中(在地址i),接下來的16個數(shù)據(jù)元素(在地址i+Ι)被獲取并存儲在Y2中,諸如此類,直到在i+15的16個數(shù)據(jù)元素被獲取并存儲在Y16中。應(yīng)注意本發(fā)明的基本原理不限于跨距I (即檢索數(shù)據(jù)流的部分分隔I個數(shù)據(jù)元素),但可用于任何跨距,諸如順序地訪問接下來的每2個數(shù)據(jù)元素。
[0083]在一些實施例中,單個指令由SWA邏輯執(zhí)行以進行這些操作,在本文中稱為SlidingffindowAccess (滑動窗口訪問),如本文所述地其獲取進入若干物理寄存器的連續(xù)且重疊的數(shù)據(jù)流。該指令的一個實施例的語法如下:
[0084]SlidingffindowAccess[PS/PD]StartingPhysicalVectorRegister, NoIterativeAccesses, StartingMemoryLocation (開始物理矢量寄存器,非迭代訪問,開始存儲器位置)
[0085]該指令實施例的各組分包括以下:
[0086]1.SlidinRffindowAccessTPS/PDl:類似于浮點矢量指令,它指示要獲取的數(shù)據(jù)的大小。PS指的是標量浮點數(shù)據(jù)(例如,4字節(jié))且H)指的是雙浮點數(shù)據(jù)(例如,8字節(jié))。在替換實施例,可生成整數(shù)矢量形式,諸如SlidingWindowAccess[D/Q],該指令可加載打包雙字(DWORD)⑶或四字(QWORD) (Q)整數(shù)元素。本發(fā)明的基本原理不限于任何具體的數(shù)據(jù)類型。
[0087]2.StartinRMemoryLocation(開始存儲器位置):該指示符提供指向獲取數(shù)據(jù)元素的開始存儲器位置(例如圖9中的addrO)的指針。
[0088]3.NolterativeAccesses (迭代訪間數(shù)量):該指示符指定對連續(xù)且重疊的數(shù)據(jù)流的迭代訪問的數(shù)量。例如,在以上的偽代碼示例中,迭代訪問的數(shù)量被設(shè)定為16。本發(fā)明的基本原理不限于任何具體數(shù)量的迭代訪問。
[0089]4.StartingPhysicalVectorRegister (開始物理矢量寄存器):該指不符設(shè)定數(shù)據(jù)元素被存儲到的第一 物理矢量寄存器(例如,XMM, YMM或ZMM)。
[0090]作為示例,以下的值可用于以上指令的執(zhí)行:
[0091]SlidingffindowAccessPS ZMM1, 4, [MemLocation]
[0092]在該示例中,數(shù)據(jù)流的以下部分被檢索并存儲在以下寄存器中:
[0093]ZMMl =開始于 MemLocation (Mem 位置)的 I6SP 值[0094]ZMM2 =開始于 MemLocation+1 的 16SP 值
[0095]ZMM3 =開始于 MemLocation+2 的 16SP 值
[0096]ZMM4 =開始于 MemLocation+3 的 16SP 值
[0097]因此,僅需要2個不同的存儲器請求來進行以上操作,例如,獲取第一組高速緩存線和下一組高速緩存線。在內(nèi)部,SWA邏輯905合并各種不同的所獲取的值并將其存儲在寄存器中。因此,如果這在諸如循環(huán)之類的迭代代碼中,則這將有效地在4次迭代中展開循環(huán)。
[0098]圖10示出根據(jù)本發(fā)明的一個實施例的方法。在1001,執(zhí)行SWA指令,指定要讀取的數(shù)據(jù)元素的組的數(shù)量(即,在示例中計數(shù)M)、滑動值(即,相繼的數(shù)據(jù)獲取之間的距離)以及存儲數(shù)據(jù)元素的組的寄存器。在1002,設(shè)定獲取數(shù)據(jù)元素的地址。例如,對于滑動值S,可將數(shù)據(jù)元素設(shè)定為N、N+S、N+2S等。在1003,選擇存儲數(shù)據(jù)元素的集合的M個寄存器;以及在1004,數(shù)據(jù)元素被獲取并存儲在M個指定的寄存器中。
[0099]總而言之,本文描述的本發(fā)明的實施例執(zhí)行單個指令以從存儲在存儲器中的數(shù)據(jù)流獲取并存儲多組數(shù)據(jù)元素。這些實施例提供優(yōu)于當前技術(shù)的顯著優(yōu)點,現(xiàn)有技術(shù)的缺點是增加指令數(shù),導(dǎo)致代碼膨脹以及花費在合并指令之間的相關(guān)性上的潛在可能的增加的循環(huán)。另外,與當前技術(shù)相比,本發(fā)明的實施例導(dǎo)致處理器內(nèi)降低的執(zhí)行端口壓力和減少的內(nèi)部緩沖器使用(例如,重排序緩沖器和填充緩沖器)。
[0100]本發(fā)明的實施例可以包括以上描述的各個步驟。這些步驟可在用于導(dǎo)致通用或?qū)S锰幚砥鲌?zhí)行步驟的機器可執(zhí)行指令中實現(xiàn)。另選地,這些步驟可由包含用于執(zhí)行這些步驟的硬連線邏輯的專用硬件組件來執(zhí)行,或由編程的計算機組件和自定義的硬件組件的任何組合來執(zhí)行。
[0101]如在此所述的,指令可以指硬件的具體配置,如被配置成執(zhí)行特定操作或具有預(yù)定功能的專用集成電路(ASIC)或者存儲在嵌入非暫態(tài)計算機可讀介質(zhì)中的存儲器中的軟件指令。因而,附圖中示出的技術(shù)可以使用存儲在一個或多個電子設(shè)備(例如,終端站、網(wǎng)絡(luò)元件等等)并在其上執(zhí)行的代碼和數(shù)據(jù)來實現(xiàn)。此類電子設(shè)備通過使用諸如非暫態(tài)計算機機器可讀存儲介質(zhì)(例如,磁盤;光盤;隨機存取存儲器;只讀存儲器;閃存設(shè)備;相變存儲器)之類的計算機機器可讀介質(zhì)和暫態(tài)計算機機器可讀通信介質(zhì)(例如,電、光、聲或其它形式的傳播信號——諸如載波、紅外信號、數(shù)字信號等)來(內(nèi)部地和/或通過網(wǎng)絡(luò)與其他電子設(shè)備)存儲和傳遞代碼和數(shù)據(jù)。另外,這類電子設(shè)備一般包括與一個或多個其它組件耦合的一組一個或多個處理器,所述一個或多個其它組件例如是一個或多個存儲設(shè)備(非暫態(tài)機器可讀存儲介質(zhì))、用戶輸入/輸出設(shè)備(例如鍵盤、觸摸屏和/或顯示器)以及網(wǎng)絡(luò)連接。該組處理器和其它組件的耦合一般是通過一個或多個總線和橋(也稱總線控制器)達成的。存儲設(shè)備和攜帶網(wǎng)絡(luò)流量的信號分別表示一個或多個機器可讀存儲介質(zhì)以及機器可讀通信介質(zhì)。因此,給定電子設(shè)備的存儲設(shè)備通常存儲代碼和/或數(shù)據(jù)以供在該電子設(shè)備的一個或多個處理器上執(zhí)行。當然,本發(fā)明的實施例的一個或多個部分可使用軟件、固件和/或硬件的不同組合來實現(xiàn)。貫穿此詳細描述,為解釋起見,闡明了眾多具體細節(jié)以提供對本發(fā)明的全面理解。然而,對本領(lǐng)域技術(shù)人員將顯而易見的是,沒有這些具體細節(jié)也可實踐本發(fā)明。在某些實例中,并不詳細描述眾所周知的結(jié)構(gòu)和功能以免淡化本發(fā)明的主題。因此,本發(fā)明的范圍和精神應(yīng)根據(jù)所附權(quán)利要求書來判斷。[0102]示例性指令格式
[0103]本文中所描述的指令的實施例可以不同的格式體現(xiàn)。另外,在下文中詳述示例性系統(tǒng)、架構(gòu)、以及流水線。指令的實施例可在這些系統(tǒng)、架構(gòu)、以及流水線上執(zhí)行,但是不限于詳述的系統(tǒng)、架構(gòu)、以及流水線。
[0104]VEX編碼允許指令具有兩個以上操作數(shù),并且允許SMD矢量寄存器比128比特長。VEX前綴的使用提供了三個操作數(shù)(或者更多)句法。例如,先前的兩個操作數(shù)指令執(zhí)行改寫源操作數(shù)的操作(諸如A = A+B)。VEX前綴的使用使操作數(shù)執(zhí)行非破壞性操作,諸如A = B+C。
[0105]圖1IA示出示例性AVX指令格式,包括VEX前綴1102、實操作碼字段1130、MoDR/M字節(jié)1140、SIB字節(jié)1150、位移字段1162以及IMM8 1172。圖1lB示出來自圖1lA的哪些字段構(gòu)成完整操作碼字段1174和基礎(chǔ)操作字段1142。圖1lC示出來自圖1lA的哪些字段構(gòu)成寄存器索引字段1144。
[0106]VEX前綴(字節(jié)0-2) 1102以三字節(jié)形式進行編碼。第一字節(jié)是格式字段1140 (VEX字節(jié)0,比特[7:0]),該格式字段1140包含明確的C4字節(jié)值(用于區(qū)分C4指令格式的唯一值)。第二-第三字節(jié)(VEX字節(jié)1-2)包括提供專用能力的大量比特字段。具體地,REX字段1105 (VEX字節(jié)1,比特[7-5])由VEX.R比特字段(VEX字節(jié)1,比特[7] - R) ,VEX.X比特字段(VEX字節(jié)1,比特[6] - X)以及VEX.B比特字段(VEX字節(jié)1,比特[5] - B)組成。這些指令的其他字段對如在本領(lǐng)域中已知的寄存器索引的較低三個比特(rrr、xxx以及bbb)進行編碼,由此Rrrr、Xxxx以及Bbbb可通過增加VEX.R、VEX.X以及VEX.B來形成。操作碼映射字段1115 (VEX字節(jié)1,比特[4:0] - mmmmm)包括對隱含的領(lǐng)先操作碼字節(jié)進行編碼的內(nèi)容。W字段1164 (VEX字節(jié)2,比特[7] -W)由記號VEX.W表示,并且取決于該指令提供了不同的功能。VEX.VVW 1120(VEX字節(jié)2,比特[6:3]_vvvv)的作用可包括如下:1)VEX.VVVV對以顛倒(1(多個)補碼)的形式指定第一源寄存器操作數(shù)進行編碼,且對具有兩個或兩個以上源操作數(shù)的指令有效;2)VEX.VVVV針對特定矢量位移對以I (多個)補碼的形式指定的目的地寄存器操作數(shù)進行編碼;或者3) VEX.WW不對任何操作數(shù)進行編碼,保留該字段,并且應(yīng)當包含1111b。如果VEX.L1168大小的字段(VEX字節(jié)2,比特[2]-L) = 0,則它指示128比特矢量;如果VEX.L = 1,則它指示256比特矢量。前綴編碼字段1125 (VEX字節(jié)2,比特[1:0]-ρρ)提供了用于基礎(chǔ)操作字段的附加位。
[0107]實操作碼字段1130(字節(jié)3)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中指定。
[0108]MOD R/Μ 字段 1140(字節(jié) 4)包括 MOD 字段 1142(比特[7-6])、Reg 字段 1144(比特[5-3])、以及R/Μ字段1146(比特[2_0])。Reg字段1144的作用可包括如下:對目的地寄存器操作數(shù)或源寄存器操作數(shù)(RffT中的rrr)進行編碼;或者被視為操作碼擴展且不用于對任何指令操作數(shù)進行編碼。R/Μ字段1146的作用可包括如下:對參考存儲器地址的指令操作數(shù)進行編碼;或者對目的地寄存器操作數(shù)或源寄存器操作數(shù)進行編碼。
[0109]縮放索引基址(SIB) —縮放字段1150(字節(jié)5)的內(nèi)容包括用于存儲器地址生成的SSl 152 (位[7-6])。先前已經(jīng)針對寄存器索引Xxxx和Bbbb參考了 SIB.xxx 1154(比特[5-3])和 SIB.bbb 1156(比特[2-0])的內(nèi)容。
[0110]位移字段1162和立即數(shù)字段(IMM8)1172包含地址數(shù)據(jù)。[0111]矢量友好指令格式是適于矢量指令(例如,存在專用于矢量操作的特定字段)的指令格式。盡管描述了其中通過矢量友好指令格式支持矢量和標量操作兩者的實施例,但是替換實施例只通過矢量友好指令格式使用矢量操作。
[0112]圖12A-12B是示出根據(jù)本發(fā)明的實施例的通用矢量友好指令格式及其指令模板的方框圖。圖12A是示出根據(jù)本發(fā)明的實施例的通用矢量友好指令格式及其A類指令模板的框圖;而圖12B是示出根據(jù)本發(fā)明的實施例的通用矢量友好指令格式及其B類指令模板的框圖。具體地,針對通用矢量友好指令格式1200定義A類和B類指令模板,兩者包括無存儲器訪問1205的指令模板和存儲器訪問1220的指令模板。在矢量友好指令格式的上下文中的術(shù)語通用指不綁定到任何專用指令集的指令格式。
[0113]盡管將描述其中矢量友好指令格式支持以下:64字節(jié)矢量操作數(shù)長度(或大小)與32比特(4字節(jié))或64比特(8字節(jié))數(shù)據(jù)元素寬度(或大小)(并且由此,64字節(jié)矢量由16雙字大小的元素或者替換地8雙字大小的元素組成)、64字節(jié)矢量操作數(shù)長度(或大小)與16比特(2字節(jié))或8比特(I字節(jié))數(shù)據(jù)元素寬度(或大小)、32字節(jié)矢量操作數(shù)長度(或大小)與32比特(4字節(jié))、64比特(8字節(jié))、16比特(2字節(jié))、或8比特(I字節(jié))數(shù)據(jù)元素寬度(或大小)、以及16字節(jié)矢量操作數(shù)長度(或大小)與32比特(4字節(jié))、64比特(8字節(jié))、16比特(2字節(jié))、或8比特(I字節(jié))數(shù)據(jù)元素寬度(或大小)的本發(fā)明的實施例,但是替換實施例可支持更大、更小、和/或不同的矢量操作數(shù)大小(例如,256字節(jié)矢量操作數(shù))與更大、更小或不同的數(shù)據(jù)元素寬度(例如,128比特(16字節(jié))數(shù)據(jù)元素寬度)。
[0114]圖12A中的A類指令模板包括:1)在無存儲器訪問1205的指令模板內(nèi),示出無存儲器訪問的全部舍入(round)控制型操作1210的指令模板、以及無存儲器訪問的數(shù)據(jù)變換型操作1215的指令模板;以及2)在存儲器訪問1220的指令模板內(nèi),示出存儲器訪問的時間1225的指令模板和存儲器訪問的非時間1230的指令模板。圖12B中的B類指令模板包括:1)在無存儲器訪問1205的指令模板內(nèi),示出無存儲器訪問的寫掩碼控制的部分舍入控制型操作1212的指令模板以及無存儲器訪問的寫掩碼控制的vsize型操作1217的指令模板;以及2)在存儲器訪問1220的指令模板內(nèi),示出存儲器訪問的寫掩碼控制1227的指令模板。
[0115]通用矢量友好指令格式1200包括以下列出以在圖12A-12B中示出順序的如下字段。
[0116]格式字段1240 —該字段中的特定值(指令格式標識符值)唯一地標識矢量友好指令格式,并且由此標識指令在指令流中以矢量友好指令格式出現(xiàn)。由此,該字段在無需只有通用矢量友好指令格式的指令集的意義上是任選的。
[0117]基礎(chǔ)操作字段1242 —其內(nèi)容區(qū)分不同的基礎(chǔ)操作。
[0118]寄存器索引字段1244-其內(nèi)容直接或者通過地址生成指定源或目的地操作數(shù)在寄存器中或者在存儲器中的位置。這些字段包括足夠數(shù)量的比特以從PxQ (例如,32x512、16x128,32x1024,64x1024)個寄存器組選擇N個寄存器。盡管在一個實施例中N可高達三個源和一個目的地寄存器,但是替換實施例可支持更多或更少的源和目的地寄存器(例如,可支持高達兩個源,其中這些源中的一個源還用作目的地,可支持高達三個源,其中這些源中的一個源還用作目的地,可支持高達兩個源和一個目的地)。[0119]修飾符(modifier)字段1246 —其內(nèi)容將以指定存儲器訪問的通用矢量指令格式出現(xiàn)的指令與不指定存儲器訪問的通用矢量指令格式出現(xiàn)的指令區(qū)分開;即在無存儲器訪問1205的指令模板與存儲器訪問1220的指令模板之間。存儲器訪問操作讀取和/或?qū)懭氲酱鎯ζ鞯燃?在一些情況下,使用寄存器中的值來指定源和/或目的地地址),而非存儲器訪問操作不這樣(例如,源和/或目的地是寄存器)。盡管在一個實施例中,該字段還在三種不同的方式之間選擇以執(zhí)行存儲器地址計算,但是替換實施例可支持更多、更少或不同的方式來執(zhí)行存儲器地址計算。
[0120]擴充操作字段1250 —其內(nèi)容區(qū)分除基礎(chǔ)操作以外要執(zhí)行各種不同操作中的哪一個操作。該字段是上下文專用的。在本發(fā)明的一個實施例中,該字段被分成類字段1268、α字段1252、以及β字段1254。擴充操作字段1250允許在單一指令而非2、3或4個指令中執(zhí)行多組共同的操作。
[0121]縮放字段1260 —其內(nèi)容允許用于存儲器地址生成(例如,用于使用索引+基址的地址生成)的索引字段的內(nèi)容的縮放。
[0122]位移字段1262Α —其內(nèi)容用作存儲器地址生成的一部分(例如,用于使用2--*索引+基址+位移的地址生成)。
[0123]位移因數(shù)字段1262Β(注意,位移字段1262Α直接在位移因數(shù)字段1262Β上的并置指示使用一個或另一個)一其內(nèi)容用作地址生成的一部分,它指定由存儲器訪問的大小(N)縮放的位移因數(shù),其中N是存儲器訪問中的字節(jié)數(shù)量(例如,用于使用2^^*索引+基址+縮放的位移的地址生成)。忽略冗余的低階位,并且因此位移因數(shù)字段的內(nèi)容乘以存儲器操作數(shù)總大小以生成在計算有效地址中使用的最終位移。N的值由處理器硬件在運行時基于完整操作碼字段1274(稍候在本文中描述)和數(shù)據(jù)操縱字段1254C確定。位移字段1262A和位移因數(shù)字段 1262B在它們不用于無存儲器訪問1205的指令模板和/或不同的實施例可實現(xiàn)兩者中的僅一個或均未實現(xiàn)的意義上是任選的。
[0124]數(shù)據(jù)元素寬度字段1264 —其內(nèi)容區(qū)分使用大量數(shù)據(jù)元素寬度中的哪一個(在一些實施例中用于所有指令,在其他實施例中只用于一些指令)。該字段在如果支持僅一個數(shù)據(jù)元素寬度和/或使用操作碼的某一方面支持數(shù)據(jù)元素寬度則不需要的意義上是任選的。
[0125]寫掩碼字段1270 —其內(nèi)容在每一數(shù)據(jù)元素位置的基礎(chǔ)上控制目的地矢量操作數(shù)中的數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴充操作的結(jié)果。A類指令模板支持合并-寫掩碼,而B類指令模板支持合并寫掩碼和歸零寫掩碼兩者。當合并的矢量掩碼允許在執(zhí)行任何操作(由基礎(chǔ)操作和擴充操作指定)期間保護目的地中的任何元素集免于更新時,在另一實施例中,保持其中對應(yīng)掩碼比特具有O的目的地的每一元素的舊值。相反,當歸零矢量掩碼允許在執(zhí)行任何操作(由基礎(chǔ)操作和擴充操作指定)期間使目的地中的任何元素集歸零時,在一個實施例中,目的地的元素在對應(yīng)掩碼比特具有O值時被設(shè)為O。該功能的子集是控制執(zhí)行的操作的矢量長度的能力(即,從第一個到最后一個要修改的元素的跨度),然而,修改的元素連續(xù)是不必要的。由此,寫掩碼字段1270允許部分矢量操作,包括加載、存儲、算術(shù)、邏輯等。盡管描述了其中寫掩碼字段1270的內(nèi)容選擇大量寫掩碼寄存器中的包含要使用的寫掩碼的一個寫掩碼寄存器(并且由此寫掩碼字段1270的內(nèi)容間接地標識要執(zhí)行的那個掩碼)的本發(fā)明的實施例,但是替換實施例相反或另外允許掩碼寫字段1270的內(nèi)容直接地指定要執(zhí)行的掩碼。[0126]立即數(shù)字段1272 —其內(nèi)容允許對立即數(shù)的規(guī)范。該字段在實現(xiàn)不支持立即數(shù)的通用矢量友好格式中不存在且在不使用立即數(shù)的指令中不存在的意義上是任選的。
[0127]類字段1268 —其內(nèi)容在指令的不同的類之間進行區(qū)分。參考圖12A-B,該字段的內(nèi)容在A類和B類指令之間進行選擇。在圖12A-B中,圓角方形用于指示專用值存在于字段中(例如,在圖12A-B中分別用于類字段1268的A類1268A和B類1268B)。
[0128]A類指令模板
[0129]在A類非存儲器訪問1205的指令模板的情況下,α字段1252被解釋為其內(nèi)容區(qū)分要執(zhí)行不同擴充操作類型中的哪一種(例如,針對無存儲器訪問的舍入型操作1210和無存儲器訪問的數(shù)據(jù)變換型操作1215的指令模板分別指定舍入1252Α.1和數(shù)據(jù)變換1252Α.2)的RS字段1252Α,而β字段1254區(qū)分要執(zhí)行指定類型的操作中的哪一種。在無存儲器訪問1205指令模板中,縮放字段1260、位移字段1262Α以及位移縮放字段1262Β不存在。
[0130]無存儲器訪問的指令模板一全部舍入控制型操作
[0131]在無存儲器訪問的全部舍入控制型操作1210的指令模板中,β字段1254被解釋為其內(nèi)容提供靜態(tài)舍入的舍入控制字段1254Α。盡管在本發(fā)明的所述實施例中舍入控制字段1254Α包括抑制所有浮點異常(SAE)字段1256和舍入操作控制字段1258,但是替換實施例可支持、可將這些概念兩者都編碼成相同的字段或者只有這些概念/字段中的一個或另一個(例如,可只有舍入操作控制字段1258)。
[0132]SAE字段1256 —其內(nèi)容區(qū)分是否停用異常事件報告;當SAE字段1256的內(nèi)容指示啟用抑制時,給定指令不報告任何種類的浮點異常標志且不提起任何浮點異常處理器。
[0133]舍入操作控制字段1258 —其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段1258允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段1250的內(nèi)容覆蓋該寄存器值。
[0134]無存儲器清除的指令模板一數(shù)據(jù)變換型操作
[0135]在無存儲器訪問的數(shù)據(jù)變換型操作1215的指令模板中,β字段1254被解釋為數(shù)據(jù)變換字段1254Β,其內(nèi)容區(qū)分要執(zhí)行大量數(shù)據(jù)變換中的哪一個(例如,無數(shù)據(jù)變換、拌和、廣播)的。
[0136]在A類存儲器訪問1220的指令模板的情況下,α字段1252被解釋為驅(qū)逐提示字段1252Β,其內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪一個(在圖12Α中,為存儲器訪問時間1225指令模版和存儲器訪問非時間1230的指令模版分別指定時間1252Β.1和非時間1252Β.2)、而β字段1254被解釋為數(shù)據(jù)操縱字段1254C,其內(nèi)容區(qū)分要執(zhí)行大量數(shù)據(jù)操縱操作(也稱為基元(primitive))中的哪一個(例如,無操縱、廣播、源的向上轉(zhuǎn)換、以及目的地的向下轉(zhuǎn)換)。存儲器訪問1220的指令模版包括縮放字段1260、以及任選的位移字段1262A或位移縮放字段1262B。
[0137]矢量存儲器指令使用轉(zhuǎn)換支持來執(zhí)行來自存儲器的矢量負載并將矢量存儲到存儲器。如同有規(guī)律的矢量指令,矢量存儲器指令以數(shù)據(jù)元素式的方式與存儲器來回傳輸數(shù)據(jù),其中實際傳輸?shù)脑赜蛇x為寫掩碼的矢量掩碼的內(nèi)容闡述。
[0138]存儲器訪問的指令模版一時間[0139]時間數(shù)據(jù)是可能很快地重新使用足以從高速緩存受益的數(shù)據(jù)。然而,這是提示且不同的處理器可以不同的方式實現(xiàn)它,包括完全忽略該提示。
[0140]存儲器訪問的指令模版一非時間
[0141]非時間數(shù)據(jù)是不可能很快地重新使用足以從第一級高速緩存中的高速緩存受益且應(yīng)當給予驅(qū)逐優(yōu)先級的數(shù)據(jù)。然而,這是提示且不同的處理器可以不同的方式實現(xiàn)它,包括完全忽略該提不。
[0142]B類指令模板
[0143]在B類指令模板的情況下,α字段1252被解釋為寫掩碼控制(Z)字段1252C,其內(nèi)容區(qū)分由寫掩碼字段1270控制的寫掩碼應(yīng)當是合并還是歸零。
[0144]在B類非存儲器訪問1205的指令模板的情況下,β字段1254的一部分被解釋為RL字段1257Α,其內(nèi)容區(qū)分要執(zhí)行不同擴充操作類型中的哪一種(例如,針對無存儲器訪問的寫掩碼控制部分舍入控制類型操作1212的指令模版和無存儲器訪問的寫掩碼控制VSIZE型操作1217的指令模板分別指定舍入1257Α.1和矢量長度(VSIZE) 1257Α.2),而β字段1254的其余部分區(qū)分要執(zhí)行指定類型的操作中的哪一種。在無存儲器訪問1205指令模板中,縮放字段1260、位移字段1262Α以及位移縮放字段1262Β不存在。
[0145]在無存儲器訪問的寫掩碼控制的部分舍入控制型操作1210的指令模版中,β字段1254的其余部分被解釋為舍入操作字段1259Α,并且停用異常事件報告(給定指令不報告任何種類的浮點異常標志且不提起任何浮點異常處理器)。
[0146]舍入操作控制字段1259Α —只作為舍入操作控制字段1258,其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段1259Α允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段1250的內(nèi)容覆蓋該寄
存器值。
[0147]在無存儲器訪問的寫掩碼控制VSIZE型操作1217的指令模版中,β字段1254的其余部分被解釋為矢量長度字段1259Β,其內(nèi)容區(qū)分要執(zhí)行大量數(shù)據(jù)矢量長度中的哪一個(例如,128字節(jié)、256字節(jié)、或512字節(jié))。
[0148]在B類存儲器訪問1220的指令模版的情況下,β字段1254的一部分被解釋為廣播字段1257Β,其內(nèi)容區(qū)分是否要執(zhí)行廣播型數(shù)據(jù)操縱操作,而β字段1254的其余部分被解釋為矢量長度字段1259Β。存儲器訪問1220的指令模版包括縮放字段1260、以及任選的位移字段1262Α或位移縮放字段1262Β。
[0149]針對通用矢量友好指令格式1200,示出完整操作碼字段1274,包括格式字段1240、基礎(chǔ)操作字段1242以及數(shù)據(jù)元素寬度字段1264。盡管示出了其中完整操作碼字段1274包括所有這些字段的一個實施例,但是完整操作碼字段1274包括在不支持所有這些字段的實施例中的少于所有的這些字段。完整操作碼字段1274提供操作碼(opcode)。
[0150]擴充操作字段1250、數(shù)據(jù)元素寬度字段1264以及寫掩碼字段1270允許這些特征在每一指令的基礎(chǔ)上以通用矢量友好指令格式指定。
[0151]寫掩碼字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建各種類型的指令,其中這些指令允許基于不同的數(shù)據(jù)元素寬度應(yīng)用該掩碼。
[0152]在A類和B類內(nèi)找到的各種指令模版在不同的情形下是有益的。在本發(fā)明的一些實施例中,不同處理器或者處理器內(nèi)的不同核可只有支持僅A類、僅B類、或者可支持兩類。舉例而言,期望用于通用計算的高性能通用無序核可只支持B類,期望主要用于圖形和/或科學(吞吐量)計算的核可只支持A類,并且期望用于兩者的核可支持兩者(當然,具有來自兩類的模版和指令的一些混合的核,但是并非來自兩類的所有模版和指令都在本發(fā)明的權(quán)限內(nèi))。同樣,單一處理器可包括多個核,所有核支持相同的類或者其中不同的核支持不同的類。舉例而言,在具有分離的圖形和通用核的處理器中,圖形核中的期望主要用于圖形和/或科學計算的一個核可只支持A類,而通用核中的一個或多個可以是和期望用于通用計算的支持B類的無序執(zhí)行和寄存器重命名的高性能通用核。當然,在本發(fā)明的不同實施例中,來自一類的特征還可在其他類中實現(xiàn)。以高級語言撰寫的程序可被輸入(例如,僅僅按時間編譯或者統(tǒng)計編譯)到各種不同的可執(zhí)行形式,包括:1)只有用于執(zhí)行的目標處理器支持的類的指令的形式;或者2)具有使用所有類的指令的不同組合而撰寫的替換例程且具有選擇這些例程以基于由當前正在執(zhí)行代碼的處理器支持的指令而執(zhí)行的控制流代碼的形式。
[0153]示例性專用矢量友好指令格式
[0154]圖13A是示出根據(jù)本發(fā)明的實施例的示例性專用矢量友好指令格式的框圖。圖13A示出在其指定位置、大小、解釋和字段的次序、以及那些字段中的一些字段的值的意義上是專用的專用矢量友好指令格式1300。專用矢量友好指令格式1300可用于擴展x86指令集,并且由此一些字段類似于在現(xiàn)有x86指令集及其擴展(例如,AVX)中使用的那些字段或與之相同。該格式保持與具有擴展的現(xiàn)有x86指令集的前綴編碼字段、實操作碼字節(jié)字段、MOD R/Μ字段、SIB字段、位移字段、以及立即數(shù)字段一致。示出來自圖12的字段映射到的來自圖13的字段。
[0155]應(yīng)當理解,雖然出于說明的目的在通用矢量友好指令格式1200的上下文中,本發(fā)明的實施例參考專用矢量友好指令格式1300進行了描述,但是本發(fā)明不限于專用矢量友好指令格式1300,聲明的地方除外。例如,通用矢量友好指令格式1200構(gòu)想各種字段的各種可能的大小,而專用矢量友好指令格式1300被示為具有專用大小的字段。作為具體示例,盡管在專用矢量友好指令格式1300中數(shù)據(jù)元素寬度字段1264被示為一位字段,但是本發(fā)明不限于此(即,通用矢量友好指令格式1200構(gòu)想數(shù)據(jù)元素寬度字段1264的其他大小)。
[0156]通用矢量友好指令格式1200包括以下列出以在圖13A中示出的順序的如下字段。
[0157]EVEX前綴(字節(jié)0-3) 1302 —以四字節(jié)形式進行編碼。
[0158]格式字段1240(EVEX字節(jié)0,比特[7:0]) —第一字節(jié)(EVEX字節(jié)O)是格式字段1240,并且它包含0x62(在本發(fā)明的一個實施例中用于區(qū)分矢量友好指令格式的唯一值)。
[0159]第二-第四字節(jié)(EVEX字節(jié)1-3)包括提供專用能力的大量比特字段。
[0160]REX 字段 1305 (EVEX 字節(jié) I,位[7-5])—由 EVEX.R 位字段(EVEX 字節(jié) I,位[7]-R)、EVEX.X 位字段(EVEX 字節(jié) 1,位[6] - X)以及(1257BEX 字節(jié) 1,位[5] - B)組成。EVEX.R、EVEX.X和EVEX.B比特字段提供與對應(yīng)VEX比特字段相同的功能,并且使用(多個)I補碼的形式進行編碼,即ZMMO被編碼為1111B,ZMM15被編碼為0000B。這些指令的其他字段對如在本領(lǐng)域中已知的寄存器索引的較低三個比特(rrr、xxx、以及bbb)進行編碼,由此Rrrr、Xxxx以及Bbbb可通過增加EVEX.R、EVEX.X以及EVEX.B來形成。[0161]REX’字段1210 —這是REX’字段1210的第一部分,并且是用于對擴展的32個寄存器集合的較高16個或較低16個寄存器進行編碼的EVEX.R’比特字段(EVEX字節(jié)1,比特[4] -R,)。在本發(fā)明的一個實施例中,該位與以下指示的其他位一起以位顛倒的格式存儲以(在公知x86的32比特模式下)與其實操作碼字節(jié)是62的BOUND指令進行區(qū)分,但是在MOD R/M字段(在下文中描述)中不接受MOD字段中的值11 ;本發(fā)明的替換實施例不以顛倒的格式存儲該指示的位以及其他指示的位。值I用于對較低16個寄存器進行編碼。換句話說,通過組合EVEX.R’、EVEX.R、以及來自其他字段的其他RRR來形成R’ Rrrr。
[0162]操作碼映射字段1315 (EVEX字節(jié)1,比特[3:0] - _皿)-其內(nèi)容對隱含的領(lǐng)先操作碼字節(jié)(0F、0F38、或0F3)進行編碼。
[0163]數(shù)據(jù)元素寬度字段1264 (EVEX字節(jié)2,比特[7] - W)—由記號EVEX.W表示。EVEX.W用于定義數(shù)據(jù)類型(32比特數(shù)據(jù)元素或64比特數(shù)據(jù)元素)的粒度(大小)。
[0164]EVEX.VVW 1320 (EVEX 字節(jié) 2,比特[6:3]_vvvv) — EVEX.vvvv 的作用可包括如下:1)EVEX.VVVV對以顛倒((多個)1補碼)的形式指定的第一源寄存器操作數(shù)進行編碼且對具有兩個或兩個以上源操作數(shù)的指令有效;2)EVEX.vvvv針對特定矢量位移對以(多個)I補碼的形式指定的目的地寄存器操作數(shù)進行編碼;或者3)EVEX.vvvv不對任何操作數(shù)進行編碼,保留該字段,并且應(yīng)當包含1111b。由此,EVEX.vvvv字段1320對以顛倒((多個)1補碼)的形式存儲的第一源寄存器指定符的4個低階比特進行編碼。取決于該指令,額外不同的EVEX比特字段用于將指定符大小擴展到32個寄存器。
[0165]EVEX.U 1268類字段(EVEX字節(jié)2,比特[2]-U)—如果EVEX.U = O,則它指示A類或EVEX.U0,如果EVEX.U = 1,則它指示B類或EVEX.Ul。
[0166]前綴編碼字段1325 (EVEX字節(jié)2,比特[1:0]-ρρ) —提供了用于基礎(chǔ)操作字段的附加比特。除了對以EVEX前綴格式的傳統(tǒng)SSE指令提供支持以外,這也具有的壓縮SMD前綴的益處(EVEX前綴只需要2比特,而不是需要字節(jié)來表達SMD前綴)。在一個實施例中,為了支持使用以傳統(tǒng)格式和以EVEX前綴格式的SMD前綴(66H、F2H、F3H)的傳統(tǒng)SSE指令,這些傳統(tǒng)SMD前綴被編碼成SMD前綴編碼字段;并且在運行時在提供給解碼器的PLA之前被擴展成傳統(tǒng)SMD前綴(因此PLA可執(zhí)行傳統(tǒng)和EVEX格式的這些傳統(tǒng)指令,而無需修改)。雖然較新的指令可將EVEX前綴編碼字段的內(nèi)容直接作為操作碼擴展,但是為了一致性,特定實施例以類似的方式擴展,但允許由這些傳統(tǒng)SIMD前綴指定不同的含義。替換實施例可重新設(shè)計PLA以支持2比特SMD前綴編碼,并且由此不需要擴展。
[0167]α 字段 1252 (EVEX 字節(jié) 3,位[7] - EH,也稱為 EVEX.H!、EVEX.rs、EVEX.RL、EVEX.寫掩碼控制、以及EVEX.N,還被示為具有α) —如先前所述的,該字段是上下文專用的。
[0168]β 字段 1254 (EVEX 字節(jié) 3,比特[6:4]-SSS,也稱為 EVEX.s2_0、EVEX.r2_0、EVEX.rr 1、EVEX.LLO、EVEX.LLB,還被示為具有β β β) —如先前所述的,該字段是內(nèi)容專用的。
[0169]REX’字段1210 —這是REX’字段的其余部分,并且是可用于對擴展的32個寄存器集合的較高16個或較低16寄存器進行編碼的EVEX.R’比特字段(EVEX字節(jié)3,比特
[3]-V’)。該比特以比特顛倒的格式存儲。值I用于對較低16個寄存器進行編碼。換句話說,通過組合EVEX.V’、EVEX.vvvv來形成V’ VVVV。
[0170]寫掩碼字段1270 (EVEX字節(jié)3,比特[2:0]_kkk) —其內(nèi)容指定寫掩碼寄存器中的寄存器索引,如先前所述的。在本發(fā)明的一個實施例中,專用值EVEX.kkk = 000具有隱含著沒有寫掩碼用于特定指令(這可以各種方式(包括使用硬連線到所有的寫掩碼或者旁路掩碼硬件的硬件)實現(xiàn))的特別行為。
[0171]實操作碼字段1330(字節(jié)4)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中指定。
[0172]MOD R/Μ字段 1340(字節(jié) 5)包括MOD 字段 1342、Reg 字段 1344、以及 R/Μ 字段 1346。如先前所述的,MOD字段1342的內(nèi)容在存儲器訪問和非存儲器訪問的操作之間進行區(qū)分。Reg字段1344的作用可被歸結(jié)為兩種情形:對目的地寄存器操作數(shù)或源寄存器操作數(shù)進行編碼;或者被視為操作碼擴展且不用于對任何指令操作數(shù)進行編碼。R/Μ字段1346的作用可包括如下:對參考存儲器地址的指令操作數(shù)進行編碼;或者對目的地寄存器操作數(shù)或源寄存器操作數(shù)進行編碼。
[0173]縮放索引基址(SIB)字節(jié)(字節(jié)6) —如先前所述的,縮放字段1250的內(nèi)容用于存儲器地址生成。SIB.xxxl354和SIB.bbbl356 一先前已經(jīng)針對寄存器索引Xxxx和Bbbb參考了這些字段的內(nèi)容。
[0174]位移字段1262A (字節(jié)7-10) —當MOD字段1342包含10時,字節(jié)7_10是位移字段1262A,并且它與傳統(tǒng)32比特位移(disp32) —樣地工作,并且以字節(jié)粒度工作。
[0175]位移因數(shù)字段1262B(字節(jié)7) —當MOD字段1342包含01時,字節(jié)7是位移因數(shù)字段1262B。該字段的位置與傳統(tǒng)x86指令集8比特位移(dispS)的位置相同,它以字節(jié)粒度工作。由于disp8是符號擴展的,因此它可只在-128和127字節(jié)偏移量之間尋址,在64字節(jié)的高速緩存線的方面,disp8使用可被設(shè)為僅四個真正有用的值-128、-64、0和64的8比特;由于常常需要更大的范圍,所以使用disp32 ;然而,disp32需要4個字節(jié)。與disp8和disp32對比,位移因數(shù)字段1262B是disp8的重新解釋;當使用位移因數(shù)字段1262B時,實際位移通過位移因數(shù)字段的內(nèi)容乘以存儲器操作數(shù)訪問的大小(N)確定。該類型的位移被稱為disp8*N。這減小了平均指令長度(用于位移但具有大得多的范圍的單一字節(jié))。這種壓縮位移基于有效位移是存儲器訪問的粒度的倍數(shù)的假設(shè),并且由此地址偏移量的冗余低階位不需要被編碼。換句話說,位移因數(shù)字段1262B替代傳統(tǒng)x86指令集8比特位移。由此,位移因數(shù)字段1262B以與x86指令集8比特位移相同的方式(因此在ModRM/SIB編碼規(guī)則中沒有變化)進行編碼,唯一的不同在于,dispS超載至disp8*N。換句話說,在編碼規(guī)則或者編碼長度中沒有變化,只在通過硬件對位移值的解釋中有變化(這需要使位移縮放存儲器操作數(shù)的大小以獲得字節(jié)式地址偏移量)。
[0176]立即數(shù)字段1272如先前所述地操作。
[0177]完整操作碼字段
[0178]圖13B是示出根據(jù)本發(fā)明的實施例的構(gòu)成完整操作碼字段1274的具有專用矢量友好指令格式1300的字段的方框圖。具體地,完整操作碼字段1274包括格式字段1240、基礎(chǔ)操作字段1242、以及數(shù)據(jù)元素寬度(W)字段1264?;A(chǔ)操作字段1242包括前綴編碼字段1325、操作碼映射字段1315以及實操作碼字段1330。
[0179]寄存器索引字段
[0180]圖13C是示出根據(jù)本發(fā)明的一個實施例的構(gòu)成寄存器索引字段1244的具有專用矢量友好指令格式1300的字段的方框圖。具體地,寄存器索引字段1244包括REX字段1305、REX’ 字段 1310、MODR/M.reg 字段 1344、MODR/M.r/m 字段 1346、VVVV 字段 1320、xxx字段1354以及bbb字段1356。
[0181]擴充操作字段
[0182]圖13D是示出根據(jù)本發(fā)明的一個實施例的構(gòu)成擴充操作字段1250的具有專用矢量友好指令格式1300的字段的方框圖。當類(U)字段1268包含O時,它表達EVEX.UO (A類1268A);當它包含I時,它表達EVEX.Ul (B類1268B)。當U = O且MOD字段1342包含11 (表達無存儲器訪問操作)時,α字段1252 (EVEX字節(jié)3,比特[7] - EH)被解釋為rs字段1,252A。當rs字段1252A包含I (舍入1252A.1)時,β字段1254 (EVEX字節(jié)3,比特[6:4] - SSS)被解釋為舍入控制字段1254Α。舍入控制字段1254Α包括一比特SAE字段1256和兩比特舍入操作字段1258。當rs字段1252A包含O (數(shù)據(jù)變換1252A.2)時,β字段1254(EVEX字節(jié)3,比特[6:4] - SSS)被解釋為三比特數(shù)據(jù)變換字段1254B。當U = O且MOD字段1342包含00、01或10 (表達存儲器訪問操作)時,α字段1252 (EVEX字節(jié)3,位
[7]-EH)被解釋為驅(qū)逐提示(EH)字段1252Β且β字段1254(EVEX字節(jié)3,位[6:4]-SSS)被解釋為三位數(shù)據(jù)操縱字段1254C。
[0183]當U = I時,α字段1252 (EVEX字節(jié)3,位[7] - EH)被解釋為寫掩碼控制(Z)字段1252C。當U = I且MOD字段1342包含11 (表達無存儲器訪問操作)時,β字段1254的一部分(EVEX字節(jié)3,比特[4] - S0)被解釋為RL字段1257Α ;當它包含I (舍入1257Α.1)時,β字段1254的其余部分(EVEX字節(jié)3,比特[6_5] - S2^1)被解釋為舍入操作字段1259Α,而當RL字段1257Α包含O (VSIZE1257.Α2)時,β字段1254的其余部分(EVEX字節(jié)3,比特[6-5]-S2J被解釋為矢量長度字段1259B(EVEX字節(jié)3,比特[6-5] - L1^0)。當U = I且MOD字段1342包含00、01或10 (表達存儲器訪問操作)時,β字段1254 (EVEX字節(jié)3,比特[6:4] - SSS)被解釋為矢量長度字段1259B(EVEX字節(jié)3,比特[6-5] - L1^0)和廣播字段1257B (EVEX 字節(jié) 3,比 特[4] - B)。
[0184]示例性寄存器架構(gòu)
[0185]圖14是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)1400的框圖。在所示出的實施例中,有32個512比特寬的矢量寄存器1410 ;這些寄存器被引用為zmmO到zmm31。較低的16zmm寄存器的較低階256個位覆蓋在寄存器ymmO-16上。較低的16zmm寄存器的較低階128個比特(ymm寄存器的較低階128個比特)覆蓋在寄存器xmmO-15上。專用矢量友好指令格式1300對這些覆蓋的寄存器組操作,如在以下表格中所示的。
[0186]
【權(quán)利要求】
1.一種用于執(zhí)行指令的處理器,所述指令用于執(zhí)行以下各項操作: 確定N個矢量寄存器的集合,以將存儲在系統(tǒng)存儲器中的數(shù)據(jù)流的N個指定部分讀入所述N個矢量寄存器的集合; 對于所述數(shù)據(jù)流的N個指定部分中的每一個,確定系統(tǒng)存儲器地址; 在系統(tǒng)存儲器地址處從系統(tǒng)存儲器獲取所述數(shù)據(jù)流的N個指定部分;以及 將所述數(shù)據(jù)流的N個指定部分存儲到N個矢量寄存器。
2.如權(quán)利要求1所述的處理器,其特征在于,確定系統(tǒng)存儲器地址包括根據(jù)指令直接確定第一系統(tǒng)存儲器地址以及通過將滑動值的倍數(shù)與第一系統(tǒng)存儲器地址相加來計算剩余的N -1個地址。
3.如權(quán)利要求2所述的處理器,其特征在于,所述滑動值被設(shè)定為等于數(shù)據(jù)流的數(shù)據(jù)元素的大小。
4.如權(quán)利要求1所述的處理器,其特征在于,所述數(shù)據(jù)流的部分包括所述數(shù)據(jù)流的數(shù)據(jù)元素。
5.如權(quán)利要求1所述的處理器,其特征在于,所述指令被指定為形式INSTRUCTIONREG1,COUNT, MEML0CAT10N(指令寄存器1,計數(shù),MEM位置),其中REGl包括用于存儲數(shù)據(jù)流的第一部分的第一矢量寄存器,COUNT包括要從系統(tǒng)存儲器獲取的數(shù)據(jù)流的部分的數(shù)目,MEML0CAT10N包括數(shù)據(jù)流的第一部分的存儲器位置。
6.如權(quán)利要求5所述的處理器,其特征在于,對于數(shù)據(jù)流的16個部分,COUNT被設(shè)定為值16。
7.如權(quán)利要求1所述的處理器,其特征在于,數(shù)據(jù)流的N個部分中的每一個包括浮點值,且其中N個矢量寄存器中的每一個包括浮點寄存器。
8.如權(quán)利要求7所述的處理器,其特征在于,浮點值中的每一個包括標量浮點值。
9.如權(quán)利要求7所述的處理器,其特征在于,浮點值中的每一個包括雙浮點值。
10.如權(quán)利要求1所述的處理器,其特征在于,數(shù)據(jù)流的N個部分中的每一個包括整數(shù)值。
11.如權(quán)利要求10所述的處理器,其特征在于,整數(shù)值中的每一個包括打包雙字值。
12.如權(quán)利要求10所述的處理器,其特征在于,整數(shù)值中的每一個包括打包四字值。
13.—種方法,包括: 確定N個矢量寄存器的集合,以將存儲在系統(tǒng)存儲器中的數(shù)據(jù)流的N個指定部分讀入所述N個矢量寄存器的集合; 對于所述數(shù)據(jù)流的N個指定部分中的每一個,確定系統(tǒng)存儲器地址; 在系統(tǒng)存儲器地址處從系統(tǒng)存儲器獲取所述數(shù)據(jù)流的N個指定部分;以及 將所述數(shù)據(jù)流的N個指定部分存儲到N個矢量寄存器。
14.如權(quán)利要求13所述的方法,其特征在于,確定系統(tǒng)存儲器地址包括根據(jù)指令直接確定第一系統(tǒng)存儲器地址以及通過將滑動值的倍數(shù)與第一系統(tǒng)存儲器地址相加來計算剩余的N -1個地址。
15.如權(quán)利要求14所述的方法,其特征在于,所述滑動值被設(shè)定為等于數(shù)據(jù)流的數(shù)據(jù)元素的大小。
16.如權(quán)利要求13所述的方法,其特征在于,所述數(shù)據(jù)流的部分包括所述數(shù)據(jù)流的數(shù)據(jù)元素。
17.如權(quán)利要求13所述的方法,其特征在于,所述指令被指定為形式INSTRUCTIONREGI, COUNT, MEML0CAT10N(指令寄存器1,計數(shù),MEM位置),,其中REGl包括用于存儲數(shù)據(jù)流的第一部分的第一矢量寄存器,COUNT包括要從系統(tǒng)存儲器獲取的數(shù)據(jù)流的部分的數(shù)目,MEML0CAT10N包括數(shù)據(jù)流的第一部分的存儲器位置。
18.如權(quán)利要求17所述的方法,其特征在于,對于數(shù)據(jù)流的16個部分,COUNT被設(shè)定為值16。
19.如權(quán)利要求13所述的方法,其特征在于,數(shù)據(jù)流的N個部分中的每一個包括浮點值,且其中N個矢量寄存器中的每一個包括浮點寄存器。
20.如權(quán)利要求19所述的方法,其特征在于,浮點值中的每一個包括標量浮點值。
21.如權(quán)利要求19所述的方法,其特征在于,浮點值中的每一個包括雙浮點值。
22.如權(quán)利要求13所述的方法,其特征在于,數(shù)據(jù)流的N個部分中的每一個包括整數(shù)值。
23.如權(quán)利要求22所述的方法,其特征在于,整數(shù)值中的每一個包括打包雙字值。
24.如權(quán)利要求22所述的方法,其特征在于,整數(shù)值中的每一個包括打包四字值。
25.一種計算機 系統(tǒng),包括: 用于存儲程序指令和數(shù)據(jù)的存儲器; 用于執(zhí)行所述程序指令中的一個或多個以執(zhí)行以下操作的處理器: 確定N個矢量寄存器的集合,以將存儲在系統(tǒng)存儲器中的數(shù)據(jù)流的N個指定部分讀取進入所述N個矢量寄存器的集合; 對于所述數(shù)據(jù)流的N個指定部分中的每一個,確定系統(tǒng)存儲器地址; 在系統(tǒng)存儲器地址處從系統(tǒng)存儲器獲取所述數(shù)據(jù)流的N個指定部分;以及 將所述數(shù)據(jù)流的N個指定部分存儲到N個矢量寄存器。
26.如權(quán)利要求25所述的系統(tǒng),其特征在于,還包括: 顯示適配器,用于響應(yīng)于所述處理器對所述程序代碼的執(zhí)行而呈現(xiàn)圖形圖像。
27.如權(quán)利要求26所述的系統(tǒng),其特征在于,還包括: 用戶輸入界面,用于從用戶輸入設(shè)備接收控制信號,所述處理器響應(yīng)于所述控制信號執(zhí)行所述程序代碼。
28.一種用于執(zhí)行指令的處理器,包括 用于確定N個矢量寄存器的集合的裝置,以將存儲在系統(tǒng)存儲器中的數(shù)據(jù)流的N個指定部分讀取進入所述N個矢量寄存器的集合; 用于對于所述數(shù)據(jù)流的N個指定部分中的每一個確定系統(tǒng)存儲器地址的裝置; 用于在系統(tǒng)存儲器地址處從系統(tǒng)存儲器獲取所述數(shù)據(jù)流的N個指定部分的裝置;以及 用于將所述數(shù)據(jù)流的N個指定部分存儲到N個矢量寄存器的裝置。
29.如權(quán)利要求28所述的處理器,其特征在于,用于確定系統(tǒng)存儲器地址的裝置包括根據(jù)指令直接確定第一系統(tǒng)存儲器地址以及通過將滑動值的倍數(shù)與第一系統(tǒng)存儲器地址相加來計算剩余的N -1個地址的裝置。
30.如權(quán)利要求29所述的處理器,其特征在于,所述滑動值被設(shè)定為等于數(shù)據(jù)流的數(shù)據(jù)元素的大小。
31.如權(quán)利要求28所述的處理器,其特征在于,所述數(shù)據(jù)流的部分包括所述數(shù)據(jù)流的數(shù)據(jù)元素。
32.如權(quán)利要求28所述的處理器,其特征在于,所述指令被指定為形式INSTRUCTIONREGI, COUNT, MEML0CAT10N(指令寄存器1,計數(shù),MEM位置),,其中REGl包括用于存儲數(shù)據(jù)流的第一部分的第一矢量寄存器,COUNT包括要從系統(tǒng)存儲器獲取的數(shù)據(jù)流的部分的數(shù)目,MEML0CAT10N包括數(shù)據(jù)流的第一部分的存儲器位置。
33.如權(quán)利要求32所述的處理器,其特征在于,對于數(shù)據(jù)流的16個部分,COUNT被設(shè)定為值16。
34.如權(quán)利要求28所述的處理器,其特征在于,數(shù)據(jù)流的N個部分中的每一個包括浮點值,且其中N個矢量寄存器中的每一個包括浮點寄存器。
35.如權(quán)利要求34所述的處理器,其特征在于,浮點值中的每一個包括標量浮點值。
36.如權(quán)利要求34所述的處理器,其特征在于,浮點值中的每一個包括雙浮點值。
37.如權(quán)利要求28所述的處理器,其特征在于,數(shù)據(jù)流的N個部分中的每一個包括整數(shù)值。
38.如權(quán)利要求37所述的處 理器,其特征在于,整數(shù)值中的每一個包括打包雙字值。
39.如權(quán)利要求37所述的處理器,其特征在于,整數(shù)值中的每一個包括打包四字值。
【文檔編號】G06F9/305GK104011667SQ201180075821
【公開日】2014年8月27日 申請日期:2011年12月22日 優(yōu)先權(quán)日:2011年12月22日
【發(fā)明者】A·杰哈 申請人:英特爾公司