用于從寄存器提取寫掩碼的系統(tǒng)、裝置和方法
【專利摘要】描述一種在計算機處理器中響應(yīng)于來自通用寄存器指令的單個掩碼提取執(zhí)行從通用寄存器進(jìn)行掩碼提取的系統(tǒng)、裝置和裝置的實施例,該通用寄存器指令包括源通用寄存器操作數(shù)、目的地寫掩碼寄存器操作數(shù)、立即值、以及操作碼。
【專利說明】用于從寄存器提取寫掩碼的系統(tǒng)、裝置和方法 發(fā)明領(lǐng)域
[0001] 本發(fā)明的領(lǐng)域一般涉及計算機處理器體系結(jié)構(gòu),更具體而言,涉及當(dāng)執(zhí)行時導(dǎo)致 特定結(jié)果的指令。
[0002] 置量
[0003] 指令集,或指令集體系結(jié)構(gòu)(ISA)是涉及編程的計算機體系結(jié)構(gòu)的一部分,并可 以包括本機數(shù)據(jù)類型、指令、寄存器體系結(jié)構(gòu)、尋址模式、存儲器體系結(jié)構(gòu)、中斷和異常處理 以及外部輸入和輸出(I/O)。在本文中術(shù)語指令一般指宏指令一一即被提供給處理器(或 指令轉(zhuǎn)換器,該指令轉(zhuǎn)換器(例如使用靜態(tài)二進(jìn)制翻譯、包括動態(tài)編譯的動態(tài)二進(jìn)制翻譯) 翻譯、變形、仿真、或以其他方式將指令轉(zhuǎn)換成要由處理器處理的一個或多個指令))以用 于執(zhí)行的指令--而不是微指令或微操作(micro-op)--它們是處理器的解碼器解碼宏 指令的結(jié)果。
[0004] ISA與微體系結(jié)構(gòu)不同,微體系結(jié)構(gòu)是實現(xiàn)指令集的處理器的內(nèi)部設(shè)計。帶有不 同的微體系結(jié)構(gòu)的處理器可以共享共同的指令集。例如,丨NTEL?奔騰四(Pentium4)處 理器、丨ntel?酷睿(Core?)處理器、以及來自加利福尼亞州桑尼威爾(Sunnyvale)的超微 半導(dǎo)體有限公司(Advanced Micro Devices, Inc.)的諸多處理器實現(xiàn)幾乎相同版本的x86 指令集(在較新的版本中加入了一些擴(kuò)展),但具有不同的內(nèi)部設(shè)計。例如,ISA的相同寄 存器體系結(jié)構(gòu)在不同的微體系結(jié)構(gòu)中可使用已知的技術(shù)以不同方法來實現(xiàn),包括專用物理 寄存器、使用寄存器重命名機制(諸如,使用寄存器別名表RAT、重排序緩沖器R0B、以及隱 退寄存器組;使用多映射和寄存器池)的一個或多個動態(tài)分配物理寄存器。除非另作說明, 短語寄存器體系結(jié)構(gòu)、寄存器組,以及寄存器在本文中被用來指代對軟件/程序員可見的 東西以及指令指定寄存器的方式。在需要特殊性的情況下,形容詞邏輯、體系結(jié)構(gòu),或軟件 可見的將用于表示寄存器體系結(jié)構(gòu)中的寄存器/文件,而不同的形容詞將用于指定給定微 型體系結(jié)構(gòu)中的寄存器(例如,物理寄存器、重新排序緩沖器、隱退寄存器、寄存器池)。
[0005] 指令集包括一個或多個指令格式。給定指令格式定義各個字段(位的數(shù)量、位的 位置)以指定要執(zhí)行的操作(操作碼)以及對其要執(zhí)行該操作的操作數(shù)等。通過指令模板 (或子格式)的定義來進(jìn)一步分解一些指令格式。例如,給定指令格式的指令模板可被定義 為具有指令格式的字段(所包括的字段通常按照相同的次序,但是至少一些字段具有不同 的位位置,因為包括更少的字段)的不同子集,和/或被定義為令給定字段被不同地解釋。 由此,ISA的每一指令使用給定指令格式(并且如果定義,則在該指令格式的指令模板的給 定一個中)來表達(dá),并且包括用于指定操作和操作碼的字段。例如,示例性ADD指令具有專 用操作碼以及包括指定該操作碼的操作碼字段和選擇操作數(shù)的操作數(shù)字段(源1/目的地 以及源2)的指令格式,并且該ADD指令在指令流中的出現(xiàn)將具有選擇專用操作數(shù)的操作數(shù) 字段中的專用內(nèi)容。
[0006] 科學(xué)、金融、自動向量化的通用,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ù)是SMD指令(也 稱為打包數(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ù)元素位置〇中的數(shù)據(jù)元素相對應(yīng),每個源操作數(shù)的數(shù)據(jù)元素位置1中的數(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ù)元素 處于結(jié)果向量操作數(shù)中與它們的對應(yīng)的源數(shù)據(jù)元素對在源向量操作數(shù)中相同的位位置。除 此示例性類型的SMD指令之外,還有各種其他類型的SMD指令(例如,只有一個或具有兩 個以上的源向量操作數(shù)的、以水平方式操作的、生成不同尺寸的結(jié)果向量操作數(shù)的、具有不 同尺寸的數(shù)據(jù)元素的,和/或具有不同的數(shù)據(jù)元素順序的)。應(yīng)該理解,術(shù)語目的地向量操 作數(shù)(或目的地操作數(shù))被定義為執(zhí)行由指令所指定的操作的直接結(jié)果,包括將該目的地 操作數(shù)存儲在某一位置(寄存器或在由該指令所指定的存儲器地址),以便它可以作為源 操作數(shù)由另一指令訪問(由另一指令指定該同一個位置)。
[0008] 諸如由具有包括 x86、MMX?、流式 SMD 擴(kuò)展(SSE)、SSE2、SSE3、SSE4. 1 以及 SSE4. 2 指令的指令集的丨ntel? Core?處理器使用的技術(shù)之類的SMD技術(shù),在應(yīng)用程序性能方面實 現(xiàn)了大大的改善。已經(jīng)發(fā)出和/或公布了被稱為高級向量擴(kuò)展(AVX) (AVX1和AVX2)且使 用向量擴(kuò)展(VEX)編碼方案的附加 SIMD擴(kuò)展集(例如,參見2011年10月的丨ntel? 64和 IA-32體系結(jié)構(gòu)軟件開發(fā)手冊,并且參見2011年6月的Intel?高級向量擴(kuò)展編程參考)。
[0009] 許多現(xiàn)代處理器擴(kuò)展其能力以執(zhí)行SMD操作來解決主流科學(xué)和工程學(xué)數(shù)值應(yīng) 用、視覺處理、識別、數(shù)據(jù)挖掘/合成、游戲、物理學(xué)、密碼術(shù)和其他應(yīng)用領(lǐng)域中對向量浮點 性能的持續(xù)需求。另外,一些處理器利用預(yù)測,包括使用寫掩碼來對SMD寄存器的特定數(shù) 據(jù)元素執(zhí)行操作。
[0010] 遺憾的是,寫掩碼的使用具有諸缺點,包括可為編程人員所用的此類寫掩碼的數(shù) 目、這些寫掩碼的尺寸、以及寫掩碼之間的傳輸。以下描述討論了用于克服這些缺陷中的一 些的辦法。
[0011] 附圖簡沭
[0012] 本發(fā)明是作為示例說明的,而不僅限制于各個附圖的圖形,在附圖中,類似的參考 編號表示類似的元件,其中:
[0013] 圖1⑷例示了用于KEXTRACT的示例性指令的操作的示例性例示。
[0014] 圖1 (B)例示了用于KEXTRACT的示例性指令的操作的另一示例性例示。
[0015] 圖2例示了附加示例性格式。
[0016] 圖3示出處理器中KEXTRACT指令的使用的實施例。
[0017] 圖4例示了用于處理包括源通用寄存器、目的地寫掩碼寄存器、立即數(shù)、和操作數(shù) 的KEXTRACT指令的方法的實施例。
[0018] 圖5描繪了用于執(zhí)行操作數(shù)尺寸為32和64位的KEXTRACT的示例性偽代碼。
[0019] 圖6示出根據(jù)本發(fā)明的一個實施例的一個有效位向量寫掩碼元素的數(shù)量和向量 尺寸和數(shù)據(jù)元素尺寸之間的相關(guān)性。
[0020] 圖7A例示了示例性AVX指令格式。
[0021] 圖7B示出來自圖7A的哪些字段構(gòu)成完整操作碼字段和基礎(chǔ)操作字段。
[0022] 圖7C示出來自圖7A的哪些字段構(gòu)成寄存器索引字段。
[0023] 圖8是根據(jù)本發(fā)明的一個實施例的寄存器體系結(jié)構(gòu)的框圖。
[0024] 圖9A是示出根據(jù)本發(fā)明的各實施例的示例性有序流水線和示例性的寄存器重命 名的無序發(fā)出/執(zhí)行流水線的框圖。
[0025] 圖9B是示出根據(jù)本發(fā)明的各實施例的要包括在處理器中的有序體系結(jié)構(gòu)核的示 例性實施例和示例性的寄存器重命名的無序發(fā)出/執(zhí)行體系結(jié)構(gòu)核的框圖。
[0026] 圖10A-B示出了更具體的示例性有序核體系結(jié)構(gòu)的框圖,該核將是芯片中的若干 邏輯塊之一(包括相同類型和/或不同類型的其他核)。
[0027] 圖11是根據(jù)本發(fā)明實施例可具有一個以上的核、可具有集成存儲器控制器以及 可具有集成圖形器件的處理器的框圖。
[0028] 圖12是根據(jù)本發(fā)明的實施例的系統(tǒng)的框圖。
[0029] 圖13是根據(jù)本發(fā)明的實施例的第一更具體的示例性系統(tǒng)的框圖。
[0030] 圖14是根據(jù)本發(fā)明的實施例的第二更具體的示例性系統(tǒng)的框圖。
[0031] 圖15是根據(jù)本發(fā)明的實施例的SoC的框圖。
[0032] 圖16是根據(jù)本發(fā)明的各實施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn) 制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的框圖。
[0033] 詳細(xì)描沭
[0034] 在下面的描述中,闡述了很多具體細(xì)節(jié)。然而,應(yīng)當(dāng)理解,本發(fā)明的各實施例可以 在不具有這些具體細(xì)節(jié)的情況下得到實施。在其他實例中,公知的電路、結(jié)構(gòu)和技術(shù)未被詳 細(xì)示出以免混淆對本描述的理解。
[0035] 在說明書中對"一個實施例"、"一實施例"、"示例實施例"等的引用指示所描述的 實施例可以包括特定特征、結(jié)構(gòu)或特性,但并不一定每個實施例都需要包括該特定特征、結(jié) 構(gòu)或特性。此外,這樣的短語不一定是指同一個實施例。此外,當(dāng)結(jié)合一個影響例描述特定 特征、結(jié)構(gòu)或特性時,認(rèn)為在本領(lǐng)域技術(shù)人員學(xué)識范圍內(nèi),可以與其他影響例一起影響這樣 的特征、結(jié)構(gòu)或特性,無論是否對此明確描述。
[0036] 概覽
[0037] 在下面的描述中,在描述指令集體系結(jié)構(gòu)中的此特定指令的操作之前,有某些項 可能需要說明。一個這樣的項被稱為"寫掩碼寄存器",它通常用于斷言操作數(shù)以有條件地 控制每個元素的計算操作(下文中,還使用術(shù)語掩碼寄存器,且它指寫掩碼寄存器,諸如以 下討論的"k"寄存器)。如下面使用的,寫掩碼寄存器存儲多個位(16, 32,64等等),其中 寫掩碼寄存器的每一有效位都在SMD處理過程中控制向量寄存器的打包的數(shù)據(jù)元素的操 作/更新。通常,有一個以上寫掩碼寄存器可供處理器核使用。
[0038] 指令集體系結(jié)構(gòu)包括指定向量操作并且具有從這些向量寄存器中選擇源寄存器 和/或目的地寄存器的字段的至少某些SMD指令(示例性SMD指令可以指定要對向量寄 存器中的一個或多個的內(nèi)容執(zhí)行的向量操作,該向量操作的結(jié)果被存儲在向量寄存器之一 中)。本發(fā)明的不同的實施例可以具有不同尺寸的向量寄存器并支持多一些/少一些/不 同尺寸的數(shù)據(jù)元素。
[0039] 由SIMD指令指定的多位數(shù)據(jù)元素的尺寸(例如,字節(jié)、字、雙字、四字)確定向量 寄存器內(nèi)"數(shù)據(jù)元素位置"的位定位,并且向量操作數(shù)的尺寸確定數(shù)據(jù)元素的數(shù)量。打包的 數(shù)據(jù)元素是指存儲在特定位置的數(shù)據(jù)。換言之,取決于目的地操作數(shù)中數(shù)據(jù)元素的尺寸以 及目的地操作數(shù)的尺寸(目的地操作數(shù)中位的總數(shù))(或換言之,取決于目的地操作數(shù)的尺 寸和目的地操作數(shù)中數(shù)據(jù)元素的數(shù)量),所得到的向量操作數(shù)內(nèi)多位數(shù)據(jù)元素位置的位定 位(bit location)改變(例如,如果所得到的向量操作數(shù)的目的地是向量寄存器,則多位 數(shù)據(jù)元素位置在目的地向量寄存器內(nèi)的位定位改變)。例如,多位數(shù)據(jù)元素的位定位在對 32位數(shù)據(jù)元素(數(shù)據(jù)元素位置0占用位定位31 :0,數(shù)據(jù)元素位置1占用位定位63 :32,依 次類推)進(jìn)行操作的向量操作和對64位數(shù)據(jù)元素(數(shù)據(jù)元素位置0占用位定位63 :0,數(shù) 據(jù)元素位置1占用位定位127 :64,依次類推)進(jìn)行操作的向量操作之間是不同的。
[0040] 另外,如圖6所示,根據(jù)本發(fā)明的一個實施例,在一個有效位向量寫掩碼元素的數(shù) 量和向量尺寸和數(shù)據(jù)元素尺寸之間存在相關(guān)性。示出了 128位、256位、以及512位的向量 尺寸,雖然其他寬度也是可能的??紤]了 8位字節(jié)(B)、16位字(W)、32位雙字(D)或單精度 浮點、以及64位四倍字(Q)或雙精度浮點的數(shù)據(jù)元素尺寸,雖然其他寬度也是可能的。如 所示,在向量尺寸是128位的情況下,當(dāng)向量的數(shù)據(jù)元素尺寸是8位時可將16位用于掩蔽, 當(dāng)向量的數(shù)據(jù)元素尺寸是16位時可將8位用于掩蔽,當(dāng)向量的數(shù)據(jù)元素尺寸是32位時可 將4位用于掩蔽,當(dāng)向量的數(shù)據(jù)元素尺寸是64位時可將2位用于掩蔽。在向量尺寸是256 位的情況下,當(dāng)打包數(shù)據(jù)元素寬度是8位時可將32位用于掩蔽,當(dāng)向量的數(shù)據(jù)元素尺寸是 16位時可將16位用于掩蔽,當(dāng)向量的數(shù)據(jù)元素尺寸是32位時可將8位用于掩蔽,當(dāng)向量的 數(shù)據(jù)元素尺寸是64位時可將4位用于掩蔽。在向量尺寸是512位的情況下,當(dāng)向量的數(shù)據(jù) 元素尺寸是8位時可將64位用于掩蔽,當(dāng)向量的數(shù)據(jù)元素尺寸是16位時可將32位用于掩 蔽,當(dāng)向量的數(shù)據(jù)元素尺寸是32位時可將16位用于掩蔽,當(dāng)向量的數(shù)據(jù)元素尺寸是64位 時可將8位用于掩蔽。
[0041] 取決于向量尺寸和數(shù)據(jù)元素尺寸的組合,無論所有64位,或只有64位的子集,均 可以被用作寫入掩碼。一般而言,當(dāng)使用單個每元素掩蔽控制位時,向量寫掩碼寄存器中用 于掩蔽(有效位)的位數(shù)等于按位計的向量尺寸除以按位計的向量數(shù)據(jù)元素尺寸。
[0042] 如以上所述地,寫掩碼(諸如為此目的留出的專用寄存器)的數(shù)目在編程人員的 控制之外。一旦所有寫掩碼被使用,就沒有其它選擇,而只能重寫這些寫掩碼,從而丟失此 數(shù)據(jù),除非該數(shù)據(jù)被推到另一位置。一個這樣的位置是通用、浮點或向量寄存器。寫掩碼可 由此被保存在這些寄存器的數(shù)據(jù)元素中,由此避免將數(shù)據(jù)寫入存儲器或?qū)⑵渫耆珌G失的昂 貴選擇。另外,這些寄存器,如果它們在尺寸上大于各個寫掩碼,則可被用來存儲多個寫掩 碼,由此更高效地使用其存儲。
[0043] 以下是通常稱為寫掩碼提取("KEXTRACT")指令的指令的實施例以及系統(tǒng)、體系 結(jié)構(gòu)、指令格式等的實施例,這些系統(tǒng)、體系結(jié)構(gòu)和指令格式可被用于執(zhí)行將寫掩碼從這些 非寫掩碼寄存器中拉回的這樣的指令。KEXTRACT指令的執(zhí)行導(dǎo)致將包括來自通用、浮點或 向量源寄存器的寫掩碼在內(nèi)的所標(biāo)識位集合存儲到專用寫掩碼寄存器,其中存儲哪些位由 指令的立即值(immediate value)來定義。
[0044] 圖1⑷例示了用于KEXTRACT的示例性指令的操作的示例性例示。在此示例中, 源寄存器是32位通用寄存器。此寄存器具有兩個16位數(shù)據(jù)元素,這些數(shù)據(jù)元素中的至少 一個是所存儲的掩碼。立即數(shù)(一位)被用來在這兩個數(shù)據(jù)元素之間進(jìn)行選擇。例如,當(dāng) 立即數(shù)(immediate)為0時,選擇較低16位,反之亦然。雖然復(fù)用器被例示為選擇機制,但 是任何選擇電路可被用在選擇過程中。目的地寫掩碼寄存器在尺寸上為至少16位,并且其 較低16位接收來自源寄存器的所選數(shù)據(jù)元素。
[0045] 圖1 (B)例示了用于KEXTRACT的示例性指令的操作的另一示例性例示。在此示例 中,源寄存器是64位通用寄存器。此寄存器具有四個16位數(shù)據(jù)元素,這些數(shù)據(jù)元素中的至 少一個是所存儲的掩碼。立即值(兩位)被用來在這四個數(shù)據(jù)元素之間進(jìn)行選擇。例如, 當(dāng)立即數(shù)為0時,則選擇較低16位,等等。雖然復(fù)用器被例示為選擇機制,但是任何選擇電 路可被用在選擇過程中。目的地寫掩碼寄存器在尺寸上為至少16位,并且其較低16位接 收來自源寄存器的所選數(shù)據(jù)元素。
[0046] 雖然以上示例使用16位目的地寫掩碼寄存器以及32或64位通用寄存器,但是許 多不同尺寸的源和目的地寄存器與此指令兼容。例如,源寄存器可以是有較大尺寸的通用、 浮點或向量寄存器。
[0047] 另外,如以下將詳細(xì)描述地,寫掩碼寄存器可以有不同的尺寸,諸如64位。在此情 形中,所提取的字段可被放入寫掩碼寄存器的最低有效位中,或者立即數(shù)可被用來選擇寫 掩碼寄存器中用于存儲的位定位。
[0048] 此外,可從通用寄存器提取多于或少于16位。如果需要更細(xì)粒度(S卩,較小尺寸 的提取),則更多立即數(shù)位可被用于選擇數(shù)據(jù)元素。例如,如果通用寄存器為32位,而要提 取的掩碼為僅4位,則3位的立即數(shù)(8個組合)可被用于選擇恰當(dāng)?shù)?位。
[0049] 立即數(shù)可以是任何數(shù)目個位,只要有足夠的位用于在源寄存器的數(shù)據(jù)元素之間進(jìn) 行選擇。此外,寫掩碼寄存器也可以有較大或較小的尺寸。另外,在一些實施例中,第三寄 存器可以用來代替立即數(shù)。
[0050] 示例件格式
[0051] 此指令的示例性格式為"KEXTRACTD Kl,r32, imm8",其中K1為目的地寫掩碼寄存 器,r32為源32位通用寄存器,imm8為8位立即數(shù),而KEXTRACTD為指令的操作碼。此指令 的執(zhí)行將導(dǎo)致通過使用imm8作為r32中要提取的16位部分的指示符提取r32的16位部 分并將結(jié)果放在kl中。
[0052] 此指令的另一示例性格式為"KEXTRACTD Kl,r64, imm8",其中K1為目的地寫掩碼 寄存器,r64為源64位通用寄存器,imm8為8位立即數(shù),而KEXTRACTD為指令的操作碼。此 指令的執(zhí)行將導(dǎo)致通過使用imm8作為r64中要提取的16位部分的指示符提取r64的16 位部分并將結(jié)果放在kl中。
[0053] 圖2例示了 VEX形式的KEXTRACT的附加示例性格式。
[0054] 示例件執(zhí)行方法
[0055] 圖3示出處理器中KEXTRACT指令的使用的實施例。在301,獲取具有目的地寫掩 碼寄存器操作數(shù)、源寄存器操作數(shù)、和立即值的KEXTRACT指令。
[0056] 在303,由解碼邏輯解碼KEXTRACT指令。取決于指令的格式,在該級可解釋各種數(shù) 據(jù),諸如如果有數(shù)據(jù)變換,則寫入和檢索哪些寄存器、訪問什么存儲器地址等。
[0057] 在305,檢索/讀取源操作數(shù)值。例如,讀取源寄存器。
[0058] 在307,由諸如一個或多個功能單元之類的執(zhí)行源執(zhí)行KEXTRACT指令(或諸如微 操作之類包括這樣的指令的操作),以選擇將源寄存器的哪個數(shù)據(jù)元素作為掩碼寫入目的 地寫掩碼寄存器,其中選擇是基于立即值的。例如,在圖1中,一位的立即數(shù)可標(biāo)識兩個數(shù) 據(jù)元素中的一個,兩位的立即數(shù)可標(biāo)識四個數(shù)據(jù)元素中的一個,等等。
[0059] 在309,將所標(biāo)識的數(shù)據(jù)元素存儲到目的地寫掩碼寄存器中。盡管分別地示出了 307和309,但是在一些實施例中,它們是作為指令的執(zhí)行的一部分一起執(zhí)行的。
[0060] 圖4例示了用于處理包括源通用寄存器、目的地寫掩碼寄存器、立即數(shù)、和操作碼 的KEXTRACT指令的方法的實施例。以下描述的在取回指令之后所發(fā)生的。
[0061] 在401,確定源操作數(shù)尺寸。通常,這僅僅為源操作數(shù)自身所知曉。如以上詳細(xì)描 述地,這些確定步驟可在解碼級期間發(fā)生。然而,在這里進(jìn)行討論以更清楚明白地說明作為 確定要從源提取并被放入專用寫掩碼寄存器目的地中的數(shù)據(jù)元素的一部分發(fā)生了什么。
[0062] 在403,檢索與源操作數(shù)相關(guān)聯(lián)的寄存器。
[0063] 在405,通過使用指令的一位或多位的立即數(shù)來選擇源寄存器的數(shù)據(jù)元素。如之前 所討論的,作出此確定所需的位的數(shù)目取決于源寄存器的尺寸以及將充當(dāng)寫掩碼的數(shù)據(jù)元 素的尺寸。如果源寄存器為32位而寫掩碼為16位,則從源寄存器中要選擇兩個數(shù)據(jù)元素, 并且作出該確定僅需1位立即數(shù)。在一些實施例中,經(jīng)由復(fù)用器或其他選擇邏輯作出此確 定。
[0064] 在407,所選的數(shù)據(jù)元素被寫入(存儲到)目的地寫掩碼寄存器中。
[0065] 圖5描繪了用于執(zhí)行操作數(shù)尺寸為32和64位的KEXTRACT的示例性偽代碼。
[0066] 示例性指令格式
[0067] 本文中所描述的指令的實施例可以不同的格式體現(xiàn)。另外,在下文中詳述示例性 系統(tǒng)、體系結(jié)構(gòu)、以及流水線。指令的實施例可在這些系統(tǒng)、體系結(jié)構(gòu)、以及流水線上執(zhí)行, 但是不限于詳述的系統(tǒng)、體系結(jié)構(gòu)、以及流水線。
[0068] VEX指令格式
[0069] VEX編碼允許指令具有兩個以上操作數(shù),并且允許SMD向量寄存器比128位長。 VEX前綴的使用提供了三個操作數(shù)(或者更多)的句法。例如,先前的兩個操作數(shù)指令執(zhí)行 改寫源操作數(shù)的操作(諸如A = A+B)。VEX前綴的使用使操作數(shù)執(zhí)行非破壞性操作,諸如 A = B+C。
[0070] 圖7A示出示例性AVX指令格式,包括VEX前綴702、實操作碼字段730、M〇D R/M字 節(jié)740、SIB字節(jié)750、位移字段762、以及IMM8772。圖7B示出來自圖7A的哪些字段構(gòu)成 完整操作碼字段774和基礎(chǔ)操作字段742。圖7C示出來自圖7A的哪些字段構(gòu)成寄存器索 引字段744。
[0071] VEX前綴(字節(jié)0-2) 702以三字節(jié)形式進(jìn)行編碼。第一字節(jié)是格式字段740 (VEX 字節(jié)0,位[7 :0]),該格式字段740包含明確的C4字節(jié)值(用于區(qū)分C4指令格式的唯一 值)。第二-第三字節(jié)(VEX字節(jié)1-2)包括提供專用能力的大量位字段。具體地,REX字段 705 (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)進(jìn)行編碼,由此Rrrr、Xxxx 以及Bbbb可通過添加 VEX. R、VEX. X以及VEX. B來形成。操作碼映射字段715 (VEX字節(jié)1, 位[4:0]-mmmmm)包括對隱含的領(lǐng)先操作碼字節(jié)進(jìn)行編碼的內(nèi)容。W字段764(VEX字節(jié)2, 位[7]_W)由記號VEX. W表示,并且取決于該指令提供了不同的功能。VEX. VVVV720 (VEX字 節(jié)2,位[6 :3]-vvvv)的作用可包括如下:1)VEX. vvvv對第一源寄存器操作數(shù)進(jìn)行編碼,該 操作數(shù)指定為翻轉(zhuǎn)(1的補碼)的形式,且對具有兩個或兩個以上源操作數(shù)的指令有效;2) VEX. vvvv目的地寄存器操作數(shù)進(jìn)行編碼,該操作數(shù)指定為針對特定向量移位的1的補碼的 形式;或者3)VEX.VVVV不對任何操作數(shù)進(jìn)行編碼,保留該字段,并且應(yīng)當(dāng)包含1111b。如果 VEX. L768尺寸字段(VEX字節(jié)2,位[2]-L) = 0,則它指示128位向量;如果VEX. L = 1,則 它指示256位向量。前綴編碼字段725(VEX字節(jié)2,位[1 :0]-ρρ)提供了用于基礎(chǔ)操作字 段的附加位。
[0072] 實操作碼字段730 (字節(jié)3)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中指 定。
[0073] MOD R/M 字段 740 (字節(jié) 4)包括 MOD 字段 742 (位[7-6] )、Reg 字段 744 (位[5-3])、 以及R/M字段746 (位[2-0])。Reg字段744的作用可包括如下:對目的地寄存器操作數(shù)或 源寄存器操作數(shù)(Rfff中的rrr)進(jìn)行編碼;或者被視為操作碼擴(kuò)展且不用于對任何指令操 作數(shù)進(jìn)行編碼。R/M字段746的作用可包括如下:對引用存儲器地址的指令操作數(shù)進(jìn)行編 碼;或者對目的地寄存器操作數(shù)或源寄存器操作數(shù)中任一個進(jìn)行編碼。
[0074] 縮放索引基址(SIB)-縮放字段750 (字節(jié)5)的內(nèi)容包括用于存儲器地址生成的 SS752(位[7-6])。先前已經(jīng)針對寄存器索引Xxxx和Bbbb提到了 SIB. xxx754(位[5-3]) 和 SIB. bbb756(位[2-0])的內(nèi)容。
[0075] 位移字段762和立即數(shù)字段(IMM8) 772包含地址數(shù)據(jù)。
[0076] 示例性寄存器體系結(jié)構(gòu)
[0077] 圖8是根據(jù)本發(fā)明的一個實施例的寄存器體系結(jié)構(gòu)800的框圖。在所示出的實施 例中,有32個512位寬的向量寄存器810 ;這些寄存器被稱為zmmO到zmm31。較低的16zmm 寄存器的較低次序的256個位覆蓋在寄存器ymm〇-16上。較低的16zmm寄存器的較低次序 的128個位(ymm寄存器的較低次序的128個位)覆蓋在寄存器xmmO-15上。
[0078] 寫掩碼寄存器815-在所示的實施例中,存在8個寫掩碼寄存器(k0至k7),每一寫 掩碼寄存器的尺寸是64位。在替換實施例中,寫掩碼寄存器815的尺寸是16位。如先前 所述的,在本發(fā)明的一個實施例中,向量掩碼寄存器kO無法用作寫掩碼;當(dāng)正??芍甘緆O 的編碼用作寫掩碼時,它選擇硬連線的寫掩碼OxFFFF,從而有效地停用該指令的寫掩碼。
[0079] 通用寄存器825--在所示出的實施例中,有十六個64位通用寄存器,這些寄存 器與現(xiàn)有的x86尋址模式來尋址存儲器操作數(shù)一起使用。這些寄存器通過名稱RAX、RBX、 RCX、RDX、RBP、RSI、RDI、RSP 以及 R8 到 R15 來引用。
[0080] 標(biāo)量浮點堆棧寄存器組(X87堆棧)845,在其上面混疊 MMX打包整型平坦寄存器 組850--在所示出的實施例中,x87堆棧是用于使用x87指令集擴(kuò)展來對32/64/80位浮 點數(shù)據(jù)執(zhí)行標(biāo)量浮點操作的八元素堆棧;而MMX寄存器被用來對64位打包整型數(shù)據(jù)執(zhí)行操 作,以及為在MMX和XMM寄存器之間執(zhí)行的某些操作保存操作數(shù)。
[0081] 本發(fā)明的替換實施例可以使用較寬的或較窄的寄存器。另外,本發(fā)明的替換實施 例可以使用多一些,少一些或不同的寄存器組和寄存器。
[0082] 示例性核體系結(jié)構(gòu)、處理器和計算機體系結(jié)構(gòu)
[0083] 處理器核可以用出于不同目的的不同方式在不同的處理器中實現(xiàn)。例如,這樣的 核的實現(xiàn)可以包括:1)旨在用于通用計算的通用有序核;2)旨在用于通用計算的高性能通 用無序核;3)主要旨在用于圖形和/或科學(xué)(吞吐量)計算的專用核。不同處理器的實現(xiàn) 可包括:包括旨在用于通用計算的一個或多個通用有序核和/或旨在用于通用計算的一個 或多個通用無序核的CPU;以及2)包括主要旨在用于圖形和/或科學(xué)(吞吐量)的一個或 多個專用核的協(xié)處理器。這樣的不同處理器導(dǎo)致不同的計算機系統(tǒng)體系結(jié)構(gòu),其可包括:1) 在與CPU分開的芯片上的協(xié)處理器;2)在與CPU同一的封裝中但在分開的管芯上的協(xié)處理 器;3)與CPU在同一管芯上的協(xié)處理器(在該情況下,這樣的協(xié)處理器有時被稱為諸如集 成圖形和/或科學(xué)(吞吐量)邏輯等專用邏輯,或被稱為專用核);以及4)可以將所描述 的CPU (有時被稱為應(yīng)用核或應(yīng)用處理器)、以上描述的協(xié)處理器和附加功能包括在同一管 芯上的片上系統(tǒng)。接著描述示例性核體系結(jié)構(gòu),隨后描述示例性處理器和計算機體系結(jié)構(gòu)。
[0084] 示例性核體系結(jié)構(gòu)
[0085] 有序和無序核框圖
[0086] 圖9A是示出根據(jù)本發(fā)明的各實施例的示例性有序流水線和示例性的寄存器重命 名的無序發(fā)出/執(zhí)行流水線的框圖。圖9B是示出根據(jù)本發(fā)明的各實施例的要包括在處理 器中的有序體系結(jié)構(gòu)核的示例性實施例和示例性的寄存器重命名的無序發(fā)出/執(zhí)行體系 結(jié)構(gòu)核的框圖。圖9A-10B中的實線框解說了有序流水線和有序核,而虛線框中的可選附加 項解說了寄存器重命名的、無序發(fā)出/執(zhí)行流水線和核。給定有序方面是無序方面的子集 的情況下,無序方面將被描述。
[0087] 在圖9A中,處理器流水線900包括取回級902、長度解碼級904、解碼級906、分配 級908、重命名級910、調(diào)度(也稱為分派或發(fā)出)級912、寄存器讀取/存儲器讀取級914、 執(zhí)行級916、寫回/存儲器寫入級918、異常處理級922和提交級924。
[0088] 圖9B示出了包括耦合到執(zhí)行引擎單元950的前端單元930的處理器核990,且 執(zhí)行引擎單元和前端單元兩者都耦合到存儲器單元970。核990可以是精簡指令集計算 (RISC)核、復(fù)雜指令集計算(CISC)核、非常長的指令字(VLIW)核或混合或替代核類型。作 為又一選項,核990可以是專用核,諸如例如網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用計 算圖形處理器單元(GPGPU)核、或圖形核等等。
[0089] 前端單元930包括耦合到指令高速緩存單元932的分支預(yù)測單元934,該指令高速 緩存單元932被耦合到指令翻譯后備緩沖器(TLB) 936,該指令翻譯后備緩沖器936被耦合 到指令取回單元938,指令取回單元938被耦合到解碼單元940。解碼單元940 (或解碼器) 可解碼指令,并生成從原始指令解碼出的、或以其他方式反映原始指令的、或從原始指令導(dǎo) 出的一個或多個微操作、微代碼入口點、微指令、其他指令、或其他控制信號作為輸出。解碼 單元940可使用各種不同的機制來實現(xiàn)。合適的機制的示例包括但不限于查找表、硬件實 現(xiàn)、可編程邏輯陣列(0LA)、微代碼只讀存儲器(ROM)等。在一個實施例中,核990包括存儲 (例如,在解碼單元940中或否則在前端單元930內(nèi)的)某些宏指令的微代碼的微代碼ROM 或其他介質(zhì)。解碼單元940耦合到執(zhí)行引擎單元950中的重命名/分配器單元952。
[0090] 執(zhí)行引擎單元950包括重命名/分配器單元952,該重命名/分配器單元952耦合 至隱退單元956和一個或多個調(diào)度器單元956的集合。調(diào)度器單元956表示任何數(shù)目的不 同調(diào)度器,包括預(yù)留站、中央指令窗等。調(diào)度器單元956被耦合到物理寄存器文件單元958。 每個物理寄存器組單元958表示一個或多個物理寄存器組,其中不同的物理寄存器組存儲 一種或多種不同的數(shù)據(jù)類型,諸如標(biāo)量整型、標(biāo)量浮點、打包整型、打包浮點、向量整型、向 量浮點、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等。在一個實施例中,物 理寄存器組單元958包括向量寄存器單元、寫掩碼寄存器單元和標(biāo)量寄存器單元。這些寄 存器單元可以提供體系結(jié)構(gòu)向量寄存器、向量掩碼寄存器、和通用寄存器。物理寄存器組單 元958與隱退單元954重疊以示出可以用來實現(xiàn)寄存器重命名和無序執(zhí)行的各種方式(例 如,使用重排序緩沖器和隱退寄存器組;使用將來的文件、歷史緩沖器和隱退寄存器組;使 用寄存器圖和寄存器池等等)。隱退單元954和物理寄存器組單元958被耦合到執(zhí)行群集 960。執(zhí)行群集960包括一個或多個執(zhí)行單元962的集合和一個或多個存儲器訪問單元964 的集合。執(zhí)行單元962可以執(zhí)行各種操作(例如,移位、加法、減法、乘法),以及對各種類型 的數(shù)據(jù)(例如,標(biāo)量浮點、打包整型、打包浮點、向量整型、向量浮點)執(zhí)行。盡管某些實施 例可以包括專用于特定功能或功能集合的多個執(zhí)行單元,但其他實施例可僅包括均執(zhí)行所 全部功能的一個執(zhí)行單元或多個執(zhí)行單元。調(diào)度器單元956、物理寄存器組單元958和執(zhí)行 群集960被示為可能有多個,因為某些實施例為某些類型的數(shù)據(jù)/操作(例如,標(biāo)量整型流 水線、標(biāo)量浮點/打包整型/打包浮點/向量整型/向量浮點流水線,和/或各自具有其自 己的調(diào)度器單元、物理寄存器單元和/或執(zhí)行群集的存儲器訪問流水線--以及在分開的 存儲器訪問流水線的情況下,實現(xiàn)其中僅該流水線的執(zhí)行群集具有存儲器訪問單元964的 某些實施例)創(chuàng)建分開的流水線。還應(yīng)當(dāng)理解,在分開的流水線被使用的情況下,這些流水 線中的一個或多個可以為無序發(fā)出/執(zhí)行,并且其余流水線可以為有序發(fā)出/執(zhí)行。
[0091] 存儲器訪問單元964的集合被耦合到存儲器單元970,該存儲器單元970包括耦合 到數(shù)據(jù)高速緩存單元974的數(shù)據(jù)TLB單元972,其中數(shù)據(jù)高速緩存單元974耦合到二級(L2) 高速緩存單元976。在一個示例性實施例中,存儲器存取單元964可包括加載單元、存儲地 址單元、以及存儲數(shù)據(jù)單元,這些單元中的每一個稱合到存儲器單元970中的數(shù)據(jù)TLB單元 972。指令高速緩存單元934還耦合到存儲器單元970中的第二級(L2)高速緩存單元976。 L2高速緩存單元976被耦合到一個或多個其他級的高速緩存,并最終耦合到主存儲器。
[0092] 作為示例,示例性寄存器重命名的、無序發(fā)出/執(zhí)行核體系結(jié)構(gòu)可以如下實現(xiàn)流 水線900 :1)指令取回938執(zhí)行取回和長度解碼級902和904 ;2)解碼單元940執(zhí)行解碼級 906 ;3)重命名/分配器單元952執(zhí)行分配級908和重命名級910 ;4)調(diào)度器單元956執(zhí)行 調(diào)度級912 ;5)物理寄存器文件單元958和存儲器單元970執(zhí)行寄存器讀取/存儲器讀取 級914 ;執(zhí)行群集960執(zhí)行執(zhí)行級916 ;6)存儲器單元970和物理寄存器組單元958執(zhí)行寫 回/存儲器寫入級918 ;7)各單元可牽涉到異常處理級922 ;以及8)隱退單元954和物理 寄存器文件單元958執(zhí)行提交級924。
[0093] 核990可支持一個或多個指令集(例如,x86指令集(具有隨較新版本一起添加 的某些擴(kuò)展);加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集;加利福尼州桑尼 維爾市的ARM控股的ARM指令集(具有諸如NEON等可選附加擴(kuò)展)),其中包括本文中描述 的各指令。在一個實施例中,核990包括支持打包數(shù)據(jù)指令集擴(kuò)展(例如,AVXUAVX2)的 邏輯,由此允許被許多多媒體應(yīng)用使用的操作將使用打包數(shù)據(jù)來執(zhí)行。
[0094] 應(yīng)當(dāng)理解,核可支持多線程化(執(zhí)行兩個或更多個并行的操作或線程的集合),并 且可以按各種方式來完成該多線程化,此各種方式包括時分多線程化、同時多線程化(其 中單個物理核為物理核正同時多線程化的各線程中的每一個線程提供邏輯核)、或其組合 (例如,時分取回和解碼以及此后諸如用Intel?超線程化技術(shù)來同時多線程化)。
[0095] 盡管在無序執(zhí)行的上下文中描述了寄存器重命名,但應(yīng)當(dāng)理解,可以在有序體系 結(jié)構(gòu)中使用寄存器重命名。盡管所解說的處理器的實施例還包括分開的指令和數(shù)據(jù)高速緩 存單元934/974以及共享L2高速緩存單元976,但替換實施例可以具有用于指令和數(shù)據(jù)兩 者的單個內(nèi)部高速緩存,諸如例如一級(L1)內(nèi)部高速緩存或多個級別的內(nèi)部緩存。在某些 實施例中,該系統(tǒng)可包括內(nèi)部高速緩存和在核和/或處理器外部的外部高速緩存的組合。 或者,所有高速緩存都可以在核和/或處理器的外部。
[0096] 具體的示例性有序核體系結(jié)構(gòu)
[0097] 圖10A-B示出了更具體的示例性有序核體系結(jié)構(gòu)的框圖,該核將是芯片中的若干 邏輯塊之一(包括相同類型和/或不同類型的其他核)。這些邏輯塊取決于應(yīng)用通過高帶 寬的互連網(wǎng)絡(luò)(例如,環(huán)形網(wǎng)絡(luò))與某些固定的功能邏輯、存儲器I/O接口和其它必要的1/ 〇邏輯通信。
[0098] 圖10A是根據(jù)本發(fā)明的各實施例的單個處理器核連同它與管芯上互連網(wǎng)絡(luò)1002 的連接以及其二級(L2)高速緩存1004的本地子集的框圖。在一個實施例中,指令解碼器 1000支持具有打包數(shù)據(jù)指令集擴(kuò)展的x86指令集。L1高速緩存1006允許對標(biāo)量和向量單 元中的高速緩存存儲器的低等待時間訪問。盡管在一個實施例中(為了簡化設(shè)計),標(biāo)量 單元1008和向量單元1010使用分開的寄存器集合(分別為標(biāo)量寄存器1012和向量寄存 器1014),并且在這些寄存器之間傳輸?shù)臄?shù)據(jù)被寫入到存儲器并隨后從一級(L1)高速緩存 1006讀回,但是本發(fā)明的替換實施例可以使用不同的方法(例如使用單個寄存器集合或包 括允許數(shù)據(jù)在這兩個寄存器組之間傳輸而無需被寫入和讀回的通信路徑)。
[0099] L2高速緩存的本地子集1004是全局L2高速緩存的一部分,該全局L2高速緩存被 劃分成多個分開的本地子集,即每個處理器核一個本地子集。每個處理器核具有到其自己 的L2高速緩存1004的本地子集的直接訪問路徑。被處理器核讀出的數(shù)據(jù)被存儲在其L2高 速緩存子集1004中,并且可以被快速訪問,該訪問與其他處理器核訪問其自己的本地L2高 速緩存子集并行。被處理器核寫入的數(shù)據(jù)被存儲在其自己的L2高速緩存子集1004中,并 在必要的情況下從其它子集清除。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的相關(guān)性。環(huán)形網(wǎng)絡(luò)是雙向的, 以允許諸如處理器核、L2高速緩存和其它邏輯塊之類的代理在芯片內(nèi)彼此通信。每個環(huán)形 數(shù)據(jù)路徑為每個方向1012位寬。
[0100] 圖10B是根據(jù)本發(fā)明的各實施例的圖10A中的處理器核的一部分的展開圖。圖10B 包括作為L1高速緩存1004的一部分的L1數(shù)據(jù)高速緩存1006A,以及關(guān)于向量單元1010和 向量寄存器1014的更多細(xì)節(jié)。具體地說,向量單元1010是16寬向量處理單元(VPU)(見 16寬ALU1028),該單元執(zhí)行整型、單精度浮點以及雙精度浮點指令中的一個或多個。該VPU 通過混合單元1020支持對寄存器輸入的混合、通過數(shù)值轉(zhuǎn)換單元1022A-B支持?jǐn)?shù)值轉(zhuǎn)換, 并通過復(fù)制單元1024支持對存儲器輸入的復(fù)制。寫掩碼寄存器1026允許斷言所得的向量 寫入。
[0101] 具有集成存儲器控制器和圖形器件的處理器
[0102] 圖11是根據(jù)本發(fā)明的實施例的可具有一個以上核、可具有集成存儲器控制器、并 且可具有集成圖形器件的處理器1100的框圖。圖11中的實線框示出具有單一核1102A、 系統(tǒng)代理1100、一組一個或多個總線控制器單元1116的處理器1100,而任選增加的虛線框 示出具有多個核1102A-N、系統(tǒng)代理單元1100中的一組一個或多個集成存儲器控制器單元 1114、以及專用邏輯1108的替換處理器1100。
[0103] 因此,處理器1100的不同實現(xiàn)可包括:1)CPU,其中專用邏輯1108是集成圖形和/ 或科學(xué)(吞吐量)邏輯(其可包括一個或多個核),并且核1102A-N是一個或多個通用核 (例如,通用的有序核、通用的無序核、這兩者的組合);2)協(xié)處理器,其中核1102A-N是主 要旨在用于圖形和/或科學(xué)(吞吐量)的大量專用核;以及3)協(xié)處理器,其中核1102A-N 是大量通用有序核。因此,處理器1100可以是通用處理器、協(xié)處理器或?qū)S锰幚砥?,諸如例 如網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高吞吐量的集 成眾核(MIC)協(xié)處理器(包括30個或更多核)、嵌入式處理器等。該處理器可以被實現(xiàn)在 一個或多個芯片上。處理器1100可以使用諸如例如BiCM0S、CM0S或NM0S等的多個加工技 術(shù)中的任何一個技術(shù)成為一個或多個襯底的一部分,和/或可以將其實現(xiàn)在一個或多個襯 底上。
[0104] 存儲器層次結(jié)構(gòu)包括在各核內(nèi)的一個或多個級別的高速緩存、一個或多個共享高 速緩存單元1106的集合、以及耦合至集成存儲器控制器單元1114的集合的外部存儲器 (未示出)。該共享高速緩存單元1106的集合可以包括一個或多個中間級高速緩存,諸如 二級(L2)、三級(L3)、四級(L4)或其他級別的高速緩存、末級高速緩存(LLC)、和/或其組 合。盡管在一個實施例中,基于環(huán)的互連單元1112將集成圖形邏輯1108、共享高速緩存單 元1106的集合以及系統(tǒng)代理單元1110/集成存儲器控制器單元1114互連,但替代實施例 可使用任何數(shù)量的公知技術(shù)來將這些單元互連。在一個實施例中,在一個或多個高速緩存 單元1106與核1102A-N之間維持相關(guān)性。
[0105] 在某些實施例中,核1102A-N中的一個或多個核能夠多線程化。系統(tǒng)代理1110包 括協(xié)調(diào)和操作核1102A-N的那些組件。系統(tǒng)代理單元1110可包括例如功率控制單元(PCU) 和顯示單元。P⑶可以是或包括調(diào)整核1102A-N和集成圖形邏輯1108的功率狀態(tài)所需的邏 輯和組件。顯示單元用于驅(qū)動一個或多個外部連接的顯示器。
[0106] 核1102A-N在體系結(jié)構(gòu)指令集方面可以是同構(gòu)的或異構(gòu)的;S卩,這些核1102A-N中 的兩個或更多個核可能能夠執(zhí)行相同的指令集,而其他核可能能夠執(zhí)行該指令集的僅僅子 集或不同的指令集。
[0107] 示例性計算機體系結(jié)構(gòu)
[0108] 圖12-15是示例性計算機體系結(jié)構(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è)備一般都是 合適的。
[0109] 現(xiàn)在參考圖12,示出了根據(jù)本發(fā)明的一個實施例的系統(tǒng)1200的框圖。系統(tǒng)1200 可以包括一個或多個處理器1210、1215,這些處理器耦合到控制器中樞1220。在一個實 施例中,控制器中樞1220包括圖形存儲器控制器中樞(GMCH) 1290和輸入/輸出中樞 (Ι0Η) 1250 (其可以在分開的芯片上);GMCH1290包括存儲器1240和協(xié)處理器1245耦合到 的存儲器和圖形控制器;I0H1250將輸入/輸出(I/O)設(shè)備1260耦合到GMCH1290。替換地, 存儲器和圖形控制器中的一個或兩個在處理器(如本文中所描述的)內(nèi)集成,存儲器1240 和協(xié)處理器1245直接耦合到處理器1210、以及具有I0H1250的單一芯片中的控制器中樞 1220。
[0110] 附加處理器1215的可選性質(zhì)用虛線表示在圖12中。每一處理器1210、1215可包 括本文中描述的處理核中的一個或多個,并且可以是處理器1100的某一版本。
[0111] 存儲器1240可以是例如動態(tài)隨機存取存儲器(DRAM)、相變存儲器(PCM)或這兩者 的組合。對于至少一個實施例,控制器中樞1220經(jīng)由諸如前側(cè)總線(FSB)之類的多站總線 (multi-drop bus)、諸如快速通道互連(QPI)之類的點對點接口、或者類似的連接1295與 處理器1210、1215進(jìn)行通信。
[0112] 在一個實施例中,協(xié)處理器1245是專用處理器,諸如例如高吞吐量MIC處理器、網(wǎng) 絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。在一個實施例中,控 制器中樞1220可以包括集成圖形加速器。
[0113] 在包括體系結(jié)構(gòu)、微體系結(jié)構(gòu)、熱、功耗特性等的優(yōu)點度量的范圍方面,在物理資 源1210、1215之間可存在各種差異。
[0114] 在一個實施例中,處理器1210執(zhí)行控制一般類型的數(shù)據(jù)處理操作的指令。嵌入在 這些指令中的可以是協(xié)處理器指令。處理器1210將這些協(xié)處理器指令識別為具有應(yīng)當(dāng)由 附連的協(xié)處理器1245執(zhí)行的類型。因此,處理器1210在協(xié)處理器總線或者其他互連上將 這些協(xié)處理器指令(或者表示協(xié)處理器指令的控制信號)發(fā)出到協(xié)處理器1245。協(xié)處理器 1245接受并執(zhí)行所接收的協(xié)處理器指令。
[0115] 現(xiàn)在參考圖13,示出了根據(jù)本發(fā)明的一個實施例的第一更具體的示例性系統(tǒng) 1300的框圖。如圖13所示,多處理器系統(tǒng)1300是點對點互連系統(tǒng),并包括經(jīng)由點對點互連 1350耦合的第一處理器1370和第二處理器1380。處理器1370和1380中的每一個都可以 是處理器1100的某一版本。在本發(fā)明的一個實施例中,處理器1370和1380分別是處理器 1210和1215,而協(xié)處理器1338是協(xié)處理器1245。在另一實施例中,處理器1370和1380分 別是處理器1210和協(xié)處理器1245。
[0116] 處理器1370和1380被示為分別包括集成存儲器控制器(MC)單元1372和1382。 處理器1370還包括作為其總線控制器單元的一部分的點對點(P-P)接口 1376和1378 ;類 似地,第二處理器1380包括點對點接口 1386和1388。處理器1370、1380可以使用點對點 (P-P)電路1378、1388經(jīng)由P-P接口 1350來交換信息。如圖13所示,頂C1372和1382將 各處理器耦合至相應(yīng)的存儲器,即存儲器1332和存儲器1334,這些存儲器可以是本地附連 至相應(yīng)的處理器的主存儲器的一部分。
[0117] 處理器1370、1380可各自經(jīng)由使用點對點接口電路1376、1394、1386、1398的各個 P-P接口 1352U354與芯片組1390交換信息。芯片組1390可以可選地經(jīng)由高性能接口 1339 與處理器1338交換信息。在一個實施例中,協(xié)處理器1338是專用處理器,諸如例如高吞吐 量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。
[0118] 共享高速緩存(未示出)可以被包括在任一處理器之內(nèi)或?qū)蓚€處理器而言都在 外部但仍經(jīng)由P-P互連與這些處理器連接,從而如果將某處理器置于低功率模式時,可將 任一處理器或兩個處理器的本地高速緩存信息存儲在該共享高速緩存中。
[0119] 芯片組1390可經(jīng)由接口 1396耦合至第一總線1316。在一個實施例中,第一總線 1316可以是外圍部件互連(PCI)總線,或諸如PCI Express總線或其它第三代I/O互連總 線之類的總線,但本發(fā)明的范圍并不受此限制。
[0120] 如圖13所示,各種I/O設(shè)備1314可以連同總線橋1318耦合到第一總線1316,總 線橋1318將第一總線1316耦合至第二總線1320。在一個實施例中,諸如協(xié)處理器、高吞吐 量MIC處理器、GPGPU的處理器、加速器(諸如例如圖形加速器或數(shù)字信號處理器(DSP)單 元)、場可編程門陣列或任何其他處理器的一個或多個附加處理器1315被耦合到第一總線 1316。在一個實施例中,第二總線1320可以是低引腳計數(shù)(LPC)總線。各種設(shè)備可以被耦 合至第二總線1320,在一個實施例中這些設(shè)備包括例如鍵盤/鼠標(biāo)1322、通信設(shè)備1327以 及諸如可包括指令/代碼和數(shù)據(jù)1330的盤驅(qū)動器或其它海量存儲設(shè)備的存儲單元1328。 此外,音頻1/01324可以被耦合至第二總線1320。注意,其它體系結(jié)構(gòu)是可能的。例如,代 替圖13的點對點體系結(jié)構(gòu),系統(tǒng)可以實現(xiàn)多站總線或其它這類體系結(jié)構(gòu)。
[0121] 現(xiàn)在參考圖14,示出了根據(jù)本發(fā)明的一個實施例的第二更具體的示例性系統(tǒng) 1400的框圖。圖13和14中的相似元件具有相似的附圖標(biāo)記,并且圖13的特定方面已經(jīng)從 圖14中省略以避免混淆圖14的其他方面。
[0122] 圖14示出處理器1370、1380可分別包括集成存儲器和I/O控制邏輯("CL") 1372 和1382。因此,CL1372、1382包括集成存儲器控制器單元并包括I/O控制邏輯。圖14解說 了不僅存儲器1332、1334耦合至CL1372、1382,而且I/O設(shè)備1414也耦合至控制邏輯1372、 1382。傳統(tǒng)I/O設(shè)備1415被耦合至芯片組1390。
[0123] 現(xiàn)在參考圖15,示出了根據(jù)本發(fā)明的一個實施例的S〇C1500的框圖。在圖11中, 相似的元件具有同樣的附圖標(biāo)記。另外,虛線框是更先進(jìn)的SoC的可選特征。在圖15中, 互連單元1502被耦合至:應(yīng)用處理器1510,該應(yīng)用處理器包括一個或多個核202A-N的集 合以及共享高速緩存單元1106 ;系統(tǒng)代理單元1110 ;總線控制器單元1116 ;集成存儲器控 制器單元1114 ;一組或者一個或多個協(xié)處理器1520,其可包括集成圖形邏輯、圖像處理器、 音頻處理器和視頻處理器;靜態(tài)隨機存取存儲器(SRAM)單元1530 ;直接存儲器存?。―MA) 單元1532 ;以及用于耦合至一個或多個外部顯示器的顯示單元1540。在一個實施例中,協(xié) 處理器1520包括專用處理器,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、GPGPU、高吞吐量MIC 處理器、或嵌入式處理器等等。
[0124] 本文公開的機制的各實施例可以被實現(xiàn)在硬件、軟件、固件或這些實現(xiàn)方法的組 合中。本發(fā)明的實施例可實現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計算機程序或程序代碼,該可編程 系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至 少一個輸入設(shè)備以及至少一個輸出設(shè)備。
[0125] 可將程序代碼(諸如圖13中解說的代碼1330)應(yīng)用于輸入指令,以執(zhí)行本文描述 的各功能并生成輸出信息。輸出信息可以按已知方式被應(yīng)用于一個或多個輸出設(shè)備。為了 本申請的目的,處理系統(tǒng)包括具有諸如例如數(shù)字信號處理器(DSP)、微控制器、專用集成電 路(ASIC)或微處理器之類的處理器的任何系統(tǒng)。
[0126] 程序代碼可以用高級過程語言或面向?qū)ο蟮木幊陶Z言來實現(xiàn),以便與處理系統(tǒng)通 信。程序代碼也可以在需要的情況下用匯編語言或機器語言來實現(xiàn)。事實上,本文中描述 的機制不僅限于任何特定編程語言的范圍。在任一情形下,語言可以是編譯語言或解釋語 言。
[0127] 至少一個實施例的一個或多個方面可以通過存儲在機器可讀介質(zhì)上的代表性的 指令來實現(xiàn),指令表示處理器內(nèi)的各種邏輯,指令在由機器讀取時使機器制造執(zhí)行此處所 描述的技術(shù)的邏輯。被稱為"IP核"的這些表示可以被存儲在有形的機器可讀介質(zhì)上,并被 提供給各個客戶或生產(chǎn)設(shè)施以加載到實際制造該邏輯或處理器的制造機器中。
[0128] 這樣的機器可讀存儲介質(zhì)可以包括但不限于通過機器或設(shè)備制造或形成的物品 的非瞬態(tài)、有形安排,其包括存儲介質(zhì),諸如硬盤;任何其它類型的盤,包括軟盤、光盤、緊致 盤只讀存儲器(CD-ROM)、緊致盤可重寫(CD-RW)的以及磁光盤;半導(dǎo)體器件,例如只讀存儲 器(ROM)、諸如動態(tài)隨機存取存儲器(DRAM)和靜態(tài)隨機存取存儲器(SRAM)的隨機存取存儲 器(RAM)、可擦除可編程只讀存儲器(EPROM)、閃存、電可擦除可編程只讀存儲器(EEPR0M); 相變存儲器(PCM);磁卡或光卡;或適于存儲電子指令的任何其它類型的介質(zhì)。
[0129] 因此,本發(fā)明的各實施例還包括非瞬態(tài)、有形機器可讀介質(zhì),該介質(zhì)包含指令或包 含設(shè)計數(shù)據(jù),諸如硬件描述語言(HDL),它定義本文中描述的結(jié)構(gòu)、電路、裝置、處理器和/ 或系統(tǒng)特性。這些實施例也被稱為程序產(chǎn)品。
[0130] 仿真(包括二進(jìn)制變換、代碼變形等)
[0131] 在某些情況下,指令轉(zhuǎn)換器可用來將指令從源指令集轉(zhuǎn)換至目標(biāo)指令集。例如,指 令轉(zhuǎn)換器可以翻譯(例如使用靜態(tài)二進(jìn)制翻譯、包括動態(tài)編譯的動態(tài)二進(jìn)制翻譯)、變形、 仿真或以其它方式將指令轉(zhuǎn)換成將由核來處理的一個或多個其它指令。指令轉(zhuǎn)換器可以用 軟件、硬件、固件、或其組合實現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、在處理器外、或者部分在處 理器上部分在處理器外。
[0132] 圖16是根據(jù)本發(fā)明的各實施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn) 制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的框圖。在所示的實施例中,指令轉(zhuǎn)換器是軟件 指令轉(zhuǎn)換器,但替換地,該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來實現(xiàn)。圖16 示出了用高級語言1602的程序可以使用x86編譯器1604來編譯,以生成可以由具有至少 一個x86指令集核1616的處理器原生執(zhí)行的x86二進(jìn)制代碼1606。具有至少一個x86指 令集核1616的處理器表示任何處理器,這些處理器能通過兼容地執(zhí)行或以其他方式處理 以下內(nèi)容來執(zhí)行與具有至少一個x86指令集核的英特爾處理器基本相同的功能:1)英特爾 x86指令集核的指令集的本質(zhì)部分,或2)針對為在具有至少一個x86指令集核的英特爾處 理器上運行的應(yīng)用或其它軟件的對象代碼版本,以便達(dá)到與具有至少一個x86指令集核的 英特爾處理器基本相同的結(jié)果。x86編譯器1604表示用于生成x86二進(jìn)制代碼1606(例 如,對象代碼)的編譯器,該二進(jìn)制代碼1606可通過或不通過附加的鏈接處理在具有至少 一個x86指令集核1616的處理器上執(zhí)行。類似地,圖16示出用高級語言1602的程序可以 使用替代的指令集編譯器1608來編譯,以生成可以由不具有至少一個x86指令集核1614 的處理器(例如具有執(zhí)行加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集,和/ 或執(zhí)行加利福尼亞州桑尼維爾市的ARM控股公司的ARM指令集的核的處理器)原生執(zhí)行的 替代指令集二進(jìn)制代碼1610。指令轉(zhuǎn)換器1612被用來將x86二進(jìn)制代碼1606轉(zhuǎn)換成可以 由不具有x86指令集核1614的處理器原生執(zhí)行的代碼。該轉(zhuǎn)換后的代碼不大可能與替換 指令集二進(jìn)制代碼1610相同,因為能夠這樣做的指令轉(zhuǎn)換器難以制造;然而,轉(zhuǎn)換后的代 碼將完成一般操作并由來自替換性指令集的指令構(gòu)成。因此,指令轉(zhuǎn)換器1612表示通過仿 真、模擬或任何其它過程來允許不具有x86指令集處理器或核的處理器或其它電子設(shè)備執(zhí) 行x86二進(jìn)制代碼1606的軟件、固件、硬件或其組合。
【權(quán)利要求】
1. 一種在計算機處理器中響應(yīng)于來自通用寄存器指令的單個掩碼提取執(zhí)行從通用寄 存器進(jìn)行掩碼提取的方法,所述通用寄存器指令包括源通用寄存器操作數(shù)、目的地寫掩碼 寄存器操作數(shù)、立即值、以及操作碼,所述方法包括以下步驟: 執(zhí)行來自通用寄存器指令的所述掩碼提取,以使用所述立即數(shù)中的一位或多位來選擇 所述源寄存器中的哪個數(shù)據(jù)元素將作為寫掩碼被寫入到所述目的地寫掩碼寄存器; 將所選數(shù)據(jù)元素存儲到所述目的地寫掩碼寄存器中。
2. 如權(quán)利要求1所述的方法,其特征在于,所選數(shù)據(jù)元素是所述通用寄存器的16位字 段。
3. 如權(quán)利要求2所述的方法,其特征在于,所述通用寄存器是32位寄存器,并且所述立 即數(shù)的最低有效位被用于選擇所述通用寄存器的所述數(shù)據(jù)元素。
4. 如權(quán)利要求2所述的方法,其特征在于,所述通用寄存器是64位寄存器,并且所述立 即數(shù)的兩個最低有效位被用于選擇所述通用寄存器的所述數(shù)據(jù)元素。
5. 如權(quán)利要求1所述的方法,其特征在于,所述立即數(shù)是8位值。
6. 如權(quán)利要求1所述的方法,其特征在于,所述目的地寫掩碼寄存器是16位寄存器。
7. 如權(quán)利要求1所述的方法,其特征在于,所述目的地寫掩碼寄存器是64位寄存器。
8. 如權(quán)利要求7所述的方法,其特征在于,所選數(shù)據(jù)元素被存儲在所述目的地寫掩碼 寄存器的最低有效位中。
9. 一種制品,包括: 其上存儲有指令的出現(xiàn)的有形機器可讀存儲介質(zhì),其中所述指令的格式指定通用寄存 器作為其源操作數(shù)并且指定單個寫掩碼寄存器作為其目的地,并且其中所述指令格式包括 操作碼,所述操作碼響應(yīng)于所述單個指令的單次出現(xiàn)指令機器來導(dǎo)致使用所述立即數(shù)的至 少一位選擇所述源寄存器中的哪個數(shù)據(jù)元素將作為寫掩碼被寫入到目的地寫掩碼寄存器, 并且將所選數(shù)據(jù)元素存儲到所述目的地寫掩碼寄存器。
10. 如權(quán)利要求9所述的制品,其特征在于,所選數(shù)據(jù)元素是所述通用寄存器的16位字 段。
11. 如權(quán)利要求10所述的制品,其特征在于,所述通用寄存器是32位寄存器,并且所述 立即數(shù)的最低有效位被用于選擇所述通用寄存器的所述數(shù)據(jù)元素。
12. 如權(quán)利要求10所述的制品,其特征在于,所述通用寄存器是64位寄存器,并且所述 立即數(shù)的兩個最低有效位被用于選擇所述通用寄存器的所述數(shù)據(jù)元素。
13. 如權(quán)利要求9所述的制品,其特征在于,所述立即數(shù)是8位值。
14. 如權(quán)利要求9所述的制品,其特征在于,所述目的地寫掩碼寄存器是16位寄存器。
15. 如權(quán)利要求9所述的制品,其特征在于,所述目的地寫掩碼寄存器是64位寄存器。
16. 如權(quán)利要求9所述的制品,其特征在于,所選數(shù)據(jù)元素被存儲在所述目的地寫掩碼 寄存器的最低有效位中。
17. -種裝置,包括: 硬件解碼器,用于解碼來自通用寄存器指令的單個掩碼提取,所述通用寄存器指令包 括源通用寄存器操作數(shù)、目的地寫掩碼寄存器操作數(shù)、立即值、以及操作碼; 執(zhí)行邏輯,用于使用所述立即數(shù)的至少一位來選擇所述源寄存器中的哪個數(shù)據(jù)元素將 作為寫掩碼被寫入到所述目的地寫掩碼寄存器,以及將所選數(shù)據(jù)元素存儲到所述目的地寫 掩碼寄存器。
18. 如權(quán)利要求17所述的裝置,其特征在于,所選數(shù)據(jù)元素是所述通用寄存器的16位 字段。
19. 如權(quán)利要求18所述的裝置,其特征在于,所述通用寄存器是32位寄存器,并且所述 立即數(shù)的最低有效位被用于選擇所述通用寄存器的所述數(shù)據(jù)元素。
20. 如權(quán)利要求18所述的裝置,其特征在于,所述通用寄存器是64位寄存器,并且所述 立即數(shù)的兩個最低有效位被用于選擇所述通用寄存器的所述數(shù)據(jù)元素。
21. 如權(quán)利要求17所述的裝置,其特征在于,所述立即數(shù)是8位值。
【文檔編號】G06F9/305GK104303141SQ201180075870
【公開日】2015年1月21日 申請日期:2011年12月22日 優(yōu)先權(quán)日:2011年12月22日
【發(fā)明者】B·L·托爾, R·凡倫天, J·考博爾圣阿德里安, M·J·查尼, E·烏爾德-阿邁德-瓦爾 申請人:英特爾公司