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