經(jīng)加速的通道間的向量歸約指令的制作方法
【技術領域】
[0001] 本公開涉及處理邏輯、微處理器以及相關聯(lián)的指令集架構(gòu)的領域,該指令集架構(gòu) 在被處理器或其它處理邏輯所執(zhí)行時運行邏輯、數(shù)學或其它功能性操作。
【背景技術】
[0002] 指令集或指令集架構(gòu)(ISA)是計算機架構(gòu)中與編程有關的部分,并且可包括原生 數(shù)據(jù)類型、指令、寄存器架構(gòu)、尋址模式、存儲器架構(gòu)、中斷和異常處理、以及外部輸入和輸 出(I/O)。術語指令在本申請中一般表示宏指令,宏指令是被提供給處理器(或指令轉(zhuǎn)換 器,該指令轉(zhuǎn)換器(利用靜態(tài)二進制轉(zhuǎn)換、包括動態(tài)編譯的動態(tài)二進制轉(zhuǎn)換)轉(zhuǎn)換、變形、 仿真或以其它方式將指令轉(zhuǎn)換成將由處理器處理的一個或多個其它指令)以供執(zhí)行的指 令--作為對比,微指令或微操作(微操作)是處理器的解碼器解碼宏指令的結(jié)果。
[0003] ISA與微架構(gòu)不同,微架構(gòu)是實現(xiàn)該指令集的處理器的內(nèi)部設計。具有不同微架構(gòu) 的處理器可共享共同的指令集。例如,丨ntel?酷睿(Core?)處理器、以及來自加利福尼亞州 桑尼威爾(Sunnyvale)的超微半導體有限公司(Advanced Micro Devices, Inc.)的諸多處 理器執(zhí)行幾乎相同版本的x86指令集(在更新的版本中加入了一些擴展),但具有不同的 內(nèi)部設計。例如,可利用公知技術(包括專用物理寄存器、利用寄存器重命名機制的一個或 多個動態(tài)分配的物理寄存器等等)在不同微架構(gòu)中以不同方式實現(xiàn)該ISA的同一寄存器架 構(gòu)。
[0004] 許多現(xiàn)代ISA支持單指令多數(shù)據(jù)(SIMD)操作。取代僅對一個數(shù)據(jù)元素或一對數(shù) 據(jù)元素進行操作的標量指令,向量指令(也稱為緊縮數(shù)據(jù)指令或SIMD指令)可同時或并行 地對多個數(shù)據(jù)元素或多對數(shù)據(jù)元素進行操作。處理器可具有并行的執(zhí)行硬件,以響應于該 向量指令同時或并行地執(zhí)行多個操作。
[0005] SMD操作在一個操作中對緊縮在一個寄存器或存儲器位置之內(nèi)的多個數(shù)據(jù)元素 進行操作。這些數(shù)據(jù)元素被稱為緊縮數(shù)據(jù)或向量數(shù)據(jù)。向量元素中的每一個可表示單條數(shù) 據(jù)(例如像素的顏色,等等),可單獨或與其它數(shù)據(jù)無關地操作該單條數(shù)據(jù)。
[0006] 在一些情形下,一段源代碼可指定對數(shù)據(jù)元素的數(shù)組執(zhí)行歸約操作的特定順序。 歸約操作的示例是加法,它將數(shù)組中的所有數(shù)據(jù)元素相加以產(chǎn)生單個和,諸如以下串行源 代碼中指定的操作:
[0007] float氺a ;
[0008] float sum = 0. 0 ;
[0009] for(int i = 0 ;i<100xl024 ;++i) {
[0010] sum+ = a[i];
[0011] }
[0012] 上述源代碼通過按照升序?qū)?shù)組元素求和來對數(shù)組執(zhí)行歸約操作。對于浮點數(shù)據(jù) 元素,對將數(shù)據(jù)元素相加的順序的改變會改變最終和--盡管該改變可以是輕微的。在需 要高精度算術的科學計算中,即使輕微的改變可能也是不可接受的。因此,需要保持對數(shù)據(jù) 元素進行操作的順序,以保留由該源代碼所指定的精確舍入特性。然而,諸如上述那樣的串 行計算是耗時的。如果能對浮點計算進行重新排序,則可通過累加四個部分和(然后在該 循環(huán)之外將這四個部分和加到一起)來完成求和。在該情況下,循環(huán)主體一次加載四個單 精度值,并將包含:
[0013] movups (% [a],% [i],4),% xmmO// 加載 16B
[0014] addps% xmmO, % [sum]
[0015] 上述匯編代碼使用緊縮數(shù)據(jù)加法(也稱為向量加法)'addps',該緊縮數(shù)據(jù)加法將 向量寄存器(xmmO)的內(nèi)容累加至和中。該匯編代碼由于使用了向量操作而比串行源代碼 更高效;然而,該匯編代碼未保留如串行源代碼中那樣的歸約操作的順序,并且可能產(chǎn)生與 該串行源代碼的結(jié)果不同的結(jié)果。
[0016] 附圖簡述
[0017] 在附圖中的諸個圖中通過示例而非限制地示出各個實施例:
[0018] 圖1是根據(jù)一個實施例的包括向量寄存器的指令處理裝置的框圖。
[0019] 圖2是根據(jù)一個實施例的寄存器架構(gòu)的框圖。
[0020] 圖3A示出根據(jù)一個實施例的用于單精度值的向量歸約操作的示例。
[0021] 圖3B示出根據(jù)一個實施例的用于雙精度值的向量歸約操作的示例。
[0022] 圖4A示出根據(jù)一個實施例的將不具有向量歸約指令的代碼轉(zhuǎn)換成具有向量歸約 指令的經(jīng)轉(zhuǎn)化代碼的示例。
[0023] 圖4B示出根據(jù)一個實施例的將不具有向量歸約指令的代碼轉(zhuǎn)換成具有向量歸約 指令的經(jīng)轉(zhuǎn)化代碼的另一示例。
[0024] 圖5A示出根據(jù)一個實施例的用于執(zhí)行向量歸約指令的計算機系統(tǒng)的組件。
[0025] 圖5B是示出根據(jù)一個實施例的將響應于向量歸約指令而執(zhí)行的操作的流程圖。
[0026] 圖6是示出根據(jù)一個實施例的使用軟件指令轉(zhuǎn)換器將源指令集中的二進制指令 轉(zhuǎn)換成目標指令集中的二進制指令的框圖。
[0027] 圖7A是根據(jù)一個實施例的有序和無序流水線的框圖。
[0028] 圖7B是根據(jù)一個實施例的有序和無序核的框圖。
[0029] 圖8A-B是根據(jù)一個實施例的更具體的示例性有序核架構(gòu)的框圖。
[0030] 圖9是根據(jù)一個實施例的處理器的框圖。
[0031] 圖10是根據(jù)一個實施例的系統(tǒng)的框圖。
[0032] 圖11是根據(jù)一個實施例的第二系統(tǒng)的框圖。
[0033] 圖12是根據(jù)本發(fā)明的實施例的第三系統(tǒng)的框圖。
[0034] 圖13是根據(jù)一個實施例的芯片上系統(tǒng)(SoC)的框圖。
【具體實施方式】
[0035] 在以下描述中,陳述了多個具體細節(jié)。然而,應當理解的是,可不通過這些具體細 節(jié)來實施本發(fā)明的實施例。在其它實例中,未詳細示出公知的電路、結(jié)構(gòu)以及技術,以免模 糊對本描述的理解。
[0036] 本申請中描述的實施例提供用于加速歸約操作的向量歸約指令。歸約操作可以是 加法性歸約、乘法性或減法性歸約??蓪⑾蛄繗w約指令應用于能由處理器處理的任何數(shù)值 數(shù)據(jù)格式的任何尺寸的數(shù)據(jù)元素(諸如64位雙精度浮點數(shù)、32位單精度浮點數(shù)、16位半精 度浮點數(shù)或其它數(shù)值數(shù)據(jù)格式)的數(shù)組。給定用于執(zhí)行歸約操作的預定義順序,可安排向 量歸約指令以使得處理器利用向量操作(也稱為緊縮數(shù)據(jù)操作)以給定的預定義順序執(zhí)行 該歸約操作,以提高效率。在一些實施例中,可通過編譯器生成向量歸約指令,該編譯器將 高級語言編寫的串行化代碼編譯成二進制或其它中間格式的向量代碼。在一些實施例中, 可通過二進制轉(zhuǎn)化/轉(zhuǎn)換器系統(tǒng)來生成向量歸約指令,該二進制轉(zhuǎn)化/轉(zhuǎn)換器系統(tǒng)把更短 向量寬度的向量代碼轉(zhuǎn)化或以其它方式轉(zhuǎn)換成更寬向量寬度的另一向量代碼,或把不使用 新歸約指令的向量代碼轉(zhuǎn)化或以其它方式轉(zhuǎn)換至利用新歸約指令的另一向量代碼。在一些 其它實施例中,可由計算機程序員將向量歸約指令寫入程序。
[0037] 在一個實施例中,向量歸約指令包括用于不同算術操作和不同數(shù)值數(shù)據(jù)格式(例 如單精度、雙精度、半精度等等)的VADDREDUCEPS、VMULTREDUCEPS、VSUBREDUCEPS以及他們 的變型。前綴'V'指示向量操作;'ADD'、'MULT'和'SUB'分別指示加法、乘法和減法;后 綴'P'指示緊縮操作(即向量操作),并且后綴'S'指示單精度數(shù)據(jù)元素。在其它實施例 中,可將不同的符號用于相同或相似指令。為了簡化討論,以下描述可使用術語"向量歸約 指令"來表示這些歸約指令的任何一個或全部以及他們的變型,除非另有特別聲明。在一個 實施例中,這些向量歸約指令使處理器對數(shù)據(jù)元素的數(shù)組執(zhí)行算術操作(例如加法、減法、 乘法等等),并對該數(shù)組中的數(shù)據(jù)元素進行混洗。這些向量歸約指令使用一個或多個向量寄 存器作為操作數(shù),其中作為源操作數(shù)的向量寄存器與數(shù)據(jù)元素的數(shù)組一起被加載。每個向 量歸約指令可對多個數(shù)據(jù)元素進行操作:對多個數(shù)據(jù)元素中的一些進行數(shù)學操作(例如加 法、減法、乘法等等),并混洗多個數(shù)據(jù)元素中的一些(例如移位至數(shù)組中的不同位置)。向 量歸約指令可加速歸約操作同時保留相同的操作順序,以產(chǎn)生與串行源代碼或指定任何給 定操作順序的另一源代碼相同的結(jié)果。
[0038] 圖1是指令處理裝置115的實施例的框圖,該指令處理裝置具有執(zhí)行單元140,該 執(zhí)行單元包括能用于執(zhí)行指令(包括新的歸約指令)的電路。在一些實施例中,指令處理 裝置115可以是處理器、多核處理器的處理器核、或者電子系統(tǒng)中的處理元件。
[0039] 解碼器130接收高級機器指令或宏指令形式的傳入指令,并且解碼所述指令以生 成低級微操作、微代碼進入點、微指令或其它低級指令或控制信號,它們反映了原始的高級 指令和/或從原始的高級指令導出。低級指令或控制信號可通過低級(例如,電路級或硬 件級)操作來實現(xiàn)高級指令的操作??墒褂酶鞣N不同的機制來實現(xiàn)解碼器130。合適機制 的示例包括但不限于,微代碼、查找表、硬件實現(xiàn)、可編程邏輯陣列(PLA)、用于實現(xiàn)本領域 已知的解碼器的其它機制等。
[0040] 解碼器130可接收針對高速緩存110、存儲器120或其它源的傳入指令。經(jīng)解碼的 指令被發(fā)送到執(zhí)行單元140。執(zhí)行單元140可從解碼器130接收一個或多個微操作、微代碼 進入點、微指令、其它指令或其它控制信號,它們反映了所接收的指令或者是從所接收的指 令導出的。執(zhí)行單元140從寄存器組170、高速緩存110和/或存儲器120接收數(shù)據(jù)輸入并 向它們生成數(shù)據(jù)輸出。
[0041] 在一個實施例中,寄存器組170包括架構(gòu)寄存器,架構(gòu)寄存器也被稱為寄存器。短 語"架構(gòu)寄存器"、"寄存器組"、以及"寄存器"在本文中用于表示對軟件和/或編程器可見 (例如,軟件可見的)和/或由宏指令指定來標識操作數(shù)的寄存器,除非另外予以規(guī)定或清 楚明顯可知。這些寄存器不同于給定微架構(gòu)中的其它非架構(gòu)式寄存器(例如,臨時寄存器、 重排序緩沖器、引退寄存器等)。
[0042] 為了避免混淆描述,已示出和描述了相對簡單的指令處理裝置115。應當理解,其 它實施例可具有超過一個執(zhí)行單元。例如,裝置115可包括多個不同類型的執(zhí)行單元,諸如 例如算術單元、算術邏輯單元(ALU)、整數(shù)單元、浮點單元等。指令處理裝置或處理器的再 其它實施例可具有多個核、邏輯處理器或執(zhí)行引擎。稍后將參考圖7-13提供指令處理裝置 115的多個實施例。
[0043] 根據(jù)一個實施例,寄存器組170包括一組向量寄存器175,該組向量寄存器可用于 存儲向量歸約指令的操作數(shù)。每個向量寄存器175可以是512位、256位或128位寬(即 64字節(jié)、32字節(jié)或16字節(jié)寬),或可使用不同的向量寬度。
[0044] 圖2示出了支持本文描述的指令的底層寄存器架構(gòu)200的一個實施例。寄存器架 構(gòu)200基于]ntel?酷睿(Core?)處理器,該處理器實現(xiàn)包括x86、MMX?、流SMD擴展(SSE)、 SSE2、SSE3、SSE4. 1、和SSE4. 2指令的指令集,以及SMD擴展的附加集,該附加集被稱為高 級向量擴展(AVX) (AVX1、AVX2和AVX3)。然而,應理解,也可使用