用于基于兩個源寫掩碼寄存器生成依賴向量的系統(tǒng)、裝置和方法
【專利摘要】描述了用于響應于包括第一和第二源寫掩碼向量寄存器操作數(shù)、目的地向量寄存器操作數(shù)、以及操作碼的指令而在計算機處理器中執(zhí)行依賴索引向量計算的系統(tǒng)、裝置以及方法的各實施例。
【專利說明】用于基于兩個源寫掩碼寄存器生成依賴向量的系統(tǒng)、裝置 和方法
【技術領域】
[0001] 本發(fā)明的領域一般涉及計算機處理器架構,更具體地涉及在執(zhí)行時導致特定結果 的指令。
[0002] 置量
[0003] 指令集,或指令集架構(ISA)是涉及編程的計算機架構的一部分,并可以包括原 生數(shù)據類型、指令、寄存器架構、尋址模式、存儲器架構、中斷和異常處理、以及外部輸入和 輸出(I/O)。應注意術語指令在本文中一般指的是宏指令--即提供給處理器以供執(zhí)行的 指令--與從處理器的解碼器解碼宏指令得到的微指令或微操作不同。
[0004] 指令集架構與微架構不同,微架構是實現(xiàn)ISA的處理器的內部設計。帶有不同的 微架構的處理器可以共享共同的指令集。例如,英特爾Pentium(奔騰)4處理器、英特爾 Core (酷眷)處理器、以及位于Sunnyvale CA的Advanced Micro Devices公司的處理器實 現(xiàn)x86指令集的幾乎相同的版本(帶有被添加到較新的版本中的某些擴展),但是,具有不 同的內部設計。例如,ISA的相同寄存器架構在不同的微架構中使用已知的技術以不同方 法來實現(xiàn),包括專用物理寄存器、使用寄存器重命名機制(諸如,如美國專利No. 5, 446, 912 所述,使用寄存器假名表(RAT)、重排序緩沖器(ROB)、以及引退寄存器組;如美國專利 No. 5, 207, 132所述,使用多個寄存器映射和寄存器池)的一個或多個動態(tài)分配物理寄存 器,等等。除非另行指出,術語寄存器架構、寄存器組和寄存器是指對軟件/編程者可見的 寄存器以及指令指定寄存器的方式。在需要特殊性的情況下,形容詞"邏輯"、"架構"、或"軟 件可見的"將用于表示寄存器架構中的寄存器/寄存器組,而不同的形容詞將用于指定給定 微架構中的寄存器(例如,物理寄存器、重新排序緩沖器、引退寄存器、寄存器池)。
[0005] 指令集包括一個或多個指令格式。給定指令格式定義各個字段(位的數(shù)量、位的 位置)以指定要執(zhí)行的操作(操作碼)以及對其要執(zhí)行該操作的操作數(shù)等。給定指令是使 用給定指令格式來表達的,并指定操作和操作數(shù)。指令流是特定指令序列,其中該序列中的 每一指令都是指令格式的指令出現(xiàn)。
[0006] 科學、金融、自動向量化的通用、RMS(識別、挖掘以及合成)/可視和多媒體應用程 序(例如,2D/3D圖形、圖像處理、視頻壓縮/解壓縮、語音識別算法和音頻操縱)常常需要 對大量的數(shù)據項執(zhí)行相同操作(被稱為"數(shù)據并行性")。單指令多數(shù)據(SMD)是指使處理 器對多個數(shù)據項執(zhí)行相同操作的一種指令。SMD技術特別適于能夠在邏輯上將寄存器中的 位分割為若干個固定尺寸的數(shù)據元素的處理器,其中每一個數(shù)據元素都表示單獨的值。例 如,64位寄存器中的位可被指定為作為四個單獨的16位數(shù)據元素的、將對其操作的源操作 數(shù),每一個數(shù)據元素都表示單獨的16位值。作為另一個示例,256位寄存器中的位可被指定 為作為四個單獨的64位打包數(shù)據元素(四字(Q)尺寸的數(shù)據元素)、八個單獨的32位打包 數(shù)據元素(雙字(D)尺寸的數(shù)據元素)、十六個單獨的16位打包數(shù)據元素(字(W)尺寸的 數(shù)據元素)、或三十二個單獨的8位數(shù)據元素(字節(jié)(B)尺寸的數(shù)據元素)的、將對其操作 的源操作數(shù)。這種類型的數(shù)據被稱為打包數(shù)據類型或向量數(shù)據類型,這種數(shù)據類型的操作 數(shù)被稱為打包數(shù)據操作數(shù)或向量操作數(shù)。換句話說,打包數(shù)據項或向量指的是打包數(shù)據元 素的序列;并且打包數(shù)據操作數(shù)或向量操作數(shù)是SMD指令(也稱為打包數(shù)據指令或向量指 令)的源操作數(shù)或目的地操作數(shù)。
[0007] 作為示例,一種類型的SIMD指令指定要以縱向方式對兩個源向量操作數(shù)執(zhí)行的 單個向量操作,以生成相同尺寸的、具有相同數(shù)量的數(shù)據元素、且有相同數(shù)據元素順序的目 的地向量操作數(shù)(也稱為結果向量操作數(shù))。源向量操作數(shù)中的數(shù)據元素被稱為源數(shù)據元 素,而目的地向量操作數(shù)中的數(shù)據元素被稱為目的地或結果數(shù)據元素。這些源向量操作數(shù) 具有相同尺寸,并包含相同寬度的數(shù)據元素,因此它們包含相同數(shù)量的數(shù)據元素。兩個源 向量操作數(shù)中的相同位位置中的源數(shù)據元素形成數(shù)據元素對(也稱為相對應的數(shù)據元素; 艮P,每個源操作數(shù)的數(shù)據元素位置〇中的數(shù)據元素相對應,每個源操作數(shù)的數(shù)據元素位置1 中的數(shù)據元素相對應,以此類推)。分別地對這些源數(shù)據元素對中的每一對執(zhí)行由該SIMD 指令所指定的操作,以生成匹配數(shù)量的結果數(shù)據元素,如此,每一對源數(shù)據元素都具有對應 的結果數(shù)據元素。由于操作是縱向的,并且由于結果向量操作數(shù)尺寸相同、具有相同數(shù)量的 數(shù)據元素、且結果數(shù)據元素與源向量操作數(shù)以相同數(shù)據元素順序來存儲,因此,結果數(shù)據元 素與源向量操作數(shù)中的它們的對應的源數(shù)據元素對處于結果向量操作數(shù)的相同位位置中。 除此示例性類型的SMD指令之外,還有各種其他類型的SMD指令(例如,僅有一個或具有 兩個以上的源向量操作數(shù)的SMD指令;以水平方式操作的SMD指令;生成不同尺寸的結 果向量操作數(shù)的SIMD指令;具有不同尺寸的數(shù)據元素的SIMD指令;和/或具有不同的數(shù)據 元素順序的SMD指令)。應該理解,術語"目的地向量操作數(shù)"(或目的地操作數(shù))被定義 為執(zhí)行由指令所指定的操作的直接結果,包括將該目的地操作數(shù)存儲在某一位置(寄存器 或在由該指令所指定的存儲器地址),以便它可以作為源操作數(shù)由另一指令訪問(由另一 指令指定該同一個位置)。
[0008] 諸如由具有包括 x86、MMX?、流式 SMD 擴展(SSE)、SSE2、SSE3、SSE4. 1 以及 SSE4. 2 指令的指令集的Intel? Core?處理器使用的技術之類的SMD技術,在應用性能方面實現(xiàn) 了顯著的改善(Core?和MMX?是位于加利福尼亞州Santa Clara的Intel Corporation的 注冊商標或商標。)。稱為高級向量擴展(AVX) (AVX1和AVX2)并使用VEX編碼方案的附加 SMD擴展集已經被發(fā)布和/或公開(例如,參見丨mel·? 64和IA-32架構軟件開發(fā)者手冊 (Architectures Software Developers Manual),2011 年 10月;參見丨ntel? 高級向量擴展 編程參考(Advanced Vector Extensions Programming Reference), 2011 年 6 月)。
[0009] 許多現(xiàn)代處理器擴展其能力以執(zhí)行SMD操作來解決主流科學和工程學數(shù)值應 用、視覺處理、識別、數(shù)據挖掘/合成、游戲、物理學、密碼術和其他應用領域中對向量浮點 性能的持續(xù)要求。另外,一些處理器利用預測,包括使用寫掩碼來對SMD寄存器的特定數(shù) 據元素執(zhí)行操作。
[0010] 編譯器被用于向量化循環(huán)以用于使用SIMD指令的高性能執(zhí)行。然而,傳統(tǒng)架構的 編譯器不能向量化具有由跨迭代的(即,循環(huán)攜帶的)依賴所導致的依賴回環(huán)(dependence cycle)的循環(huán)。這些依賴中的一些可能是有條件的(conditional),或它們的存在只能在 運行時獲知。一種解決方案是,通過在循環(huán)體內包括特定指令從而在動態(tài)檢測到的第一依 賴后將向量劃分開(即,使用斷言來將一組向量通道關閉)并隨后在剩余的向量通道上類 似地迭代,來向量化循環(huán)。編譯器使用用于依賴檢測的特殊指令并將基于所檢測的依賴生 成斷言掩碼。這些掩碼隨后被用于劃分向量循環(huán)。
[0011] 在具有依賴回環(huán)(其涉及變量的有條件定義和該變量的有條件使用之間的循環(huán) 攜帶的依賴,其中用于定義和使用的條件不同)的循環(huán)中,如當前技術所定義的指令致使 不必要的動態(tài)向量劃分,這導致性能損失。替代地,可使用復合指令序列來避免不必要的劃 分,而這再次劣化了性能。
[0012] 附圖簡沭
[0013] 本發(fā)明是通過示例說明的,而不僅局限于各個附圖的圖示,在附圖中,類似的參考 標號表示類似的元件,其中:
[0014] 圖 1 (A)不出 ConditionPairStop 的操作的不例。
[0015] 圖1 (B)示出ConditionPairStop的操作的另一示例。
[0016] 圖2示出在處理器中使用ConditionPairStop指令的實施例。
[0017] 圖3示出用于處理包括第一和第二源寫掩碼寄存器、目的地向量寄存器、和操作 碼的ConditionPairStop指令的方法的實施例。
[0018] 圖4示出ConditionPairStop指令的示例性偽代碼。
[0019] 圖5示出向量友好格式的ConditionPairStop的另一種格式。
[0020] 圖6示出根據本發(fā)明一個實施例的1有效位向量寫掩碼元素的數(shù)量與向量尺寸和 數(shù)據元素尺寸之間的關聯(lián)。
[0021] 圖7A-7B是示出根據本發(fā)明的實施例的通用向量友好指令格式及其指令模板的 框圖。
[0022] 圖8A-D是示出根據本發(fā)明的實施例的示例性專用向量友好指令格式的框圖。
[0023] 圖9是根據本發(fā)明的一個實施例的寄存器架構的框圖。
[0024] 圖10A是示出根據本發(fā)明的各實施例的示例性有序流水線和示例性的寄存器重 命名的無序發(fā)布/執(zhí)行流水線的框圖。
[0025] 圖10B是示出根據本發(fā)明的各實施例的要包括在處理器中的有序架構核的示例 性實施例和示例性的寄存器重命名的無序發(fā)布/執(zhí)行架構核的框圖。
[0026] 圖11A-B示出了更具體的示例性有序核架構的框圖,該核將是芯片中的若干邏輯 塊之一(包括相同類型和/或不同類型的其他核)。
[0027] 圖12是根據本發(fā)明的實施例的可具有超過一個的核、可具有集成的存儲器控制 器、并且可具有集成圖形的處理器的框圖。
[0028] 圖13所示的是根據本發(fā)明的一個實施例的系統(tǒng)的框圖。
[0029] 圖14是根據本發(fā)明的實施例的第一更具體的示例性系統(tǒng)的框圖。
[0030] 圖15是根據本發(fā)明的實施例的第二更具體的示例性系統(tǒng)的框圖。
[0031] 圖16是根據本發(fā)明的實施例的SoC的框圖。
[0032] 圖17是根據本發(fā)明的各實施例的對照使用軟件指令轉換器將源指令集中的二進 制指令轉換成目標指令集中的二進制指令的框圖。
[0033] 詳細描沭
[0034] 在以下描述中,陳述了多個具體細節(jié)。然而,應當理解的是,可不通過這些具體細 節(jié)來實施本發(fā)明的實施例。在其它實例中,未詳細示出公知的電路、結構以及技術,以免模 糊對本描述的理解。
[0035] 說明書中對"一個實施例"、"實施例"、"示例實施例"等等的引用表明所描述的實 施例可以包括特定的特征、結構或特性,但是每個實施例不一定都包括該特定的特征、結構 或特性。此外,這些短語不一定表示同一實施例。此外,當結合實施例描述特定的特征、結 構或特性時,認為本領域普通技術人員能夠知曉結合其它實施例來實現(xiàn)這種特征、結構或 特性,無論是否明確描述。
[0036] 概覽
[0037] 在以下描述中,在描述該指令集架構中的該特定指令的操作之前,需要解釋一些 項目。一個這樣的項目稱為"寫掩碼寄存器",通常用于斷言用于有條件地控制逐個元素的 計算操作的操作數(shù)(在下文中,也可能使用術語掩碼寄存器,表示寫掩碼寄存器,諸如下文 討論的"k"寄存器)。如下文中使用,寫掩碼寄存器存儲多個位(16、32、64等等),其中寫 掩碼寄存器中的每個有效位控制向量寄存器的打包數(shù)據元素在SMD處理期間的操作/更 新。典型地,存在超過一個寫掩碼寄存器可供處理器核使用。
[0038] 該指令集架構包括至少一些SMD指令,該至少一些SMD指令指定向量操作并具 有用于從這些向量寄存器中選擇源寄存器和/或目的地寄存器的字段(示例性的SIMD指 令可指定要對向量寄存器中的一個或多個向量寄存器的內容執(zhí)行的向量操作,并且將該向 量操作的結果存儲在向量寄存器之一中)。本發(fā)明的不同實施例可具有不同尺寸的向量寄 存器,并支持更多/更少/不同尺寸的數(shù)據元素。
[0039] 由SIMD指令指定的多位數(shù)據元素的尺寸(例如字節(jié)、字、雙字、四字)確定向量 寄存器中的"數(shù)據元素位置"的位位置,并且向量操作數(shù)的尺寸確定數(shù)據元素的數(shù)量。打包 數(shù)據元素指的是存儲在特定位置中的數(shù)據。換句話說,依賴于目的地操作數(shù)中的數(shù)據元素 的尺寸和目的地操作數(shù)的尺寸(目的地操作數(shù)中總的位數(shù)量)(或者換句話說,依賴于目 的地操作數(shù)的尺寸和該目的地操作數(shù)中的數(shù)據元素的數(shù)量),作為結果的向量操作數(shù)內的 多位數(shù)據元素位置的位位置改變(例如,如果作為結果的向量操作數(shù)的目的地是向量寄存 器,則該目的地向量寄存器內的多位數(shù)據元素位置的位位置改變)。例如,在對32位數(shù)據 元素進行操作的向量操作(數(shù)據元素位置〇占據位位置31:0,數(shù)據元素位置1占據位位置 63:32,以此類推)與對64位數(shù)據元素進行操作的向量操作(數(shù)據元素位置0占據位位置 63:0,數(shù)據元素位置1占據位位置127:64,以此類推)之間,多位數(shù)據元素的位位置不同。
[0040] 此外,根據本發(fā)明的一個實施例,在1有效位向量寫掩碼元素的數(shù)量與向量尺寸 和數(shù)據元素尺寸之間存在如圖6所示的關聯(lián)。示出了 128位、256位以及512位的向量尺 寸,不過其他寬度也是可能的??紤]了 8位字節(jié)(B)、16位字(W)、32位雙字(D)或單精度 浮點以及64位四字(Q)或雙精度浮點的數(shù)據元素尺寸,不過其他寬度也是可能的。如圖所 示,當向量尺寸是128位時,當向量的數(shù)據元素尺寸是8位時可將16位用于掩碼操作,當向 量的數(shù)據元素尺寸是16位時可將8位用于掩碼操作,當向量的數(shù)據元素尺寸是32位時可 將4位用于掩碼操作,以及當向量的數(shù)據元素尺寸是64位時可將2位用于掩碼操作。當向 量尺寸是256位時,當打包數(shù)據元素寬度是8位時可將32位用于掩碼操作,當向量的數(shù)據 元素尺寸是16位時可將16位用于掩碼操作,當向量的數(shù)據元素尺寸是32位時可將8位用 于掩碼操作,以及當向量的數(shù)據元素尺寸是64位時可將4位用于掩碼操作。當向量尺寸是 512位時,當向量的數(shù)據元素尺寸是8位時可將64位用于掩碼操作,當向量的數(shù)據元素尺寸 是16位時可將32位用于掩碼操作,當向量的數(shù)據元素尺寸是32位時可將16位用于掩碼 操作,以及當向量的數(shù)據元素尺寸是64位時可將8位用于掩碼操作。
[0041] 依賴于向量尺寸和數(shù)據元素尺寸的組合,可將所有64位、或僅64位的子集用作寫 掩碼。一般而言,當使用單個逐個元素的掩碼控制位時,用于掩碼操作的向量寫掩碼寄存器 中的位(有效位)的數(shù)量等于以位表示的向量尺寸除以以位表示的向量的數(shù)據元素尺寸。 [0042] 以下所述的本發(fā)明的實施例通過定義指令來解決高效向量化此類循環(huán)的問題,所 述指令將提供相比當前所需的用于避免不必要的向量劃分的復合指令序列而言更高的性 能??紤]以下給出的示例:
【權利要求】
1. 一種響應于指令在計算機處理器中執(zhí)行依賴索引向量計算的方法,所述指令包括第 一和第二源寫掩碼向量寄存器操作數(shù)、目的地向量寄存器操作數(shù)、以及操作碼,所述方法包 括以下步驟: 執(zhí)行所述指令以為所述第一源寫掩碼寄存器的每個位位置確定依賴值,所述依賴值為 與該位位置對應的迭代指示該迭代依賴于哪個位位置; 將所確定的依賴值存儲在所述目的地向量寄存器的對應數(shù)據元素位置中。
2. 如權利要求1所述的方法,其特征在于,所述目的地向量寄存器是128位向量寄存 器。
3. 如權利要求1所述的方法,其特征在于,所述目的地向量寄存器是256位向量寄存 器。
4. 如權利要求1所述的方法,其特征在于,所述目的地向量寄存器是512位向量寄存 器。
5. 如權利要求1所述的方法,其特征在于,所述源寫掩碼寄存器是16位寄存器。
6. 如權利要求1所述的方法,其特征在于,所述源寫掩碼寄存器是64位寄存器。
7. 如權利要求1所述的方法,其特征在于,所述確定和儲存步驟還包括: 將計數(shù)器值和臨時值設為〇 ; 判定所述第一源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是否為1 ; 當所述第一源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是1時,將在位置計數(shù)器 值處的目的地向量寄存器數(shù)據元素設為所述臨時值; 當所述第一源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是〇時,將在位置計數(shù)器 值處的目的地向量寄存器數(shù)據元素設為0 ; 判定所述第二源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是否為1 ; 當所述第二源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是1時,將所述臨時值設 為所述計數(shù)器值加1 ; 將所述計數(shù)器值遞增1 ;以及 重復上述步驟,直至所述第一和第二源寫掩碼寄存器的所有必要位位置已被處理。
8. -種制品,包括: 其上存儲有指令表示的有形機器可讀存儲介質,其中所述指令的格式指定第一和第二 寫掩碼寄存器作為其源操作數(shù),并指定單個向量寄存器作為其目的地,并且其中所述指令 格式包括操作碼,該操作碼響應于所述單個指令的單次發(fā)生而指令機器:為所述第一源寫 掩碼寄存器的每個位位置確定依賴值,所述依賴值為對應于該位位置的迭代指示該迭代依 賴于哪個位位置;并將所確定的依賴值存儲在所述目的地向量寄存器的對應數(shù)據元素位置 中。
9. 如權利要求8所述的制品,其特征在于,所述目的地向量寄存器是128位向量寄存 器。
10. 如權利要求8所述的制品,其特征在于,所述目的地向量寄存器是256位向量寄存 器。
11. 如權利要求8所述的制品,其特征在于,所述目的地向量寄存器是512位向量寄存 器。
12. 如權利要求8所述的制品,其特征在于,所述源寫掩碼寄存器是16位寄存器。
13. 如權利要求8所述的制品,其特征在于,所述源寫掩碼寄存器是64位寄存器。
14. 如權利要求8所述的制品,其特征在于,所述確定和存儲還包括: 將計數(shù)器值和臨時值設為〇 ; 判定所述第一源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是否為1 ; 當所述第一源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是1時,將在位置計數(shù)器 值處的目的地向量寄存器數(shù)據元素設為所述臨時值; 當所述第一源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是〇時,將在位置計數(shù)器 值處的目的地向量寄存器數(shù)據元素設為0 ; 判定所述第二源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是否為1 ; 當所述第二源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是1時,將所述臨時值設 為所述計數(shù)器值加1 ; 將所述計數(shù)器值遞增1 ;以及 重復上述步驟,直至所述第一和第二源寫掩碼寄存器的所有必要位位置已被處理。
15. -種裝置,包括: 硬件解碼器,用于解碼單個依賴索引向量計算指令,所述指令包括第一和第二源寫掩 碼寄存器操作數(shù)、目的地向量寄存器操作數(shù)、和操作碼;以及 執(zhí)行邏輯,用于為所述第一源寫掩碼寄存器的每個位位置確定依賴值,所述依賴值為 對應于該位位置的迭代指示該迭代依賴于哪個位位置,并將所確定的依賴值存儲在所述目 的地向量寄存器的相應數(shù)據元素位置中。
16. 如權利要求15所述的裝置,其特征在于,所述目的地向量寄存器是128位向量寄存 器。
17. 如權利要求15所述的裝置,其特征在于,所述目的地向量寄存器是256位向量寄存 器。
18. 如權利要求15所述的裝置,其特征在于,所述目的地向量寄存器是512位向量寄存 器。
19. 如權利要求15所述的裝置,其特征在于,所述源寫掩碼寄存器是16位寄存器或64 位寄存器。
20. 如權利要求15所述的裝置,其特征在于,所述執(zhí)行邏輯通過以下操作來進行確定 和存儲: 將計數(shù)器值和臨時值設為〇 ; 判定所述第一源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是否為1 ; 當所述第一源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是1時,將在位置計數(shù)值 處的目的地向量寄存器數(shù)據元素設為所述臨時值; 當所述第一源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是〇時,將在位置計數(shù)值 處的目的地向量寄存器數(shù)據元素設為〇 ; 判定所述第二源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是否為1 ; 當所述第二源寫掩碼寄存器的所述計數(shù)器值的位位置中的值是1時,將所述臨時值設 為所述計數(shù)器值加1 ; 將所述計數(shù)器值遞增1 ;以及 重復上述步驟,直至所述第一和第二源寫掩碼寄存器的所有必要位位置已被處理。
【文檔編號】G06F9/06GK104126171SQ201180076457
【公開日】2014年10月29日 申請日期:2011年12月27日 優(yōu)先權日:2011年12月27日
【發(fā)明者】J·巴拉德瓦杰 申請人:英特爾公司