本發(fā)明一般涉及計算機處理器的領(lǐng)域。更特別地,本發(fā)明涉及用于執(zhí)行自旋-循環(huán)(spin-loop)跳轉(zhuǎn)的方法和裝置。
背景技術(shù):
指令集或指令集架構(gòu)(isa)是與編程相關(guān)的計算機架構(gòu)的部分,其包括原生數(shù)據(jù)類型、指令、寄存器架構(gòu)、尋址模式、存儲器架構(gòu)、中斷和異常處理、以及外部輸入和輸出(i/o)。應(yīng)注意的是,術(shù)語“指令”在本文中一般是指宏指令(即被提供給處理器以供執(zhí)行的指令),與微指令或微操作(micro-op)(即處理器的解碼器解碼宏指令的結(jié)果)相對。微指令或微操作可以被配置成指示處理器上的執(zhí)行單元來實行操作以實現(xiàn)與宏指令關(guān)聯(lián)的邏輯。
isa與微架構(gòu)不同,所述微架構(gòu)是用于實現(xiàn)指令集的處理器設(shè)計技術(shù)的集合。具有不同微架構(gòu)的處理器可以共享公共指令集。例如,intel?奔騰4處理器、intel?coretm處理器和來自加利福尼亞州桑尼維爾的高級微設(shè)備公司的處理器實現(xiàn)幾乎相同的版本的x86指令集(具有已經(jīng)添加有較新版本的一些擴展),但具有不同的內(nèi)部設(shè)計。例如,isa的相同寄存器架構(gòu)可以使用公知的技術(shù)在不同的微架構(gòu)中以不同的方式實現(xiàn),包括專用物理寄存器、使用寄存器重命名機制(例如,使用寄存器別名表(rat)、重排序緩沖器(rob)和退役寄存器文件)的一個或多個動態(tài)分配的物理寄存器。除非以其他方式指定,否則短語寄存器架構(gòu)、寄存器文件和寄存器在本文中用于指代對軟件/編程器可見的那個以及指令以其指定寄存器的方式。在需要區(qū)別的情況下,形容詞“邏輯的”、“架構(gòu)的”或“軟件可見的”將用于指示寄存器架構(gòu)中的寄存器/文件,而不同形容詞將用于指定給定微架構(gòu)中的寄存器(例如,物理寄存器、重排序緩沖器、退役寄存器、寄存器池)。
指令集包括一個或多個指令格式。給定指令格式定義各種字段(位的數(shù)量、位的位置)以除了其他之外尤其指定將執(zhí)行的操作和該操作將在其上執(zhí)行的(一個或多個)操作數(shù)。某些指令格式通過指令模板(或者子格式)的定義被進一步分解。例如,給定指令格式的指令模板可以被定義為具有指令格式的字段的不同子集(所包括的字段典型地以相同的次序,但是至少某些具有不同的位的位置,因為包括更少的字段)和/或被定義為具有不同地解釋的給定字段。給定指令使用給定指令格式(并且,如果被定義,以該指令格式的指令模板中的給定的一個)來表達并指定操作和操作數(shù)。指令流是指令的特定序列,其中序列中的每個指令是以指令格式(并且,如果被定義,該指令格式的指令模板中的給定的一個)的指令的出現(xiàn)。
附圖說明
對本發(fā)明的更好的理解可以從以下詳細描述結(jié)合附圖來獲得,其中:
圖1a和1b是圖示根據(jù)本發(fā)明的實施例的通用矢量友好的指令格式及其指令模板的框圖;
圖2a-d是圖示根據(jù)本發(fā)明的實施例的示例性特定矢量友好的指令格式的框圖;
圖3是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)的框圖;以及
圖4a是圖示根據(jù)本發(fā)明的實施例的示例性有序取出、解碼、退役流水線和示例性寄存器重命名、無序發(fā)出/執(zhí)行流水線二者的框圖;
圖4b是圖示根據(jù)本發(fā)明的實施例的要被包括在處理器中的有序取出、解碼、退役核的示例性實施例和示例性寄存器重命名、無序發(fā)出/執(zhí)行架構(gòu)核二者的框圖;
圖5a是單個處理器核、連同其到管芯上互連網(wǎng)絡(luò)的連接的框圖;
圖5b圖示根據(jù)本發(fā)明的實施例的圖5a中的處理器核的部分的展開圖。
圖6是根據(jù)本發(fā)明的實施例的具有集成存儲器控制器和圖形的單核處理器和多核處理器的框圖;
圖7圖示根據(jù)本發(fā)明的一個實施例的系統(tǒng)的框圖;
圖8圖示根據(jù)本發(fā)明的實施例的第二系統(tǒng)的框圖;
圖9圖示根據(jù)本發(fā)明的實施例的第三系統(tǒng)的框圖;
圖10圖示根據(jù)本發(fā)明的實施例的片上系統(tǒng)(soc)的框圖;
圖11圖示根據(jù)本發(fā)明的實施例的對比使用軟件指令轉(zhuǎn)換器來將源指令集中的二進制指令轉(zhuǎn)換成目標(biāo)指令集中的二進制指令的框圖;
圖12圖示可以在其上實現(xiàn)本發(fā)明的實施例的示例性處理器;
圖13圖示示出示例性自旋-循環(huán)的方法;
圖14圖示由跳轉(zhuǎn)-暫停(jump-pause)指令的一個實施例執(zhí)行的多個操作;
圖15圖示根據(jù)測試-減法(test-subtract)指令的一個實施例的方法。
具體實施方式
在以下描述中,為了解釋的目的,闡述眾多具體細節(jié)以便提供對以下描述的本發(fā)明的實施例的透徹理解。然而,對于本領(lǐng)域技術(shù)人員將明顯的是,本發(fā)明的實施例可以在沒有這些具體細節(jié)中的一些的情況下實踐。在其他情況下,公知的結(jié)構(gòu)和設(shè)備以框圖的形式示出以避免使本發(fā)明的實施例的基礎(chǔ)原理模糊。
示例性處理器架構(gòu)和數(shù)據(jù)類型
指令集包括一個或多個指令格式。給定指令格式定義各種字段(位的數(shù)量、位的位置)以除了其他之外尤其指定將執(zhí)行的操作(操作碼(opcode))和該操作將在其上執(zhí)行的(一個或多個)操作數(shù)。某些指令格式通過指令模板(或者子格式)的定義被進一步分解。例如,給定指令格式的指令模板可以被定義為具有指令格式的字段的不同子集(所包括的字段典型地以相同的次序,但是至少某些具有不同的位的位置,因為包括更少的字段)和/或被定義為具有不同地解釋的給定字段。因此,isa的每個指令使用給定指令格式(并且,如果被定義,以該指令格式的指令模板中的給定的一個)來表達并包括用于指定操作和操作數(shù)的字段。例如,示例性add指令具有特定操作碼和指令格式,所述指令格式包括指定該操作碼的操作碼字段和選擇操作數(shù)(源1(source1)/目的地和源2(source2))的操作數(shù)字段;并且在指令流中該add指令的出現(xiàn)將在選擇特定操作數(shù)的操作數(shù)字段中具有特定的內(nèi)容。稱為高級矢量擴展(avx)(avx1和avx2)并使用矢量擴展(vex)編碼方案的simd擴展的集合已經(jīng)已經(jīng)被發(fā)布和/或出版(例如,參見intel?64和ia-32架構(gòu)軟件開發(fā)者手冊,2011年10月;并且參見intel?高級矢量擴展編程參考,2011年6月)。
示例性指令格式
本文描述的(一個或多個)指令的實施例可以以不同格式來體現(xiàn)。此外,下面詳述了示例性的系統(tǒng)、架構(gòu)和流水線。(一個或多個)指令的實施例可以在這樣的系統(tǒng)、架構(gòu)和流水線上執(zhí)行,但并不限于所詳述的那些。
a.通用矢量友好的指令格式
矢量友好的指令格式是適合于矢量指令的指令格式(例如,存在對矢量操作特定的某些字段)。雖然描述了其中通過矢量友好的指令格式支持矢量和標(biāo)量操作兩者的實施例,但可替換的實施例僅使用矢量友好的指令格式的矢量操作。
圖1a-1b是圖示了根據(jù)本發(fā)明的實施例的通用矢量友好的指令格式及其指令模板的框圖。圖1a是圖示了根據(jù)本發(fā)明的實施例的通用矢量友好的指令格式及其a類指令模板的框圖;而圖1b是圖示了根據(jù)本發(fā)明的實施例的通用矢量友好的指令格式及其b類指令模板的框圖。具體地,針對通用矢量友好的指令格式100定義了a類和b類指令模板,其兩者都包括非存儲器訪問105指令模板和存儲器訪問120指令模板。在矢量友好的指令格式的上下文中的術(shù)語通用是指該指令格式不被束縛于任何特定指令集。
雖然將描述其中矢量友好的指令格式支持下述內(nèi)容的本發(fā)明的實施例:具有32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或大?。┑?4字節(jié)矢量操作數(shù)長度(或大小)(并且因此,包括16個雙字大小元素或可替換地8個四字大小元素的64字節(jié)矢量);具有16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或大?。┑?4字節(jié)矢量操作數(shù)長度(或大?。?;具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或大小)的32字節(jié)矢量操作數(shù)長度(或大?。?;以及具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或大小)的16字節(jié)矢量操作數(shù)長度(或大?。?;但可替換的實施例可以支持具有更多、更少或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)的更多、更少和/或不同的矢量操作數(shù)大?。ɡ?,256字節(jié)矢量操作數(shù))。
圖1a中的a類指令模板包括:1)在非存儲器訪問105指令模板內(nèi)示出非存儲器訪問、完全舍入控制類型操作110指令模板和非存儲器訪問、數(shù)據(jù)變換類型操作115指令模板;以及2)在存儲器訪問120指令模板內(nèi)示出存儲器訪問、暫時125指令模板和存儲器訪問、非暫時130指令模板。圖1b中的b類指令模板包括:1)在非存儲器訪問105指令模板內(nèi)示出非存儲器訪問、寫入掩蔽控制、部分舍入控制類型操作112指令模板和非存儲器訪問、寫入掩蔽控制、vsize類型操作117指令模板;以及2)在存儲器訪問120指令模板內(nèi)示出存儲器訪問、寫入掩蔽控制127指令模板。
通用矢量友好的指令格式100包括以圖1a-1b中圖示的次序在下文列出的下述字段。
格式字段140——在該字段中的特定值(指令格式標(biāo)識符值)唯一地標(biāo)識矢量友好的指令格式,以及因此在指令流中以矢量友好的指令格式的指令的出現(xiàn)。這樣,該字段是可選的,在該字段對于僅具有通用矢量友好的指令格式的指令集而言不是需要的意義上。
基礎(chǔ)(base)操作字段142——其內(nèi)容區(qū)分不同的基礎(chǔ)操作。
寄存器索引字段144——其內(nèi)容直接地或通過地址生成而指定源和目的地操作數(shù)的位置,它們在寄存器中或存儲器中。這些包括足夠的位數(shù)以從pxq(例如,32x512、16x128、32x1024、64x1024)寄存器文件中選擇n個寄存器。雖然在一個實施例中n可以多達三個源和一個目的地寄存器,但可替換實施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多達兩個源,其中這些源之一還用作目的地,可以支持多達三個源,其中這些源之一還用作目的地,可以支持多達兩個源和一個目的地)。
修改器字段146——其內(nèi)容區(qū)分指定存儲器訪問的以通用矢量指令格式的指令的出現(xiàn)與不指定存儲器訪問的那些;也就是說,將非存儲器訪問105指令模板與存儲器訪問120指令模板進行區(qū)分。存儲器訪問操作讀取和/或?qū)懭胫链鎯ζ鲗蛹墸ㄔ谀承┣闆r下使用寄存器中的值指定源和/或目的地地址),而非存儲器訪問操作不這樣做(例如,源和目的地是寄存器)。雖然在一個實施例中該字段還在三個不同的方式之間進行選擇以執(zhí)行存儲器地址計算,但可替換實施例可以支持更多、更少或不同的方式以執(zhí)行存儲器地址計算。
擴增操作字段150——其內(nèi)容區(qū)分除了基礎(chǔ)操作之外還將執(zhí)行的各種不同操作中的哪一個。該字段是上下文特定的。在本發(fā)明的一個實施例中,該字段被劃分成類別字段168、阿爾法(alpha)字段152和貝塔(beta)字段154。擴增操作字段150允許普通操作組將在單個指令而不是2、3或4個指令中執(zhí)行。
縮放(scale)字段160——其內(nèi)容計及用于存儲器地址生成的索引字段的內(nèi)容的縮放(例如,對于使用2scale*索引+基礎(chǔ)的地址生成)。
位移字段162a——其內(nèi)容被用作存儲器地址生成的部分(例如,對于使用2scale*索引+基礎(chǔ)+位移的地址生成)。
位移因子字段162b(注意位移字段162a直接并置在位移因子字段162b之上指示使用一個或另一個)——其內(nèi)容被用作地址生成的部分;它指定將按存儲器訪問的大小(n)縮放的位移因子——其中n是存儲器訪問中的字節(jié)數(shù)(例如,對于使用2scale*索引+基礎(chǔ)+縮放的位移的地址生成)。冗余的低階位被忽略,并因此,位移因子字段的內(nèi)容與存儲器操作數(shù)總大?。╪)相乘以便生成將在計算有效地址中使用的最終位移。n的值由處理器硬件在運行時基于完全操作碼字段174(本文稍后描述)和數(shù)據(jù)操縱字段154c確定。在它們并不用于非存儲器訪問105指令模板和/或不同的實施例可以實現(xiàn)二者中僅一個或二者都不實現(xiàn)的意義上,位移字段162a和位移因子字段162b是可選的。
數(shù)據(jù)元素寬度字段164——其內(nèi)容區(qū)分多個數(shù)據(jù)元素寬度中的哪一個將被使用(在某些實施例中,針對所有指令;在其他實施例中,僅針對部分指令)。在僅支持一個數(shù)據(jù)元素寬度和/或使用操作碼的某些方面支持多個數(shù)據(jù)元素寬度的情況下并不需要該字段的意義上,該字段是可選的。
寫入掩蔽字段170——其內(nèi)容在每個數(shù)據(jù)元素位置的基礎(chǔ)上控制在目的地矢量操作數(shù)中的該數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴增操作的結(jié)果。a類指令模板支持合并寫入掩蔽,而b類指令模板支持合并和歸零寫入掩蔽兩者。當(dāng)合并時,矢量掩蔽允許保護目的地中的任何元素集合在(由基礎(chǔ)操作和擴增操作指定的)任何操作的執(zhí)行期間免于被更新;在另一實施例中,保留其中對應(yīng)掩蔽位具有0的目的地的每個元素的舊值。作為對照,當(dāng)歸零矢量掩蔽允許目的地中的任何元素集合在(由基礎(chǔ)操作和擴增操作指定的)任何操作的執(zhí)行期間歸零時;在一個實施例中,當(dāng)對應(yīng)掩蔽位具有0值時,目的地的元素被設(shè)置成0。該功能的子集是控制正被執(zhí)行的操作的矢量長度(也就是說,正被修改的元素的跨度,從第一個至最后一個)的能力;然而,被修改的元素是連續(xù)的并不是必要的。因此,寫入掩蔽字段170計及部分矢量操作,包括加載、存儲、算術(shù)、邏輯等等。雖然描述了其中寫入掩蔽字段170的內(nèi)容選擇多個寫入掩蔽寄存器中的包含將使用的寫入掩蔽的一個(并且因此寫入掩蔽字段170的內(nèi)容間接標(biāo)識將執(zhí)行的掩蔽)的本發(fā)明的實施例,但可替換的實施例替換地或附加地允許掩蔽寫入字段170的內(nèi)容直接指定將執(zhí)行的掩蔽。
立即數(shù)(immediate)字段172——其內(nèi)容計及對立即數(shù)的規(guī)定。在該字段在不支持立即數(shù)的通用矢量友好的格式的實現(xiàn)中不存在并且在不使用立即數(shù)的指令中不存在的意義上,該字段是可選的。
類別字段168——其內(nèi)容區(qū)分不同的指令類別。參考圖1a-b,該字段的內(nèi)容在a類和b類指令之間進行選擇。在圖1a-b中,圓角方形用于指示在字段中存在特定值(例如,對于類別字段168在圖1a-b中分別為a類168a和b類168b)。
a類的指令模板
在a類的非存儲器訪問105指令模板的情況下,阿爾法字段152被解釋為rs字段152a,其內(nèi)容區(qū)分不同的擴增操作類型中的哪一種將被執(zhí)行(例如,針對非存儲器訪問、舍入類型操作110和非存儲器訪問、數(shù)據(jù)變換類型操作115指令模板分別指定舍入152a.1和數(shù)據(jù)變換152a.2),而貝塔字段154區(qū)分該指定類型的操作中的哪一個將被執(zhí)行。在非存儲器訪問105指令模板中,不存在縮放字段160、位移字段162a以及位移縮放字段162b。
非存儲器訪問指令模板——完全舍入控制類型操作
在非存儲器訪問完全舍入控制類型操作110指令模板中,貝塔字段154被解釋為舍入控制字段154a,其(一個或多個)內(nèi)容提供靜態(tài)舍入。雖然在本發(fā)明描述的實施例中舍入控制字段154a包括抑制所有浮點異常(sae)字段156以及舍入操作控制字段158,但可替換的實施例可以支持可以將這兩個概念編碼到相同的字段中或者僅具有這些概念/字段中的一個或另一個(例如,可以僅具有舍入操作控制字段158)。
sae字段156——其內(nèi)容區(qū)分是否禁用異常事件報告;當(dāng)sae字段156的內(nèi)容指示抑制被啟用時,給定指令并不報告任何種類的浮點異常標(biāo)記并且不引起任何浮點異常處理機(handler)。
舍入操作控制字段158——其內(nèi)容區(qū)分要執(zhí)行一組舍入操作中的哪一個(例如,向上舍入、向下舍入、向零舍入以及向最近舍入)。因此,舍入操作控制字段158計及在每個指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段150的內(nèi)容超越(override)該寄存器值。
非存儲器訪問指令模板——數(shù)據(jù)變換類型操作
在非存儲器訪問數(shù)據(jù)變換類型操作115指令模板中,貝塔字段154被解釋為數(shù)據(jù)變換字段154b,其內(nèi)容區(qū)分多個數(shù)據(jù)變換中的哪一個將被執(zhí)行(例如,無數(shù)據(jù)變換、拌和(swizzle)、廣播)。
在a類的存儲器訪問120指令模板的情況下,阿爾法字段152被解釋為逐出提示字段152b,其內(nèi)容區(qū)分哪一個逐出提示將被使用(在圖1a中,針對存儲器訪問、暫時125指令模板和存儲器訪問、非暫時130指令模板分別指定暫時152b.1和非暫時152b.2),而貝塔字段154被解釋為數(shù)據(jù)操縱字段154c,其內(nèi)容區(qū)分多個數(shù)據(jù)操縱操作(還稱為基元(primitive))中的哪一個將被執(zhí)行(例如,無操縱;廣播;源的上轉(zhuǎn)換;以及目的地的下轉(zhuǎn)換)。存儲器訪問120指令模板包括縮放字段160以及可選地位移字段162a或位移縮放字段162b。
在轉(zhuǎn)換的支持下,矢量存儲器指令執(zhí)行從存儲器的矢量加載和向存儲器的矢量存儲。關(guān)于常規(guī)矢量指令,矢量存儲器指令以數(shù)據(jù)元素方面的方式從/至存儲器轉(zhuǎn)移數(shù)據(jù),其中被實際轉(zhuǎn)移的元素由被選為寫入掩蔽的矢量掩蔽的內(nèi)容指定。
存儲器訪問指令模板——暫時
暫時數(shù)據(jù)是可能被重新使用得足夠快以受益于高速緩存的數(shù)據(jù)。然而,這是一種提示,并且不同的處理器可以以不同的方式實現(xiàn)它,包括完全忽略該提示。
存儲器訪問指令模板——非暫時
非暫時數(shù)據(jù)是不太可能被足夠快地重新使用以受益于在一級高速緩存中的高速緩存并且應(yīng)當(dāng)被給予針對逐出的優(yōu)先權(quán)的數(shù)據(jù)。然而,這是一種提示,并且不同的處理器可以以不同的方式實現(xiàn)它,包括完全忽略該提示。
b類的指令模板
在b類的指令模板的情況下,阿爾法字段152被解釋為寫入掩蔽控制(z)字段152c,其內(nèi)容區(qū)分由寫入掩蔽字段170控制的寫入掩蔽應(yīng)當(dāng)為合并還是歸零。
在b類的非存儲器訪問105指令模板的情況下,貝塔字段154的部分被解釋為rl字段157a,其內(nèi)容區(qū)分不同擴增操作類型中的哪一個將被執(zhí)行(例如,針對非存儲器訪問、寫入掩蔽控制、部分舍入控制類型操作112指令模板和非存儲器訪問、寫入掩蔽控制、vsize類型操作117指令模板分別指定舍入157a.1和矢量長度(vsize)157a.2),而貝塔字段154的其余部分區(qū)分要執(zhí)行指定的類型的操作的哪一個。在非存儲器訪問105指令模板中,不存在縮放字段160、位移字段162a以及位移縮放字段162b。
在非存儲器訪問、寫入掩蔽控制、部分舍入控制類型操作110指令模板中,貝塔字段154的其余部分被解釋為舍入操作字段159a并且異常事件報告被禁用(給定的指令并不報告任何種類的浮點異常標(biāo)記并且不引起任何浮點異常處理機)。
舍入操作控制字段159a——正如舍入操作控制字段158,其內(nèi)容區(qū)分要執(zhí)行一組舍入操作中的哪一個(例如,向上舍入、向下舍入、向零舍入以及向最近舍入)。因此,舍入操作控制字段159a計及在每個指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段150的內(nèi)容超越該寄存器值。
在非存儲器訪問、寫入掩蔽控制、vsize類型操作117指令模板中,貝塔字段154的其余部分被解釋為矢量長度字段159b,其內(nèi)容區(qū)分將在多個數(shù)據(jù)矢量長度中的哪一個上執(zhí)行(例如,128、256、或者512字節(jié))。
在b類的存儲器訪問120指令模板的情況下,貝塔字段154的部分被解釋為廣播字段157b,其內(nèi)容區(qū)分廣播類型數(shù)據(jù)操縱操作是否將被執(zhí)行,而貝塔字段154的其余部分被解釋為矢量長度字段159b。存儲器訪問120指令模板包括縮放字段160以及可選地位移字段162a或位移縮放字段162b。
關(guān)于通用矢量友好的指令格式100,示出了包括格式字段140、基礎(chǔ)操作字段142以及數(shù)據(jù)元素寬度字段164的完全操作碼字段174。雖然示出了其中完全操作碼字段174包括所有這些字段的一個實施例,但是在不支持它們所有的實施例中,完全操作碼字段174包括少于所有這些字段。完全操作碼字段174提供操作代碼(操作碼)。
擴增操作字段150、數(shù)據(jù)元素寬度字段164以及寫入掩蔽字段170允許在通用矢量友好的指令格式中在每個指令的基礎(chǔ)上指定這些特征。
寫入掩蔽字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建類型化指令,因為它們允許基于不同的數(shù)據(jù)元素寬度而應(yīng)用掩蔽。
在a類和b類內(nèi)找到的各種指令模板有益于不同狀況。在本發(fā)明的一些實施例中,不同處理器或處理器內(nèi)的不同核可以支持僅a類、僅b類或者支持兩類。例如,意圖用于通用計算的高性能通用無序核可以僅支持b類,主要意圖用于圖形和/或科學(xué)(吞吐量)計算的核可以僅支持a類,并且意圖用于兩者的核可以支持兩者(當(dāng)然,具有來自兩類的模板和指令的某種混合而并非來自兩類的所有模板和指令的核在本發(fā)明的范圍內(nèi))。而且,單個處理器可以包括多個核,其全部支持相同的類別或者其中不同的核支持不同的類別。例如,在具有單獨的圖形和通用核的處理器中,主要意圖用于圖形和/或科學(xué)計算的圖形核中的一個可以僅支持a類,而通用核中的一個或多個可以為僅支持b類的意圖用于通用計算的具有無序執(zhí)行和寄存器重命名的高性能通用核。不具有單獨的圖形核的另一處理器可以包括支持a類和b類兩者的一個多個通用有序或無序核。當(dāng)然,在本發(fā)明的不同實施例中來自一個類別的特征還可以實現(xiàn)在另一類別中。以高級語言撰寫的程序會被放入(例如,即時編譯或靜態(tài)編譯)多種不同的可執(zhí)行的形式,包括:1)僅具有由目標(biāo)處理器支持以供執(zhí)行的(一個或多個)類別的指令的形式;或者2)具有使用所有類別的指令的不同組合撰寫的可替換的例程并具有基于由當(dāng)前執(zhí)行代碼的處理器支持的指令而選擇例程以執(zhí)行的控制流代碼的形式。
b.示例性特定矢量友好的指令格式
圖2是圖示根據(jù)本發(fā)明的實施例的示例性特定矢量友好的指令格式的框圖。圖2示出了特定矢量友好的指令格式200,其在它指定了字段的位置、大小、解釋和次序以及針對那些字段中某些的值的意義上而言是特定的。特定矢量友好的指令格式200可以用于擴展x86指令集,并因此某些字段與在現(xiàn)有x86指令集及其擴展(例如,avx)中使用的那些相似或相同。此格式保持與具有擴展的現(xiàn)有x86指令集的前綴編碼字段、實操作碼字節(jié)(realopcodebyte)字段、modr/m字段、sib字段、位移字段和立即數(shù)字段一致。圖示了從圖1的字段至圖2的字段的映射。
應(yīng)當(dāng)理解,盡管為了說明的目的在通用矢量友好的指令格式100的上下文中參考特定矢量友好的指令格式200描述本發(fā)明的實施例,但除非特別聲明,本發(fā)明不限于特定矢量友好的指令格式200。例如,通用矢量友好的指令格式100預(yù)計到針對各種字段的各種可能的大小,而特定矢量友好的指令格式200被示出為具有特定大小的字段。通過特定示例的方式,雖然數(shù)據(jù)元素寬度字段164被圖示為在特定矢量友好的指令格式200中的一位字段,但本發(fā)明并不限于此(也就是說,通用矢量友好的指令格式100預(yù)計到數(shù)據(jù)元素寬度字段164的其他大?。?/p>
通用矢量友好的指令格式100包括以圖2a中圖示的次序在下文列出的下述字段。
evex前綴(字節(jié)0-3)202——以四字節(jié)形式編碼。
格式字段140(evex字節(jié)0,位[7:0])——第一字節(jié)(evex字節(jié)0)是格式字段140并且它包含0x62(在本發(fā)明的一個實施例中的用于區(qū)分矢量友好的指令格式的唯一值)。
第二-第四字節(jié)(evex字節(jié)1-3)包括提供特定能力的多個位字段。
rex字段205(evex字節(jié)1,位[7-5])——包括evex.r位字段(evex字節(jié)1,位[7]-r)、evex.x位字段(evex字節(jié)1,位[6]-x),以及157bex字節(jié)1,位[5]-b)。evex.r、evex.x以及evex.b位字段提供與對應(yīng)vex位字段相同的功能,并且使用1補碼形式進行編碼,即zmm0被編碼為1111b,zmm15被編碼為0000b。指令的其他字段對如本領(lǐng)域所已知的寄存器索引的較低三個位(rrr、xxx和bbb)進行編碼,以使得rrrr、xxxx和bbbb可以通過添加evex.r、evex.x以及evex.b形成。
rex’字段110——這是rex’字段110的第一部分并且是evex.r’位字段(evex字節(jié)1,位[4]-r’),其用于對擴展的32寄存器組的高16個或低16個進行編碼。在本發(fā)明的一個實施例中,該位連同如下文指示的其他位一起以位反轉(zhuǎn)的格式存儲以與bound指令區(qū)分(在公知的x8632位模式中),其實操作碼字節(jié)為62,但在modr/m字段(在下文描述)中并不接受在mod字段中的值11;本發(fā)明的可替換的實施例并不以反轉(zhuǎn)格式存儲該位和下面指示的其他位。值1被用于編碼較低的16個寄存器。換句話說,通過組合evex.r’,evex.r以及來自其他字段的其他rrr形成r’rrrr。
操作碼映射字段215(evex字節(jié)1,位[3:0]-mmmm)——其內(nèi)容對一個暗含的引導(dǎo)操作碼字節(jié)(0f、0f38、或者0f3)進行編碼。
數(shù)據(jù)元素寬度字段164(evex字節(jié)2,位[7]-w)——由注釋evex.w表示。evex.w用于定義數(shù)據(jù)類型的粒度(大?。?2位數(shù)據(jù)元素或64位數(shù)據(jù)元素)。
evex.vvvv220(evex字節(jié)2,位[6:3]-vvvv)——evex.vvvv的角色可以包括以下:1)evex.vvvv對第一源寄存器操作數(shù)進行編碼,以反轉(zhuǎn)(1補碼)形式指定并且對于具有2個或更多源操作數(shù)的指令有效;2)evex.vvvv對目的地寄存器操作數(shù)進行編碼,對于某些矢量移位以1補碼形式指定;或者3)evex.vvvv并不對任何操作數(shù)進行編碼,該字段被保留并應(yīng)當(dāng)包含1111b。因此,evex.vvvv字段220對以反轉(zhuǎn)(1補碼)形式存儲的第一源寄存器說明符(specifier)的4個低階位進行編碼。取決于指令,額外的不同的evex位字段被用于將說明符大小擴展至32個寄存器。
evex.u168類別字段(evex字節(jié)2,位[2]-u)——如果evex.u=0,它指示a類或evex.u0;如果evex.u=1,它指示b類或evex.u1。
前綴編碼字段225(evex字節(jié)2,位[1:0]-pp)——提供用于基礎(chǔ)操作字段的附加位。除了為以evex前綴格式的傳統(tǒng)sse指令提供支持外,這還具有壓縮simd前綴的益處(而不需要字節(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前綴編碼字段的內(nèi)容用作操作碼擴展,但某些實施例為了一致性而以相似的方式擴充但計及將由這些傳統(tǒng)simd前綴指定的不同的含義。可替換的實施例可以重新設(shè)計pla以支持2位simd前綴編碼,并因此不需要擴充。
阿爾法字段152(evex字節(jié)3,位[7]-eh;還稱為evex.eh、evex.rs、evex.rl、evex.writemaskcontrol(寫入掩蔽控制)以及evex.n;也用
貝塔字段154(evex字節(jié)3,位[6:4]-sss,還稱為
rex’字段110——這是rex’字段的剩余部分并且是evex.v’位字段(evex字節(jié)3,位[3]-v’),其可用于對擴展的32寄存器組的較高16個或較低16個進行編碼。該位以位反轉(zhuǎn)的格式存儲。值1被用于編碼較低的16個寄存器。換句話說,通過組合evex.v’、evex.vvvv形成v’vvvv。
寫入掩蔽字段170(evex字節(jié)3,位[2:0]-kkk)——其內(nèi)容指定了如前面所述的在寫入掩蔽寄存器中的寄存器的索引。在本發(fā)明的一個實施例中,特定值evex.kkk=000具有暗指沒有寫入掩蔽被用于該特定指令的特殊行為(這可以以多種方式實現(xiàn),包括使用硬接線至所有一的寫入掩蔽或繞過掩蔽硬件的硬件)。
實操作碼字段230(字節(jié)4)還稱為操作碼字節(jié)。在此字段中指定了操作碼的部分。
modr/m字段240(字節(jié)5)包括mod字段242、reg字段244以及r/m字段246。如前面所描述的,mod字段242的內(nèi)容區(qū)分存儲器訪問和非存儲器訪問操作。reg字段244的角色可被總結(jié)為兩種情形:編碼目的地寄存器操作數(shù)或源寄存器操作數(shù),或者被看作操作碼擴展并且不用于編碼任何指令操作數(shù)。r/m字段246的角色可以包括如下:編碼引用存儲器地址的指令操作數(shù),或者編碼目的地寄存器操作數(shù)或源寄存器操作數(shù)。
縮放、索引、基礎(chǔ)(sib)字節(jié)(字節(jié)6)——如前面所述,縮放字段150的內(nèi)容被用于存儲器地址生成。sib.xxx254和sib.bbb256——這些字段的內(nèi)容之前已經(jīng)是指與寄存器索引xxxx和bbbb相關(guān)。
位移字段162a(字節(jié)7-10)——當(dāng)mod字段242包含10時,字節(jié)7-10是位移字段162a,并且它與傳統(tǒng)32位位移(disp32)一樣地運作并以字節(jié)粒度運作。
位移因子字段162b(字節(jié)7)——當(dāng)mod字段242包含01時,字節(jié)7是位移因子字段162b。該字段的位置與傳統(tǒng)x86指令集8位位移(disp8)的位置相同,它以字節(jié)粒度運作。由于disp8是符號擴展的,它僅可在-128至127字節(jié)偏移之間尋址;在64字節(jié)高速緩存行方面,disp8使用8個位,其可被設(shè)置為僅四個真正有用值-128、-64、0和64;由于常常需要更大的范圍,disp32被使用;然而,disp32需要4個字節(jié)。與disp8和disp32相比,位移因子字段162b是disp8的重新解釋;當(dāng)使用位移因子字段162b時,實際位移由位移因子字段的內(nèi)容乘以存儲器操作數(shù)訪問的大?。╪)確定。此類位移被稱為disp8*n。這減少了平均指令長度(用于位移但具有大得多的范圍的單個字節(jié))。這樣的經(jīng)壓縮的位移基于以下假設(shè):有效位移是存儲器訪問的粒度的倍數(shù),并因此,地址偏移的冗余低階位不需要被編碼。換句話說,位移因子字段162b代替?zhèn)鹘y(tǒng)x86指令集8位位移。因此,位移因子字段162b以與x86指令集8位位移相同的方式編碼(因此在modrm/sib編碼規(guī)則中沒有改變),僅有例外是disp8被超載(overload)為disp8*n。換句話說,在編碼規(guī)則或編碼長度方面沒有改變而僅在硬件對位移值的解釋上有所改變(其需要將位移按存儲器操作數(shù)的大小縮放以獲得按字節(jié)的地址偏移)。
立即數(shù)字段172如之前描述的那樣操作。
完全操作碼字段
圖2b是圖示根據(jù)本發(fā)明的一個實施例的構(gòu)成完全操作碼字段174的特定矢量友好的指令格式200的字段的框圖。具體地,完全操作碼字段174包括格式字段140、基礎(chǔ)操作字段142以及數(shù)據(jù)元素寬度(w)字段164。基礎(chǔ)操作字段142包括前綴編碼字段225、操作碼映射字段215以及實操作碼字段230。
寄存器索引字段
圖2c是圖示根據(jù)本發(fā)明的一個實施例的構(gòu)成寄存器索引字段144的特定矢量友好的指令格式200的字段的框圖。具體地,寄存器索引字段144包括rex字段205、rex’字段210、modr/m.reg字段244、modr/m.r/m字段246、vvvv字段220、xxx字段254以及bbb字段256。
擴增操作字段
圖2d是圖示根據(jù)本發(fā)明的一個實施例的構(gòu)成擴增操作字段150的特定矢量友好的指令格式200的字段的框圖。當(dāng)類別(u)字段168包含0時,它表示evex.u0(a類168a);當(dāng)它包含1時,它表示evex.u1(b類168b)。當(dāng)u=0并且mod字段242包含11(表示非存儲器訪問操作)時,阿爾法字段152(evex字節(jié)3,位[7]-eh)被解釋為rs字段152a。當(dāng)rs字段152a包含1時(舍入152a.1),貝塔字段154(evex字節(jié)3,位[6:4]-sss)被解釋為舍入控制字段154a。舍入控制字段154a包括一位sae字段156以及兩位舍入操作字段158。當(dāng)rs字段152a包含0時(數(shù)據(jù)變換152a.2),貝塔字段154(evex字節(jié)3,位[6:4]-sss)被解釋為三位數(shù)據(jù)變換字段154b。當(dāng)u=0并且mod字段242包含00、01或10(表示存儲器訪問操作)時,阿爾法字段152(evex字節(jié)3,位[7]-eh)被解釋為逐出提示(eh)字段152b并且貝塔字段154(evex字節(jié)3,位[6:4]-sss)被解釋為三位數(shù)據(jù)操縱字段154c。
當(dāng)u=1時,阿爾法字段152(evex字節(jié)3,位[7]-eh)被解釋為寫入掩蔽控制(z)字段152c。當(dāng)u=1并且mod字段242包含11(表示非存儲器訪問操作)時,貝塔字段154的部分(evex字節(jié)3,位[4]-s0)被解釋為rl字段157a;當(dāng)它包含1時(舍入157a.1),貝塔字段154的其余部分(evex字節(jié)3,位[6-5]-s2-1)被解釋為舍入操作字段159a,而當(dāng)rl字段157a包含0時(vsize157.a2),貝塔字段154的其余部分(evex字節(jié)3,位[6-5]-s2-1)被解釋為矢量長度字段159b(evex字節(jié)3,位[6-5]-l1-0)。當(dāng)u=1并且mod字段242包含00、01或10(表示存儲器訪問操作)時,貝塔字段154(evex字節(jié)3,位[6:4]-sss)被解釋為矢量長度字段159b(evex字節(jié)3,位[6-5]-l1-0)和廣播字段157b(evex字節(jié)3,位[4]-b)。
c.示例性寄存器架構(gòu)
圖3是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)300的框圖。在圖示的實施例中,存在為512位寬的32個矢量寄存器310;這些寄存器被引用為zmm0至zmm31。較低16個zmm寄存器的較低階256位被覆蓋在寄存器ymm0-16上。較低16個zmm寄存器的較低階128位(ymm寄存器的較低階128位)被覆蓋在寄存器xmm0-15上。特定矢量友好的指令格式200如下表所說明的那樣在這些覆蓋的寄存器文件上操作。
換句話說,矢量長度字段159b在最大長度和一個或多個其他較短長度之間進行選擇,其中每個這樣的較短長度是在前長度的一半長度;并且沒有矢量長度字段159b的指令模板在最大矢量長度上操作。進一步的,在一個實施例中,特定矢量友好的指令格式200的b類指令模板在封裝(packed)或標(biāo)量單/雙精度浮點數(shù)據(jù)和封裝或標(biāo)量整數(shù)數(shù)據(jù)上操作。標(biāo)量操作是在zmm/ymm/xmm寄存器中的最低階數(shù)據(jù)元素位置上執(zhí)行的操作;較高階的數(shù)據(jù)元素位置被保留為與它們在指令之前相同,或者被歸零,取決于實施例。
寫入掩蔽寄存器315——在圖示的實施例中,存在8個寫入掩蔽寄存器(k0至k7),每個在大小方面為64位。在可替換的實施例中,寫入掩蔽寄存器315在大小方面為16位。如前面所描述的,在本發(fā)明的一個實施例中,矢量掩蔽寄存器k0不能被用作寫入掩蔽;當(dāng)通常指示k0的編碼被用于寫入掩蔽時,它選擇0xffff的硬接線寫入掩蔽,有效地禁用針對該指令的寫入掩蔽。
通用寄存器325——在圖示的實施例中,存在連同現(xiàn)有的x86尋址模式一起使用以對存儲器操作數(shù)進行尋址的十六個64位通用寄存器。通過名稱rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8至r15引用這些寄存器。
標(biāo)量浮點棧寄存器文件(x87棧)345,其上是別名為mmx封裝整數(shù)扁平寄存器文件350——在圖示的實施例中,x87棧是用于在32/64/80位浮點數(shù)據(jù)上使用x87指令集擴展執(zhí)行標(biāo)量浮點操作的八元素棧;而mmx寄存器被用于在64位封裝整數(shù)數(shù)據(jù)上執(zhí)行操作,以及保存操作數(shù)以用于在mmx和xmm寄存器之間執(zhí)行的某些操作。
本發(fā)明的可替換實施例可以使用更寬或更窄的寄存器。此外,本發(fā)明的可替換的實施例可以使用更多、更少或不同的寄存器文件和寄存器。
d.示例性核架構(gòu)、處理器和計算機架構(gòu)
處理器核可以以不同方式、出于不同的目的以及在不同的處理器中實現(xiàn)。例如,這樣的核的實現(xiàn)可以包括:1)意圖用于通用計算的通用有序核;2)意圖用于通用計算的高性能通用無序核;3)主要意圖用于圖形和/或科學(xué)(吞吐量)計算的專用核。不同處理器的實現(xiàn)可以包括:1)包括意圖用于通用計算的一個或多個通用有序核和/或意圖用于通用計算的一個或多個通用無序核的cpu;以及2)包括主要意圖用于圖形和/或科學(xué)(吞吐量)的一個或多個專用核的協(xié)處理器。這樣的不同的處理器導(dǎo)致不同的計算機系統(tǒng)架構(gòu),其可以包括:1)在與cpu分離的芯片上的協(xié)處理器;2)與cpu在相同的封裝中的分離的管芯上的協(xié)處理器;3)與cpu在相同管芯上的協(xié)處理器(在這種情況下,這樣的協(xié)處理器有時被稱為專用邏輯,諸如集成的圖形和/或科學(xué)(吞吐量)邏輯,或者稱為專用核);以及4)可以在相同管芯上包括所述cpu(有時稱為(一個或多個)應(yīng)用核或(一個或多個)應(yīng)用處理器)、上述協(xié)處理器以及附加功能的片上系統(tǒng)。接下來描述示例性核架構(gòu),之后為示例性處理器和計算機架構(gòu)的描述。
圖4a是圖示根據(jù)本發(fā)明的實施例的示例性有序流水線和示例性寄存器重命名、無序發(fā)出/執(zhí)行流水線二者的框圖。圖4b是圖示根據(jù)本發(fā)明的實施例的要被包括在處理器中的有序架構(gòu)核的示例性實施例和示例性寄存器重命名、無序發(fā)出/執(zhí)行架構(gòu)核二者的框圖。圖4a-b中的實線框圖示了有序流水線和有序核,而虛線框的可選附加圖示了寄存器重命名、無序發(fā)出/執(zhí)行流水線和核??紤]到有序方面是無序方面的子集,將描述無序方面。
在圖4a中,處理器流水線400包括取出級402、長度解碼級404、解碼級406、分配級408、重命名級410、調(diào)度(也稱為分派或發(fā)出)級412、寄存器讀取/存儲器讀取級414、執(zhí)行級416、寫回/存儲器寫入級418、異常處理級422和提交級424。
圖4b示出了處理器核490,其包括耦合到執(zhí)行引擎單元450的前端單元430,并且二者都耦合到存儲器單元470。核490可以是精簡指令集計算(risc)核、復(fù)雜指令集計算(cisc)核、甚長指令字(vliw)核或混合或替代的核類型。作為又一選項,核490可以是專用核,諸如例如,網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用計算圖形處理單元(gpgpu)核、圖形核等。
前端單元430包括耦合到指令高速緩存單元434的分支預(yù)測單元432,所述指令高速緩存單元434耦合到指令轉(zhuǎn)換后備緩沖器(tlb)436,所述指令轉(zhuǎn)換后備緩沖器436耦合到指令取出單元438,所述指令取出單元438耦合到解碼單元440。解碼單元440(或解碼器)可以解碼指令,并且作為輸出生成一個或多個微操作、微代碼入口點、微指令、其他指令或其他控制信號,其從原始指令解碼或者以其他方式反映原始指令或者從原始指令得到。解碼單元440可以使用各種不同的機制來實現(xiàn)。適當(dāng)?shù)臋C制的示例包括但不限于,查找表、硬件實現(xiàn)、可編程邏輯陣列(pla)、微代碼只讀存儲器(rom)等。在一個實施例中,核490包括微代碼rom或其他介質(zhì),其存儲用于某些宏指令的微代碼(例如,在解碼單元440中或以其他方式在前端單元430內(nèi))。解碼單元440被耦合到執(zhí)行引擎單元450中的重命名/分配器單元452。
執(zhí)行引擎單元450包括耦合到退役單元454和一個或多個調(diào)度器單元456的集合的重命名/分配器單元452。(一個或多個)調(diào)度器單元456表示任何數(shù)目的不同調(diào)度器,包括保留站、中央指令窗口等。(一個或多個)調(diào)度器單元456被耦合到(一個或多個)物理寄存器文件單元458。(一個或多個)物理寄存器文件單元458中的每一個表示一個或多個物理寄存器文件,其中的不同的物理寄存器文件存儲一個或多個不同的數(shù)據(jù)類型,諸如標(biāo)量整數(shù)、標(biāo)量浮點、封裝整數(shù)、封裝浮點、矢量整數(shù)、矢量浮點、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等。在一個實施例中,(一個或多個)物理寄存器文件單元458包括矢量寄存器單元、寫入掩蔽寄存器單元和標(biāo)量寄存器單元。這些寄存器單元可以提供架構(gòu)矢量寄存器、矢量掩蔽寄存器和通用寄存器。(一個或多個)物理寄存器文件單元458由退役單元454重疊,以說明其中寄存器重命名和無序執(zhí)行可以被實現(xiàn)的各種方式(例如,使用(一個或多個)重排序緩沖器以及(一個或多個)退役寄存器文件;使用(一個或多個)未來文件、(一個或多個)歷史緩沖器、以及(一個或多個)退役寄存器文件;使用寄存器映射和寄存器池等)。退役單元454和(一個或多個)物理寄存器文件單元458耦合到(一個或多個)執(zhí)行群集460。(一個或多個)執(zhí)行群集460包括一個或多個執(zhí)行單元462的集合以及一個或多個存儲器訪問單元464的集合。執(zhí)行單元462可以實行各種操作(例如,移位、加法、減法、乘法)并且在各種類型的數(shù)據(jù)(例如,標(biāo)量浮點、封裝整數(shù)、封裝浮點、矢量整數(shù)、矢量浮點)上實行操作。雖然一些實施例可以包括專用于特定功能或功能集合的多個執(zhí)行單元,但是其他實施例可以僅包括一個執(zhí)行單元或所有實行所有功能的多個執(zhí)行單元。(一個或多個)調(diào)度器單元456、(一個或多個)物理寄存器文件單元458和(一個或多個)執(zhí)行群集460被示出為可能復(fù)數(shù)的,因為某些實施例創(chuàng)建用于某些類型的數(shù)據(jù)/操作的單獨的流水線(例如,標(biāo)量整數(shù)流水線、標(biāo)量浮點/封裝整數(shù)/封裝浮點/矢量整數(shù)/矢量浮點流水線和/或存儲器訪問流水線,每個都具有其自己的調(diào)度器單元、(一個或多個)物理寄存器文件單元和/或執(zhí)行群集——并且在單獨的存儲器訪問流水線的情況下,實現(xiàn)其中僅該流水線的執(zhí)行群集具有(一個或多個)存儲器訪問單元464的某些實施例)。還應(yīng)當(dāng)理解,在使用單獨流水線的情況下,這些流水線中的一個或多個可以是無序發(fā)出/執(zhí)行并且其余是有序的。
存儲器訪問單元464的集合可以耦合到存儲器單元470,其包括耦合到數(shù)據(jù)高速緩存單元474的數(shù)據(jù)tlb單元472,所述數(shù)據(jù)高速緩存單元474耦合到2級(l2)高速緩存單元476。在一個示例性實施例中,存儲器訪問單元464可以包括加載單元、存儲地址單元和存儲數(shù)據(jù)單元,其中的每一個可以耦合到存儲器單元470中的數(shù)據(jù)tlb單元472。指令高速緩存單元434進一步被耦合到存儲器單元470中的2級(l2)高速緩存單元476。l2高速緩存單元476被耦合到一個或多個其他級的高速緩存并且最終耦合到主存儲器。
通過示例的方式,示例性寄存器重命名、無序發(fā)出/執(zhí)行核架構(gòu)可以如下實現(xiàn)流水線400:1)指令取出438實行取出和長度解碼級402和404;2)解碼單元440實行解碼級406;3)重命名/分配器單元452實行分配級408和重命名級410;4)(一個或多個)調(diào)度器單元456實行調(diào)度級412;5)(一個或多個)物理寄存器文件單元458和存儲器單元470實行寄存器讀取/存儲器讀取級414;執(zhí)行群集460實行執(zhí)行級416;6)存儲器單元470和(一個或多個)物理寄存器文件單元458實行寫回/存儲器寫入級418;7)各種單元可以在異常處理級422中被涉及;并且8)退役單元454和(一個或多個)物理寄存器文件單元458實行提交級424。
核490可以支持一個或多個指令集(例如,x86指令集(具有已經(jīng)添加有較新版本的一些擴展);加利福尼亞州桑尼維爾的mips科技的mips指令集;arm指令集(具有加利福尼亞州桑尼維爾的arm控股公司的可選附加擴展,諸如neon),包括本文中描述的(一個或多個)指令。在一個實施例中,核490包括用于支持封裝數(shù)據(jù)指令集擴展(例如,avx1、avx2)的邏輯,從而允許被許多多媒體應(yīng)用使用的操作使用封裝數(shù)據(jù)來實行。
應(yīng)當(dāng)理解,核可以支持多線程(執(zhí)行操作或線程的兩個或更多個并行集合),并且可以以各種方式來這樣做,包括時間分段多線程、同時多線程(其中單個物理核提供用于物理核同時多線程化的線程中的每一個的邏輯核)或其組合(例如,時間分段取出和解碼以及此后的同時多線程,諸如在intel?超線程技術(shù)中)。
雖然寄存器重命名在無序執(zhí)行的上下文中進行描述,但是應(yīng)當(dāng)理解,寄存器重命名可以在有序架構(gòu)中使用。雖然所示的處理器的實施例還包括單獨的指令和數(shù)據(jù)高速緩存單元434/474和共享l2高速緩存單元476,但是替代實施例可以具有用于指令和數(shù)據(jù)二者的單個內(nèi)部高速緩存,諸如例如1級(l1)內(nèi)部高速緩存或多級內(nèi)部高速緩存。在一些實施例中,系統(tǒng)可以包括內(nèi)部高速緩存和在核和/或處理器外部的外部高速緩存的組合。替代地,所有高速緩存可以在核和/或處理器外部。
圖5a-b圖示了更具體的示例性有序核架構(gòu)的框圖,其核可以是芯片中的若干邏輯塊(包括相同類型和/或不同類型的其他核)中的一個。取決于應(yīng)用,邏輯塊通過高帶寬互連網(wǎng)絡(luò)(例如,環(huán)形網(wǎng)絡(luò))與一些固定功能邏輯、存儲器i/o接口和其他必要的i/o邏輯進行通信。
圖5a是根據(jù)本發(fā)明的實施例的單個處理器核連同其到管芯上互連網(wǎng)絡(luò)502的連接以及其2級(l2)高速緩存504的本地子集的框圖。在一個實施例中,指令解碼器500支持具有封裝數(shù)據(jù)指令集擴展的x86指令集。l1高速緩存506允許到標(biāo)量和矢量單元中的高速緩存存儲器的低等待時間訪問。雖然在一個實施例(為了簡化設(shè)計)中,標(biāo)量單元508和矢量單元510使用單獨的寄存器集合(分別是標(biāo)量寄存器512和矢量寄存器514),并且在其之間傳輸?shù)臄?shù)據(jù)被寫入到存儲器并且然后從1級(l1)高速緩存506被讀回,但是本發(fā)明的替代實施例可以使用不同的方法(例如,使用單個寄存器集合或包括允許數(shù)據(jù)在兩個寄存器文件之間被傳輸而不被寫入和讀回的通信路徑)。
l2高速緩存504的本地子集是全局l2高速緩存的一部分,其被劃分成單獨立的本地子集,每個處理器核一個。每個處理器核具有對l2高速緩存504的其自己的本地子集的直接訪問路徑。由處理器核讀取的數(shù)據(jù)被存儲在其l2高速緩存子集504中,并且可以與訪問其自己的本地l2高速緩存子集的其他處理器核并行地被快速訪問。由處理器核寫入的數(shù)據(jù)被存儲在其自己的l2高速緩存子集504中,并且從其他子集清除(flush),如果必要的話。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的一致性。環(huán)形網(wǎng)絡(luò)是雙向的,以允許諸如處理器核、l2高速緩存或其他邏輯塊之類的代理在芯片內(nèi)與彼此進行通信。每個環(huán)形數(shù)據(jù)路徑每個方向是1012位寬。
圖5b是根據(jù)本發(fā)明的實施例的圖5a中的處理器核的部分的展開圖。圖5b包括l1高速緩存504的l1數(shù)據(jù)高速緩存506a部分以及關(guān)于矢量單元510和矢量寄存器514的更多細節(jié)。具體地,矢量單元510是16寬矢量處理單元(vpu)(見16寬alu528),其執(zhí)行整數(shù)、單精度浮點和雙精度浮點指令中的一個或多個。vpu用拌和單元520支持對寄存器輸入進行拌和、用數(shù)值轉(zhuǎn)換單元522a-b支持?jǐn)?shù)值轉(zhuǎn)換、以及在存儲器輸入上用復(fù)制單元524支持復(fù)制。寫入掩蔽寄存器526允許預(yù)測所得到的矢量寫入。
圖6是根據(jù)本發(fā)明的實施例的處理器600的框圖,所述處理器600可以具有多于一個核、可以具有集成存儲器控制器并且可以具有集成圖形。圖6中的實線框圖示了具有單個核602a、系統(tǒng)代理610、一個或多個總線控制器單元616集合的處理器600,而虛線框的可選添加圖示了具有多個核602a-n、系統(tǒng)代理單元610中的一個或多個集成存儲器控制器單元614的集合以及專用邏輯608的替代處理器600。
因此,處理器600的不同實現(xiàn)可以包括:1)具有作為集成圖形和/或科學(xué)(吞吐量)邏輯的專用邏輯608(其可以包括一個或多??個核)以及作為一個或多個通用核(例如,通用有序核、通用無序核、二者的組合)的核602a-n的cpu;2)具有作為主要意圖用于圖形和/或科學(xué)(吞吐量)的大量專用核的核602a-n的協(xié)處理器;以及3)具有作為大量通用有序核的核602a-n的協(xié)處理器。因此,處理器600可以是通用處理器、協(xié)處理器或?qū)S锰幚砥?,諸如例如,網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu(通用圖形處理單元)、高吞吐量多集成核(mic)協(xié)處理器(包括30個或更多個核)、嵌入式處理器等。處理器可以在一個或多個芯片上實現(xiàn)。處理器600可以是使用諸如例如bicmos、cmos或nmos之類的任何數(shù)目的處理技術(shù)的一個或多個襯底的部分和/或可以在所述一個或多個襯底上實現(xiàn)。
存儲器層級包括核內(nèi)的一個或多個級的高速緩存、一個或多個共享的高速緩存單元606的集合、以及耦合到集成存儲器控制器單元614的集合的外部存儲器(未示出)。共享高速緩存單元606的集合可以包括一個或多??個中間級高速緩存,諸如2級(l2)、3級(l3)、4級(l4)或其他級的高速緩存、最后一級高速緩存(llc)和/或其組合。雖然在一個實施例中,基于環(huán)的互連單元612互連集成圖形邏輯608、共享高速緩存單元606的集合以及系統(tǒng)代理單元610/(一個或多個)集成存儲器控制器單元614,但是替代實施例可以使用用于互連這樣的單元的任何數(shù)目的公知的技術(shù)。在一個實施例中,在一個或多個高速緩存單元606與核602-a-n之間保持一致性。
在一些實施例中,核602a-n中的一個或多個有多線程能力。系統(tǒng)代理610包括協(xié)調(diào)和操作核602a-n的那些組件。系統(tǒng)代理單元610可以包括例如功率控制單元(pcu)和顯示單元。pcu可以是或包括調(diào)節(jié)核602a-n和集成圖形邏輯608的功率狀態(tài)所需要的邏輯和組件。顯示單元用于驅(qū)動一個或多個外部連接的顯示器。
核602a-n可以在架構(gòu)指令集方面是同構(gòu)或異構(gòu)的;即,核602a-n中的兩個或更多個可以能夠執(zhí)行相同的指令集,而其他可能能夠僅執(zhí)行該指令集的子集或不同的指令集。
圖7-10是示例性計算機架構(gòu)的框圖。本領(lǐng)域中已知的用于膝上型計算機、臺式計算機、手持pc、個人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)中心(hub)、交換機、嵌入式處理器、數(shù)字信號處理器(dsp)、圖形設(shè)備、視頻游戲設(shè)備、機頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設(shè)備和各種其他電子設(shè)備的其他系統(tǒng)設(shè)計和配置也是適當(dāng)?shù)?。通常,如本文公開的能夠包含處理器和/或其他執(zhí)行邏輯的大量系統(tǒng)或電子設(shè)備通常是適當(dāng)?shù)摹?/p>
現(xiàn)在參考圖7,示出了根據(jù)本發(fā)明的一個實施例的系統(tǒng)700的框圖。系統(tǒng)700可以包括耦合到控制器中心720的一個或多??個處理器710、715。在一個實施例中,控制器中心720包括圖形存儲器控制器中心(gmch)790和輸入/輸出中心(ioh)750(其可能在分離的芯片上);gmch790包括存儲器740和協(xié)處理器745所耦合到的存儲器和圖形控制器;ioh750將輸入/輸出(i/o)設(shè)備760耦合到gmch790。替代地,存儲器和圖形控制器中的一個或二者被集成在處理器內(nèi)(如本文所述),存儲器740和協(xié)處理器745被直接耦合到處理器710,以及在具有ioh750的單個芯片中的控制器中心720。
在圖7中用虛線表示附加處理器715的可選性質(zhì)。每個處理器710、715可以包括本文描述的處理核中的一個或多個,并且可以是某個版本的處理器600。
存儲器740可以是例如動態(tài)隨機存取存儲器(dram)、相變存儲器(pcm)或者二者組合。對于至少一個實施例,控制器中心720經(jīng)由多點總線與(一個或多個)處理器710、715進行通信,諸如前側(cè)總線(fsb)、諸如quickpath互連(qpi)之類的點對點接口或類似的連接795。
在一個實施例中,協(xié)處理器745是專用處理器,諸如例如,高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu、嵌入式處理器等。在一個實施例中,控制器中心720可以包括集成圖形加速器。
在物理資源710、715之間在包括架構(gòu)、微架構(gòu)、熱、功耗特性等的指標(biāo)的一系列度量方面可能存在各種差異。
在一個實施例中,處理器710執(zhí)行控制一般類型的數(shù)據(jù)處理操作的指令。協(xié)處理器指令可以嵌入指令內(nèi)。處理器710將這些協(xié)處理器指令識別為應(yīng)當(dāng)由附連的協(xié)處理器745執(zhí)行的類型。因此,處理器710在協(xié)處理器總線或其他互連上向協(xié)處理器745發(fā)出這些協(xié)處理器指令(或表示協(xié)處理器指令的控制信號)。(一個或多個)協(xié)處理器745接受并且執(zhí)行接收到的協(xié)處理器指令。
現(xiàn)在參考圖8,示出了根據(jù)本發(fā)明的實施例的第一更具體示例性系統(tǒng)800的框圖。如圖8中所示,多處理器系統(tǒng)800是點對點互連系統(tǒng),并且包括經(jīng)由點對點互連850耦合的第一處理器870和第二處理器880。處理器870和880中的每一個可以是某個版本的處理器600。在本發(fā)明的一個實施例中,處理器870和880分別是處理器710和715,而協(xié)處理器838是協(xié)處理器745。在另一實施例中,處理器870和880分別是處理器710協(xié)處理器745。
處理器870和880被示出分別包括集成存儲器控制器(imc)單元872和882。作為其總線控制器單元的部分,處理器870還包括點對點(p-p)接口876和878;類似地,第二處理器880包括p-p接口886和888。處理器870、880可以使用p-p接口電路878、888經(jīng)由點對點(p-p)接口850來交換信息。如圖8所示,imc872和882將處理器耦合到相應(yīng)存儲器,即存儲器832和存儲器834,其可以是本地附連到相應(yīng)處理器的主存儲器的部分。
處理器870、880可以均經(jīng)由單獨的p-p接口852、854使用點對點接口電路876、894、886、898來與芯片組890交換信息。芯片組890可以可選地經(jīng)由高性能接口839來與協(xié)處理器838交換信息。在一個實施例中,協(xié)處理器838是專用處理器,諸如例如,高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu、嵌入式處理器等。
共享高速緩存(未示出)可以被包括在兩個處理器中的任何一個處理器中或在其外部,而經(jīng)由p-p互連與處理器連接,使得如果處理器被置于低功率模式中,則任何一個或兩個處理器的本地高速緩存信息可以被存儲在共享高速緩存中。
芯片組890可以經(jīng)由接口896耦合到第一總線816。在一個實施例中,第一總線816可以是外圍組件互連(pci)總線,或諸如快速pci總線之類的總線或另一第三代i/o互連總線,但是本發(fā)明的范圍并不限于此。
如圖8中所示,各種i/o設(shè)備814可以耦合到第一總線816,連同總線橋818,所述總線橋818將第一總線816耦合到第二總線820。在一個實施例中,一個或多個附加處理器815(諸如協(xié)處理器、高吞吐量mic處理器、gpgpu、加速器(諸如例如,圖形加速器或數(shù)字信號處理(dsp)單元)、現(xiàn)場可編程門陣列或任何其他處理器)被耦合到第一總線816。在一個實施例中,第二總線820可以是低引腳計數(shù)(lpc)總線。在一個實施例中,各種設(shè)備可以被耦合到第二總線820,包括例如鍵盤和/或鼠標(biāo)822、通信設(shè)備827和可以包括指令/代碼和數(shù)據(jù)830的存儲單元828,諸如盤驅(qū)動器或其他大容量存儲設(shè)備。此外,音頻i/o824可以被耦合到第二總線820。注意,其他架構(gòu)可以是可能的。例如,代替圖8的點對點架構(gòu),系統(tǒng)可以實現(xiàn)多點總線或其他這樣的架構(gòu)。
現(xiàn)在參考圖9,示出了根據(jù)本發(fā)明的實施例的第二更具體的示例性系統(tǒng)900的框圖。如在圖8和圖9中的元件承載類似的附圖標(biāo)記,并且圖8的某些方面已經(jīng)從圖9中省略,以避免混淆圖9的其他方面。
圖9圖示了處理器870、880可以分別包括集成存儲器和i/o控制邏輯(“cl”)872和882。因此,cl872、882包括集成存儲器控制器單元并且包括i/o控制邏輯。圖9圖示了不僅存儲器832、834耦合到cl872、882而且i/o設(shè)備914也耦合到控制邏輯872、882。傳統(tǒng)i/o設(shè)備915耦合到芯片組890。
現(xiàn)在參考圖10,示出了根據(jù)本發(fā)明的實施例的soc1000的框圖。圖6中的類似元件承載類似的附圖標(biāo)記。而且,虛線框是更高級的soc上的可選特征。在圖10中,(一個或多個)互連單元1002被耦合到:應(yīng)用處理器1010,其包括一個或多個核202a-n的集合和(一個或多個)共享高速緩存單元606;系統(tǒng)代理單元610;(一個或多個)總線控制器單元616;(一個或多個)集成存儲器控制器單元614;一組或一個或多個協(xié)處理器1020,其可以包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態(tài)隨機存取存儲器(sram)單元1030;直接存儲器訪問(dma)單元1032;以及用于耦合到一個或多個外部顯示器的顯示單元1040。在一個實施例中,(一個或多個)協(xié)處理器1020包括專用處理器,諸如例如,網(wǎng)絡(luò)或通信處理器、壓縮引擎、gpgpu、高吞吐量mic處理器、嵌入式處理器等。
本文公開的機制的實施例可以以硬件、軟件、固件或這樣的實現(xiàn)方法的組合來實現(xiàn)。本發(fā)明的實施例可以被實現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計算機程序或程序代碼,所述可編程系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸??入設(shè)備以及至少一個輸出設(shè)備。
諸如圖8圖示的代碼830的程序代碼可以應(yīng)用于輸入指令以實行本文描述的功能并且生成輸出信息。輸出信息可以以已知的方式應(yīng)用于一個或多個輸出設(shè)備。為了本申請的目的,處理系統(tǒng)包括具有處理器的任何系統(tǒng),諸如,例如;數(shù)字信號處理器(dsp)、微控制器、專用集成電路(asic)或微處理器。
程序代碼可以以高級的面向過程或面向?qū)ο蟮木幊陶Z言來實現(xiàn)以與處理系統(tǒng)進行通信。程序代碼還可以以匯編或機器語言來實現(xiàn),如果需要的話。事實上,本文描述的機制在范圍上不限于任何特定編程語言。在任何情況下,語言可以是編譯或解釋語言。
至少一個實施例的一個或多個方面可以通過存儲在機器可讀介質(zhì)上的表示處理器內(nèi)的各種邏輯的代表性指令來實現(xiàn),其當(dāng)由機器讀取時,使得機器制造用于實行本文描述的技術(shù)的邏輯。稱為“ip核”的這樣的表示可以被存儲在有形的機器可讀介質(zhì)上并且被供應(yīng)到各種客戶或制造設(shè)施,以加載到實際上作出邏輯或處理器的制造機器中。
這樣的機器可讀存儲介質(zhì)可以包括但不限于,由機器或設(shè)備制造或形成的物品的非臨時有形布置,包括諸如硬盤之類的存儲介質(zhì)、任何其他類型的盤(包括軟盤、光盤、壓縮盤只讀存儲器(cd-rom)、可重寫壓縮盤(cd-rw)和磁光盤)、半導(dǎo)體設(shè)備(諸如只讀存儲器(rom)、隨機存取存儲器(ram)(諸如動態(tài)隨機存取存儲器(dram)、靜態(tài)隨機存取存儲器(sram))、可擦除可編程只讀存儲器(eprom)、閃速存儲器、電可擦除可編程只讀存儲器(eeprom)、相變存儲器(pcm))、磁卡或光卡或者適用于存儲電子指令的任何其他類型的介質(zhì)。
因此,本發(fā)明的實施例還包括非臨時有形機器可讀介質(zhì),其包含指令或包含設(shè)計數(shù)據(jù),諸如硬件描述語言(hdl),其定義本文描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特征。這樣的實施例還可以被稱為程序產(chǎn)品。
在一些情況下,指令轉(zhuǎn)換器可以用于將指令從源指令集轉(zhuǎn)換為目標(biāo)指令集。例如,指令轉(zhuǎn)換器可以翻譯(例如,使用靜態(tài)二進制翻譯、包括動態(tài)編譯的動態(tài)二進制翻譯)、變形、仿真或以其他方式將指令轉(zhuǎn)換為要由核處理的一個或多個其他指令。指令轉(zhuǎn)換器可以以軟件、硬件、固件或其組合來實現(xiàn)。指令轉(zhuǎn)換可能在處理器上、處理器外或部分在處理器上且部分在處理器外。
圖11是根據(jù)本發(fā)明的實施例的對比使用軟件指令轉(zhuǎn)換器來將源指令集中的二進制指令轉(zhuǎn)換成目標(biāo)指令集中的二進制指令的框圖。在圖示的實施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但是替代地,指令轉(zhuǎn)換器可以以軟件、固件、硬件或其各種組合來實現(xiàn)。圖11示出了以高級語言1102的程序可以使用x86編譯器1104來編譯以生成可以由具有至少一個x86指令集核1116的處理器原生執(zhí)行的x86二進制代碼1106。具有至少一個x86指令集核1116的處理器表示可以通過兼容地執(zhí)行或以其他方式處理下述來實行與具有至少一個x86指令集核的英特爾處理器大體上相同功能的任何處理器:(1)英特爾x86指令集核的指令集的大部分或(2)目的在于在具有至少一個x86指令集核的英特爾處理器上運行的應(yīng)用或其他軟件的對象代碼版本,以便于與具有至少一個x86指令集核的英特爾處理器實現(xiàn)大體上相同結(jié)果。x86編譯器1104表示操作為生成x86二進制代碼1106(例如,對象代碼)的編譯器,其可以具有或不具有附加鏈接處理的情況下在具有至少一個x86指令集核1116的處理器上被執(zhí)行。類似地,圖11示出了以高級語言1102的程序可以使用替代指令集編譯器1108來編譯,以生成替代指令集二進制代碼1110,其可以由不具有至少一個x86指令集核1114的處理器來原生地執(zhí)行(例如,具有執(zhí)行加利福尼亞州桑尼維爾的mips科技的mips指令集和/或執(zhí)行加利福尼亞州桑尼維爾的arm控股公司的arm指令集的核的處理器)。指令轉(zhuǎn)換器1112用于將x86二進制碼1106轉(zhuǎn)換成可以由不具有x86指令集核1114的處理器原生地執(zhí)行的代碼。該轉(zhuǎn)換的代碼不太可能與替代指令集二進制代碼1110相同,因為能夠這樣的指令轉(zhuǎn)換器難以制作;然而,轉(zhuǎn)換的代碼將完成一般操作,并且由來自替代指令集的指令組成。因此,指令轉(zhuǎn)換器1112表示軟件、固件、硬件或其組合,其通過仿真、模擬或任何其他處理來允許不具有x86指令集處理器或核的處理器或其他電子設(shè)備執(zhí)行x86二進制代碼1106。
用于實現(xiàn)自旋-循環(huán)跳轉(zhuǎn)的方法和裝置
以下描述的本發(fā)明的實施例降低自旋-等待循環(huán)中的指令的總體數(shù)目。特別地,本發(fā)明的一個實施例包括跳轉(zhuǎn)-暫停指令(jpause(cc)dst),其暗示循環(huán)自旋-等待,并跳轉(zhuǎn)(在特定延遲之后)到目的地指令(dst),如果滿足條件的話(例如,基于條件代碼(cc)值)。在一個實施例中,測試-減法指令(testsubmem/reg1,reg2)作為源而接受監(jiān)視值(存儲器位置或寄存器)和計數(shù)器(寄存器),將計數(shù)器降低1,測試監(jiān)視值,并且針對零值而測試計數(shù)器。如以下所討論的,這兩個新指令二者都用于降低對于自旋-等待循環(huán)所需的指令的總體數(shù)目。
如圖12中所示,本發(fā)明的實施例可以在其上實現(xiàn)的示例性處理器1255包括具有用于解碼跳轉(zhuǎn)-暫停指令的跳轉(zhuǎn)-暫停(jpause)解碼邏輯1231和用于解碼測試-減法指令的測試-減法(testsub)解碼邏輯1232的解碼器1230。還圖示了具有用于執(zhí)行解碼的跳轉(zhuǎn)-暫停指令的跳轉(zhuǎn)-暫停(jpause)執(zhí)行邏輯1232以及用于執(zhí)行解碼的測試-減法指令的測試-減法(testsub)執(zhí)行邏輯1242的執(zhí)行邏輯1240。
現(xiàn)在將描述示例性處理器的附加細節(jié)。然而,應(yīng)注意的是,本發(fā)明的基礎(chǔ)原理不限于任何特定類型的處理器架構(gòu)。
所圖示的處理器架構(gòu)包括通用寄存器(gpr)集合1205、矢量寄存器集合1206、和掩蔽寄存器集合1207。在一個實施例中,多個矢量數(shù)據(jù)元素被封裝到每一個矢量寄存器1206中,所述矢量寄存器1206可以具有512位寬度以用于存儲兩個256位值、四個128位值、八個64位值、十六個32位值等。然而,本發(fā)明的基礎(chǔ)原理不限于任何特定大小/類型的矢量數(shù)據(jù)。在一個實施例中,掩蔽寄存器1207包括八個64位操作數(shù)掩蔽寄存器,其用于在存儲在矢量寄存器1206中的值上執(zhí)行位掩蔽操作(例如,實現(xiàn)為上述掩蔽寄存器k0-k7)。然而,本發(fā)明的基礎(chǔ)原理不限于任何特定掩蔽寄存器大小/類型。
為了簡化在圖12中圖示了單個處理器核(“核0”)的細節(jié)。然而,將理解的是圖12中示出的每一個核可以具有與核0相同的邏輯集合。例如,每個核可以包括專用1級(l1)高速緩存1212和2級(l2)高速緩存以用于根據(jù)指定高速緩存管理策略來高速緩存指令和數(shù)據(jù)。l1高速緩存1212包括用于存儲指令的單獨的指令高速緩存1220和用于存儲數(shù)據(jù)的單獨的數(shù)據(jù)高速緩存1221。存儲在各種處理器高速緩存內(nèi)的指令和數(shù)據(jù)以高速緩存行的粒度被管理,所述高速緩存行可以是固定大?。ɡ?,在長度上64、128、512字節(jié))。該示例性實施例的每個核具有用于從主存儲器1200和/或共享3級(l3)高速緩存1216取出指令的指令取出單元1210;用于解碼指令(例如,將程序指令解碼成微操作或“uops”)的解碼單元1220;用于執(zhí)行指令的執(zhí)行單元1240;和用于使指令退役并寫回結(jié)果的寫回單元1250。
指令取出單元1210包括各種公知的組件,其包括用于存儲要從存儲器1200(或高速緩存之一)取出的下一指令的地址的下一指令指針1230;用于存儲最近使用的虛擬到物理指令地址的映射以改進地址轉(zhuǎn)換的速度的指令轉(zhuǎn)換后備緩沖器(itlb)1204;用于推測地預(yù)測指令分支地址的分支預(yù)測單元1202;以及用于存儲分支地址和目標(biāo)地址的分支目標(biāo)緩沖器(btb)1201。一旦被取出,指令隨后被流式傳輸?shù)街噶盍魉€的剩余級,其包括解碼單元1230、執(zhí)行單元1240和寫回單元1250。這些單元中的每一個的結(jié)構(gòu)和功能被本領(lǐng)域普通技術(shù)人員良好地理解,并在此將不詳細描述以避免使本發(fā)明的不同實施例的有關(guān)方面模糊。
在圖13中圖示了示例性自旋-等待循環(huán)。在1301處,將監(jiān)視值(例如,存儲在指定存儲器位置)與退出標(biāo)記值比較。如果相等,則在1305處過程退出;如果不相等,則在1302處循環(huán)計數(shù)器遞減。如果在1303處確定了查看計數(shù)器達到零,則過程在1305處退出。如果不是,則在1304處執(zhí)行暫停(pause)指令以向處理器提供改進自旋-等待循環(huán)的性能的提示。在一個實施例中,暫停指令包括在intel?64和ia-32架構(gòu)軟件開發(fā)者手冊(2014年9月)的部分11.4.4.4中描述的版本。
以下是與自旋-等待循環(huán)一起使用暫停指令的示例性指令序列:
此處,在[mem]處的監(jiān)視值的序列退出等于exit_flag。如果減一操作(subrcx,1)得到計數(shù)器值0,則序列也將退出。否則,執(zhí)行暫停指令,并且過程跳轉(zhuǎn)回到自旋循環(huán)的頂部。
如所提及的,本發(fā)明的實施例包括兩個新指令來減少這些類型的自旋-等待循環(huán)中的指令的總體數(shù)目。在一個實施例中,jpause(cc)dst指令在硬件指定的延遲之后將程序控制轉(zhuǎn)移到目的地(dst)指令,如果用與指令關(guān)聯(lián)的條件代碼(cc)指定的條件被滿足的話,并且提供提示,在該指令和目的地指令之間的循環(huán)是自旋-等待循環(huán)。在一個實施例中,如果不滿足條件,則沒有延遲。
以下示例示出可以如何根據(jù)本發(fā)明的一個實施例實現(xiàn)jpause(cc)dst,并且假定將迭代通過i_mpi_spin_count次的自旋循環(huán):
在以上示例中,jpausenzspin_loop使用“非零”的條件代碼,其測試在rcx中是否存在非零值。如果是這樣的話,則它引起到spin_loop的開始(即,cmp[mem],flag)的跳轉(zhuǎn)。如果沒有滿足條件(即,零值),則沒有延遲,并且循環(huán)退出。因而,與在使用暫停指令的以上示例中實現(xiàn)相同的結(jié)果,但執(zhí)行更少的指令。
圖14圖示由跳轉(zhuǎn)-暫停(jump-pause)指令的一個實施例實行的多個操作。在1400處,解碼和/或執(zhí)行跳轉(zhuǎn)-暫停指令。在1401處,向處理器提供提示以指示跳轉(zhuǎn)-暫停指令和目的地指令之間的循環(huán)包括自旋-等待循環(huán)(例如,以與暫停指令類似的方式)。如果在1403處確定滿足由條件代碼(cc)指定的條件,則實現(xiàn)指定延遲,之后是到目的地指令的跳轉(zhuǎn)。例如,在以上代碼中,jpausenz延遲達指定持續(xù)時間,并且然后跳轉(zhuǎn)到自旋循環(huán)的開始(cmp[mem],flag)。如果沒有滿足條件,則過程在1405處退出。
測試-減法指令可以采取形式testsubmem/reg1,reg2,其從存儲器位置(mem)或寄存器(reg1)接受監(jiān)視值作為第一源并且計數(shù)器作為第二源(reg2)。在一個實施例中,測試-減法指令使計數(shù)器遞減1,并且測試監(jiān)視值并且針對零值而測試計數(shù)器。
以下示例示出測試-減法指令如何針對跳轉(zhuǎn)-暫停指令被添加到以上示出的程序代碼:
因而,在以上示例中,testsubrax,rcx使rcx中的計數(shù)器值遞減1,測試rax中的監(jiān)視值(例如,退出標(biāo)記)以確定是否退出,并且還針對零值測試計數(shù)器。圖15圖示根據(jù)測試-減法指令的一個實施例的方法。在1500處,解碼和/或執(zhí)行測試-減法指令。在1501處,第二源寄存器(例如,reg2)中的計數(shù)器值遞減1。在1502處,測試監(jiān)視值。在一個實施例中,這簡單地通過確定監(jiān)視值是否等于指定值(例如,0或指定退出標(biāo)記值)來完成。此外,針對零值測試計數(shù)器值。
如果計數(shù)器值是零和/或如果監(jiān)視值等于指定退出值,在1503處確定,則在1505處,過程退出。如果不是,則執(zhí)行自旋循環(huán)(或其他指令序列)中的下一個指令(例如,諸如以上提供的示例中的跳轉(zhuǎn)-暫停指令)。
以下示例提供使用測試-減法指令和跳轉(zhuǎn)-暫停指令二者對以上程序代碼序列的另一個修改。
當(dāng)監(jiān)視存儲器位置[mem]中的值以等待值0(在通常情況下)時,可以使用該序列。因而,利用這些參數(shù),僅需要2個指令,從而顯著降低執(zhí)行時間、降低可執(zhí)行大小、降低應(yīng)用大小和/或改進代碼可讀性。
在前述說明書中,已經(jīng)參考其具體示例性實施例描述了本發(fā)明的實施例。然而,將明顯的是,可以在不背離如隨附權(quán)利要求中所闡述的本發(fā)明的較寬泛精神和范圍的情況下對其做出各種修改和改變。因此,說明書和附圖要以說明性而不是限制性含義來看待。
本發(fā)明的實施例可以包括以上已經(jīng)描述的各種步驟。步驟可以以機器可執(zhí)行指令來體現(xiàn),所述機器可執(zhí)行指令可以用于使通用或?qū)S锰幚砥鲗嵭胁襟E??商娲?,這些步驟可以通過包含用于實行步驟的硬接線邏輯的特定硬件組件或者通過編程的計算機組件和定制硬件組件的任何組合來實行。
如本文所述,指令可以是指硬件的特定配置,諸如專用集成電路(asic),其被配置成實行某些操作或具有存儲在以非暫時性計算機可讀介質(zhì)體現(xiàn)的存儲器中的軟件指令或預(yù)定功能。因而,可以使用在一個或多個電子設(shè)備(例如,終端站、網(wǎng)絡(luò)元件等)上存儲和執(zhí)行的代碼和數(shù)據(jù)來實現(xiàn)附圖中示出的技術(shù)。這樣的電子設(shè)備使用計算機機器可讀介質(zhì)來存儲和通信(內(nèi)部地和/或通過網(wǎng)絡(luò)與其他電子設(shè)備)代碼和數(shù)據(jù),所述計算機機器可讀介質(zhì)諸如非暫時性計算機機器可讀存儲介質(zhì)(例如,磁盤;光盤;隨機存取存儲器;只讀存儲器;閃速存儲器設(shè)備;相變存儲器)和暫時性計算機機器可讀通信介質(zhì)(例如,電氣、光學(xué)、聲學(xué)或其他形式的傳播信號——諸如載波、紅外信號、數(shù)字信號等)。此外,這樣的電子設(shè)備典型地包括耦合到一個或多個其他組件的一個或多個處理器的集合,所述一個或多個其他組件諸如一個或多個存儲設(shè)備(非暫時性機器可讀存儲介質(zhì))、用戶輸入/輸出設(shè)備(例如,鍵盤、觸摸屏和/或顯示器)和網(wǎng)絡(luò)連接。處理器集合和其他組件的耦合典型地通過一個或多個總線和橋(也稱為總線控制器)。存儲設(shè)備和承載網(wǎng)絡(luò)業(yè)務(wù)的信號分別表示一個或多個機器可讀存儲介質(zhì)和機器可讀通信介質(zhì)。因而,給定電子設(shè)備的存儲設(shè)備典型地存儲代碼和/或數(shù)據(jù)以供在該電子設(shè)備的一個或多個處理器集合上執(zhí)行。當(dāng)然,可以使用軟件、固件和/或硬件的不同組合來實現(xiàn)本發(fā)明的實施例的一個或多個部分。貫穿該詳細描述,為了解釋的目的,闡述眾多具體細節(jié)以便提供對本發(fā)明的透徹理解。然而,對于本領(lǐng)域技術(shù)人員將明顯的是,本發(fā)明可以在沒有這些具體細節(jié)中的一些的情況下實踐。在某些情況下,不精細詳細地描述公知的結(jié)構(gòu)和功能以便避免使本發(fā)明的主題模糊。因此,應(yīng)在以下權(quán)利要求的方面判斷本發(fā)明的范圍和精神。