技術(shù)領(lǐng)域
本發(fā)明的領(lǐng)域一般涉及計(jì)算系統(tǒng),且尤其涉及使用三個(gè)標(biāo)量項(xiàng)的超級多次加法指令。
背景技術(shù):
圖1示出了用0來實(shí)現(xiàn)的處理核100的高級示圖。
半導(dǎo)體芯片上的邏輯電路。該處理核包括流水線101。該流水線由各自被設(shè)計(jì)成在完全執(zhí)行程序代碼指令所需的多步驟過程中執(zhí)行特定步驟的多個(gè)級組成。這些通常至少包括:1)指令取出和解碼;2)數(shù)據(jù)取出;3)執(zhí)行;4)寫回。執(zhí)行級對由相同指令標(biāo)識出并在另一上述先前級(例如,步驟2)中被取出的數(shù)據(jù)執(zhí)行由上述先前步驟(例如在步驟1)中所取出和解碼的指令所標(biāo)識出的特定操作。被操作的數(shù)據(jù)通常是從(通用)寄存器存儲(chǔ)空間102中取出的。在該操作完成時(shí)所創(chuàng)建的新數(shù)據(jù)通常也被“寫回”到寄存器存儲(chǔ)空間(例如,在級4處)。
與執(zhí)行級相關(guān)聯(lián)的邏輯電路通常由多個(gè)“執(zhí)行單元”或“功能單元”103_1至103_N構(gòu)成,這些單元各自被設(shè)計(jì)成執(zhí)行其自身的獨(dú)特的操作子集(例如,第一功能單元執(zhí)行整數(shù)數(shù)學(xué)操作,第二功能單元執(zhí)行浮點(diǎn)指令,第三功能單元執(zhí)行自/至高速緩存/存儲(chǔ)器的加載/存儲(chǔ)操作等等)。由所有這些功能單元執(zhí)行的所有操作的集合與處理核100所支持的“指令集”相對應(yīng)。
兩種類型的處理器架構(gòu)在計(jì)算機(jī)科學(xué)領(lǐng)域中被廣泛認(rèn)可:“標(biāo)量”和“向量”。標(biāo)量處理器被設(shè)計(jì)成執(zhí)行對單個(gè)數(shù)據(jù)集進(jìn)行操作的指令,而向量處理器被設(shè)計(jì)成執(zhí)行對多個(gè)數(shù)據(jù)集進(jìn)行操作的指令。圖2A和圖2B示出比較示例,其例示了標(biāo)量處理器和向量處理器之間的基本不同之處。
圖2A示出標(biāo)量AND(與)指令的示例,其中單個(gè)操作數(shù)集A和B被加在一起以產(chǎn)生奇異(或“標(biāo)量”)結(jié)果C(即,AB=C)。相比之下,圖2B示出向量AND指令的示例,其中兩個(gè)操作數(shù)集A/B和D/E并行地分別加在一起以同時(shí)產(chǎn)生向量結(jié)果C和F(即,A.AND.B=C和D.AND.E=F)。根據(jù)術(shù)語學(xué),“向量”是具有多個(gè)“元素”的數(shù)據(jù)元素。例如,向量V=Q,R,S,T,U具有五個(gè)不同元素:Q,R,S,T和U。示例性向量V的“大小”為五(因?yàn)樗哂形鍌€(gè)元素)。
圖1還示出與通用寄存器空間102不同的向量寄存器空間107的存在。具體而言,通用寄存器空間102名義上用于存儲(chǔ)標(biāo)量值。由此,當(dāng)執(zhí)行單元中的任一個(gè)執(zhí)行標(biāo)量操作時(shí),它們名義上執(zhí)行從通用寄存器存儲(chǔ)空間102中調(diào)用的操作數(shù)(并且將結(jié)果寫回到通用寄存器存儲(chǔ)空間102)。相比之下,當(dāng)執(zhí)行單元中的任一個(gè)執(zhí)行向量操作時(shí),它們名義上執(zhí)行從向量寄存器空間107調(diào)用的操作數(shù)(并且將結(jié)果寫回向量寄存器空間107)。存儲(chǔ)器的不同區(qū)域可類似地被分配以供存儲(chǔ)標(biāo)量值和向量值。
還注意到,在到功能單元103_1至103_N的相應(yīng)輸入以及來自功能單元103_1至103_N的相應(yīng)輸出處,存在掩碼邏輯104_1至104_N以及105_1至105_N。在各種實(shí)現(xiàn)中,對于向量操作,這些層中只有一層實(shí)際上被實(shí)現(xiàn)——盡管這并不是嚴(yán)格的要求(盡管圖1中未描繪,但可以想到,僅執(zhí)行標(biāo)量操作而非向量操作的執(zhí)行單元不需要具有任何掩碼層)。對于采用掩碼的任何向量指令,輸入掩碼邏輯104_1至104_N和/或輸出掩碼邏輯105_1至105_N可用于控制針對該向量指令對哪些元素進(jìn)行有效地操作。這里,掩碼向量是從掩碼寄存器空間106中被讀取(例如,連同從向量寄存器存儲(chǔ)空間107中被讀取的輸入操作數(shù)向量一起)并且被呈現(xiàn)給掩碼邏輯104、105層中的至少一者。
在執(zhí)行向量程序代碼的過程中,每一個(gè)向量指令無需要求全數(shù)據(jù)字。例如,用于某些指令的輸入向量可以僅是8個(gè)元素,用于其他指令的輸入向量可以是16個(gè)元素,用于其他指令的輸入向量可以是32個(gè)元素等等。因此,掩碼層104/105被用于標(biāo)識全向量數(shù)據(jù)字的一元素集合,該元素集合應(yīng)用于特定指令以便實(shí)現(xiàn)跨指令的不同向量大小。通常,對于每一個(gè)向量指令,掩碼寄存器空間106中所保持的特定掩碼圖案被該指令調(diào)出,從掩碼寄存器空間中被取出,并且被提供給掩碼層104/105中的任一者或兩者,以“啟用”針對該特定向量操作的正確的元素集合。
附圖簡述
本發(fā)明是作為示例說明的,而不僅限制于各個(gè)附圖的圖形,在附圖中,類似的參考編號表示類似的元件,其中:
圖1示出處理器流水線;
圖2A和2B比較標(biāo)量和向量操作;
圖3示出了在可執(zhí)行VPLANE指令的執(zhí)行單元之內(nèi)的邏輯電路的實(shí)施例;
圖4示出了用于VPLANE指令的操作的方法;
圖5示出了在控制字段中包括標(biāo)量操作數(shù)數(shù)據(jù)的指令格式;
圖6A是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其A類指令模板的方框圖。
圖6B是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其B類指令模板的方框圖。
圖7A-C是示出根據(jù)本發(fā)明的實(shí)施例的示例性專用向量友好指令格式的方框圖。
圖8是根據(jù)本發(fā)明的一個(gè)實(shí)施例的寄存器架構(gòu)的方框圖。
圖9A是根據(jù)本發(fā)明的實(shí)施例的連接到管芯上(on-die)互聯(lián)網(wǎng)絡(luò)且具有第二級(L2)高速緩存的本地子集的單CPU核的框圖。
圖9B是根據(jù)本發(fā)明的各實(shí)施例的圖9A中的CPU核的一部分的展開圖。
圖10是示出根據(jù)本發(fā)明的實(shí)施例的示例性無序架構(gòu)的框圖。
圖11示出根據(jù)本發(fā)明一個(gè)實(shí)施例的系統(tǒng)的框圖。
圖12示出根據(jù)本發(fā)明的實(shí)施例的第二系統(tǒng)的框圖。
圖13是根據(jù)本發(fā)明的實(shí)施例的第三系統(tǒng)的框圖。
圖14是根據(jù)本發(fā)明的實(shí)施例的SoC的框圖。
圖15是根據(jù)本發(fā)明的實(shí)施例的單核處理器和多核處理器的框圖,具有集成的存儲(chǔ)器控制器和圖形器件。
圖16是根據(jù)本發(fā)明的實(shí)施例的對比使用軟件指令變換器將源指令集中的二進(jìn)制指令變換成目標(biāo)指令集中的二進(jìn)制指令的框圖。
詳細(xì)描述
圖3和4示出了用于執(zhí)行“超級”MADD指令VPLANE的方法和對應(yīng)的邏輯電路,該指令執(zhí)行如下操作:V1[]=(a*V2[])+(b*V3[])+c,其中,V1[]是結(jié)果向量,V2[]和V3[]是輸入向量,并且a、b以及c是標(biāo)量401。如圖3中所觀察到的那樣,執(zhí)行該操作的執(zhí)行單元可采用一種以VPLANE R1;R2;R3;R4/M為形式的指令格式技術(shù)。在這樣做的過程中,指令格式單獨(dú)地是指:i)用于存儲(chǔ)結(jié)果V1[]的目的地寄存器的地址R1;ii)兩個(gè)分開的輸入操作數(shù)寄存器地址R2和R3,分別用于存儲(chǔ)輸入操作數(shù)V2[]、V3[];以及iii)第三輸入操作數(shù)地址R3或M,用于定義在其中找到標(biāo)量a、b以及c中的每一個(gè)的寄存器或存儲(chǔ)器存儲(chǔ)位置。或者,該指令格式可以采取VPLANE R1;R2;R3/M的形式,其中R1保持源操作數(shù)之一和目的地。VPLANE指令的更正式的格式可包括寫掩碼(例如,VPLANE R1;k;R2;R3;R4/M,其中k對應(yīng)于掩碼向量)。在又一個(gè)實(shí)施例中,僅僅寫入掩碼(圖1的層105)被用作該架構(gòu)的一部分。為了簡單,本說明書的其余部分將主要參照這種VPLANE R1;R2;R3;R4/M格式。
在一實(shí)施例中,標(biāo)號R1、R2、R3和R4中的每一個(gè)對應(yīng)于圖1的向量寄存器空間107中的位置。相似的是,M對應(yīng)于在存儲(chǔ)器中存儲(chǔ)了向量值的位置。在一實(shí)施例中,標(biāo)量值a、b以及c是從名義上被用于存儲(chǔ)向量的存儲(chǔ)空間R4/M中調(diào)用的。即,該VPLANE指令具有五個(gè)輸入操作數(shù)(V2[],V3[],a,b以及c),但是僅僅消耗三個(gè)輸入數(shù)據(jù)源(例如,三個(gè)寄存器或兩個(gè)寄存器和一存儲(chǔ)器位置)。
為了實(shí)現(xiàn)輸入信息的壓縮,正如圖3中所觀察到的那樣,標(biāo)量a、b、c被“打包”到同一輸入數(shù)據(jù)結(jié)構(gòu)中,以有效地從單個(gè)源中提供了這三個(gè)標(biāo)量。特別是,“經(jīng)打包”的或像向量的數(shù)據(jù)結(jié)構(gòu)包含在R4/M中的標(biāo)量值a、b、c,該數(shù)據(jù)結(jié)構(gòu)并不必然地具有與該指令所調(diào)出的其它向量相同的向量大小。由此,不像典型的向量指令那樣(其中,每一個(gè)輸入操作數(shù)是相同大小的向量),VPLANE指令的結(jié)構(gòu)接受這樣一種可能:一組輸入操作數(shù)V2[],V3[]將都是第一大小(由機(jī)器支持的任何向量大小)的向量,同時(shí)另一個(gè)輸入操作數(shù)基本上是不同的第二大小(三)的向量。
如在圖3和4中觀察到的,VPLANE指令的執(zhí)行邏輯電路包括分別保持V2[],V3[]以及a、b、c標(biāo)量的寄存器310、311以及312。這些執(zhí)行單元資源還包括熔合的乘法器313。輸出結(jié)果被從該乘法器313傳遞到結(jié)果寄存器319。在一實(shí)施例中,熔合的乘法器313基本上包括兩個(gè)“并排的”乘法器,每一個(gè)乘法器由其自己的各個(gè)選擇邏輯314、316(以產(chǎn)生部分乘積項(xiàng))及其自己的各個(gè)華萊士樹電路315、317(或其它合適的加法器電路,以添加該部分乘積)構(gòu)成。通過使用這種“并排的”方式,(a*V2[])和(b*V3[])這兩項(xiàng)可以被基本上同時(shí)計(jì)算出。
參照圖3,“左半邊”乘法器是由選擇邏輯314和華萊士樹電路315構(gòu)成的。選擇邏輯314構(gòu)造用于(a*V2[])乘法的部分乘積,并且華萊士樹電路315對這些部分乘積求和以確定(a*V2[])最終乘積。相似的是,“右半邊”乘法器是由選擇邏輯316和華萊士樹電路317構(gòu)成的。選擇邏輯316構(gòu)造用于(b*V3[])乘法的部分乘積,并且華萊士樹電路317對這些部分乘積求和以確定(b*V3[])最終乘積。然后,由“底部”加法器318將(a*V2[])和(b*V3[])最終乘積與標(biāo)量項(xiàng)c相加,以產(chǎn)生最終結(jié)果V1[]。
如上所述的熔合的乘法對應(yīng)于在加法器318處的單次繞行。此處,至少為了浮點(diǎn)操作數(shù),圖3中所觀察到的V2[],V3[],a,b,c輸入值對應(yīng)于尾數(shù)值。指數(shù)加法以實(shí)現(xiàn)該乘法是通過圖3中未示出的加法電路來實(shí)現(xiàn)的。考慮到執(zhí)行單元作為一個(gè)整體可對其進(jìn)行操作的不同的輸入值的動(dòng)態(tài)范圍,圖3的尾數(shù)值在考慮到其各自的指數(shù)值的情況下可能需要被移動(dòng)以實(shí)現(xiàn)正確的對準(zhǔn)。在加法級(比如底部加法器318)中,這種移動(dòng)可以產(chǎn)生取整誤差。
與通過同一乘法累加電路而“循環(huán)兩次”由此使兩個(gè)單獨(dú)的取整誤差(例如,第一循環(huán)確定了(a*V2[])+c(所創(chuàng)建的第一取整誤差),以及第二循環(huán)確定了(b*V3[])并將其加到(a*V2[])+c(所創(chuàng)建的第二取整誤差))級聯(lián)起來的方法相比,如上所述的熔合的乘法可以使加法取整誤差最小化至單次取整誤差。指出下列這一點(diǎn)是恰當(dāng)?shù)模罕M管使取整誤差級聯(lián)起來,但是通過同一乘法電路而循環(huán)兩次的方法可能對于各種應(yīng)用而言是足夠的了,因此,可以被視為本發(fā)明的一實(shí)施例。在一實(shí)施例中,兩個(gè)不同的操作碼被底層的指令集使用,以指定熔合的乘法或“循環(huán)兩次”是否要被使用。
在圖3中,加數(shù)標(biāo)量c被提供到底部加法器318,但是可以兩者擇一地被輸入到華萊士樹315、316之一中(這取決于華萊士樹的大小)。也可想像的是,某些另外的或備選的方法可以選擇將來自左邊和右邊部分乘積的部分乘積混合到同一華萊士樹結(jié)構(gòu)中,使得左邊和右邊的華萊士樹315、317之間的區(qū)別變模糊了(例如,具有預(yù)先對準(zhǔn)的尾數(shù)和額外的流水線級)。
如下文進(jìn)一步描述的,VPLANE指令可被擴(kuò)展為包括單精度版本和雙精度版本。一般而言,雙精度的數(shù)據(jù)路徑是單精度的數(shù)據(jù)路徑的兩倍寬度。在一實(shí)施例中,華萊士樹315、317兩者各自包括一對各自具有單精度寬度的華萊士樹。即,熔合乘法器313中存在四個(gè)單獨(dú)的單精度寬度華萊士樹加法器。
一對這樣的華萊士樹被用來按雙精度模式對單個(gè)雙精度值求和。在一實(shí)施例中,這四個(gè)單獨(dú)的華萊士樹也被用來支持單精度模式的雙超級MADD指令(例如,V1[]=((a*V2L[])+(b*V3L[])+c)+((a*V2R[])+(b*V3R[])+c)。在此,V2L[]對應(yīng)于寄存器R2的左半部且V2R[]對應(yīng)于寄存器R2的右半部。V3L[]和V3R[]被類似地格式化。在又一實(shí)施例中,使用對乘法器的適當(dāng)輸入,附加標(biāo)量值(例如,d、e、f)可連同a、b、c一起打包到R4/M,使得使用同一單精度指令計(jì)算兩個(gè)分開且獨(dú)立的超級MADD。
在一實(shí)施例中,基于數(shù)據(jù)類型,有不同“風(fēng)格”的VPLANE指令。例如,根據(jù)一個(gè)實(shí)施例,可應(yīng)用的處理器的指令集架構(gòu)被設(shè)計(jì)成支持用于向量操作的VPLANEPS(向量單精度)和VPLANESPD(向量雙精度)。
在又一實(shí)施例中,執(zhí)行單元資源被設(shè)計(jì)成不僅支持向量指令還支持標(biāo)量指令PLANE。即,這些執(zhí)行資源也執(zhí)行函數(shù)(a*A)+(b*B)+c,其中,A和B是標(biāo)量輸入操作數(shù)。此處,向量寄存器的低階位(圖3中未示出)可與寄存器309,311,312中的每一個(gè)以及寄存器319相關(guān)聯(lián),并且按與圖3中所觀察到的相同方式被路由到熔合乘法器邏輯。在又一實(shí)施例中,對于標(biāo)量指令而言,支持單精度(PLANESS)和雙精度(PLANESD)兩者。
將五個(gè)輸入操作數(shù)打包到考慮到提供最多三個(gè)輸入操作數(shù)而設(shè)計(jì)的指令格式中的問題是指定了“額外的”操作數(shù)的編碼。具體地講,該指令執(zhí)行邏輯需要知道a、b以及c標(biāo)量中的每一個(gè)的大小和/或它們的邊界在從R4/M中提取出的數(shù)據(jù)結(jié)構(gòu)內(nèi)的何處。在一實(shí)施例中,如在圖5中觀察到的那樣,該信息被呈現(xiàn)在立即操作數(shù)中(例如,x86或兼容指令格式中的imm8)。立即操作數(shù)是一變量,該變量是已知的預(yù)先運(yùn)行時(shí)間,因此,可以在編譯/代碼構(gòu)建過程中被直接地嵌入該指令中。這樣,在VPLANE指令的編譯期間,用于定義在從R4/M中取出的打包的數(shù)據(jù)結(jié)構(gòu)中哪里可以單獨(dú)找到a、b以及c標(biāo)量的信息在立即操作數(shù)字段中被直接地嵌入到該指令中。
上述指令的各實(shí)施例可按“通用向量友好指令格式”來實(shí)現(xiàn),如下詳細(xì)描述的。在其他實(shí)施例中,不使用這樣的格式而使用另一指令格式,然而,下文對寫掩碼寄存器、各種數(shù)據(jù)變換(混合、廣播等等)、尋址等的描述一般適用于以上指令的各實(shí)施例的描述。另外,在下文中詳述示例性系統(tǒng)、架構(gòu)、以及流水線。上述指令的實(shí)施例可在這些系統(tǒng)、架構(gòu)、以及流水線上執(zhí)行,但是不限于詳述的系統(tǒng)、架構(gòu)、以及流水線。
向量友好指令格式是適于向量指令(例如,存在專用于向量操作的某些字段)的指令格式。盡管描述了其中通過向量友好指令格式支持向量和標(biāo)量運(yùn)算兩者的實(shí)施例,但是替換實(shí)施例只通過向量友好指令格式使用向量運(yùn)算。
示例性通用向量友好指令格式——圖6A-B
圖6A-B是示出了根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其指令模板的方框圖。圖6A是示出了根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其A類指令模板的框圖;而圖6B是示出了根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其B類指令模板的框圖。具體地,針對通用向量友好指令格式600定義A類和B類指令模板,兩者包括無存儲(chǔ)器存取605的指令模板和存儲(chǔ)器存取620的指令模板。在向量友好指令格式的上下文中的通用術(shù)語是指不綁定到任何專用指令集的指令格式。盡管描述了其中向量友好指令格式的指令操作源自寄存器(無存儲(chǔ)器存取605指令模板)或寄存器/存儲(chǔ)器(存儲(chǔ)器存取620指令模板)的向量,但本發(fā)明的替換實(shí)施例可只支持這些之一。同樣,盡管將描述其中存在向量指令格式的加載和存儲(chǔ)指令的本發(fā)明實(shí)施例,但作為替換或補(bǔ)充,替換實(shí)施例具有將向量移入和移出寄存器(例如,從存儲(chǔ)器到寄存器、從寄存器到存儲(chǔ)器、在寄存器之間)的不同指令格式的指令。此外,盡管將描述支持兩類指令模板的本發(fā)明實(shí)施例,但替換實(shí)施例可只支持這些之一或兩類以上。
盡管將描述其中向量友好指令格式支持64字節(jié)向量操作數(shù)長度(或大小)與32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或大小)(并且由此,64字節(jié)向量由16雙字大小的元素或者替換地8四字大小的元素組成)、64字節(jié)向量操作數(shù)長度(或大小)與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ù)長度(或大小)與32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(1字節(jié))數(shù)據(jù)元素寬度(或大小)的本發(fā)明的實(shí)施例,但是替換實(shí)施例可支持更大、更小、和/或不同的向量操作數(shù)大小(例如,656字節(jié)向量操作數(shù))與更大、更小或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)。
圖6A中的A類指令模板包括:1)在無存儲(chǔ)器存取605的指令模板內(nèi),示出了無存儲(chǔ)器存取、全部取整控制型操作610的指令模板以及無存儲(chǔ)器存取、數(shù)據(jù)變換型操作615的指令模板;以及2)在存儲(chǔ)器存取620的指令模板內(nèi),示出存儲(chǔ)器存取、時(shí)間625的指令模板和存儲(chǔ)器存取、非時(shí)間630的指令模板。圖6B中的B類指令模板包括:1)在無存儲(chǔ)器存取605的指令模板內(nèi),示出了無存儲(chǔ)器存取、寫掩碼控制、部分取整控制型操作612的指令模板以及無存儲(chǔ)器存取、寫掩碼控制、vsize型操作617的指令模板;以及2)在存儲(chǔ)器存取620的指令模板內(nèi),示出了存儲(chǔ)器存取、寫掩碼控制627指令模板。
格式
通用向量友好指令格式600包括以下列出以在圖6A-B中示出順序的如下字段。結(jié)合以上涉及VPLANE指令的討論,在一實(shí)施例中,參考以下在圖6A-B和7中提供的格式細(xì)節(jié),可利用非存儲(chǔ)器存取指令類型605或存儲(chǔ)器存取指令類型620。用于第一、第二和第三輸入操作數(shù)R2R3R4/M和目的地R1的地址可以是在下述寄存器地址字段644中指定的。在又一實(shí)施例中,第一源操作數(shù)V1[]的大小是在Reg_Field 744中被編碼的;第二源操作數(shù)V2[]的大小是在VVVV字段720中被編碼的,并且標(biāo)量a,b,c的大小/位置是在imm8字段772中被編碼的。在一實(shí)施例中,imm8的位[3]和[7:4]被用于按上文所述那樣對a、b以及c標(biāo)量進(jìn)行編碼,并且imm8的位[2:0]被用于符號控制。
格式字段640-該字段中的特定值(指令格式標(biāo)識符值)唯一地標(biāo)識了向量友好指令格式,并且由此標(biāo)識了指令在指令流中以向量友好指令格式的出現(xiàn)。因此,格式字段640的內(nèi)容將第一指令格式的指令與其他指令格式的指令進(jìn)行區(qū)分,從而允許向量友好指令格式的指令進(jìn)入具有其他指令格式的指令集。由此,該字段在無需只有通用向量友好指令格式的指令集的意義上是任選的。
基礎(chǔ)操作字段642-其內(nèi)容區(qū)分了不同的基礎(chǔ)操作。如本文稍后描述的,基礎(chǔ)操作字段642可包括操作碼字段或者是操作碼字段的一部分。
寄存器索引字段644-其內(nèi)容直接或者通過地址生成指定了源或目的地操作數(shù)在寄存器中或者在存儲(chǔ)器中的位置。這些包括足夠數(shù)量的位以從PxQ(例如,32x1012)個(gè)寄存器文件中選擇N個(gè)寄存器。盡管在一個(gè)實(shí)施例中N可多達(dá)三個(gè)源和一個(gè)目的地寄存器,但是替換實(shí)施例可支持更多或更少的源和目的地寄存器(例如,可支持高達(dá)兩個(gè)源,其中這些源中的一個(gè)源還用作目的地,可支持高達(dá)三個(gè)源,其中這些源中的一個(gè)源還用作目的地,可支持高達(dá)兩個(gè)源和一個(gè)目的地)。盡管在一實(shí)施例中P=32,但替換實(shí)施例可以支持更多或更少寄存器(例如,16)。盡管在一實(shí)施例中Q=1012位,但替換實(shí)施例可以支持更多或更少位(例如,128、1024)。
修飾符(modifier)字段646-其內(nèi)容將以指定存儲(chǔ)器存取的通用向量指令格式出現(xiàn)的指令與不指定存儲(chǔ)器存取的通用向量指令格式出現(xiàn)的指令區(qū)分開;即在無存儲(chǔ)器存取605的指令模板與存儲(chǔ)器存取620的指令模板之間。存儲(chǔ)器存取操作讀取和/或?qū)懭氲酱鎯?chǔ)器層次(在一些情況下,使用寄存器中的值來指定源和/或目的地址),而非存儲(chǔ)器存取操作不這樣(例如,源和/或目的地是寄存器)。盡管在一個(gè)實(shí)施例中,該字段還在三種不同的方式之間選擇以執(zhí)行存儲(chǔ)器地址計(jì)算,但是替換實(shí)施例可支持更多、更少或不同的方式來執(zhí)行存儲(chǔ)器地址計(jì)算。
擴(kuò)充操作字段650-其內(nèi)容區(qū)分了除基礎(chǔ)操作以外要執(zhí)行的各種不同操作中的哪一個(gè)操作。該字段是上下文專用的。在本發(fā)明的一個(gè)實(shí)施例中,該字段被分成類字段668、α字段652、以及β字段654。擴(kuò)充操作字段允許在單一指令而非2、3或4個(gè)指令中執(zhí)行多組共同的操作。以下是使用擴(kuò)充字段650來減少所需指令的數(shù)量的指令(其命名法在本文中稍后更詳細(xì)地描述)的一些示例。
其中[rax]是要用于地址生成的基址指針,并且其中{}指示由數(shù)據(jù)操縱字段(在本文以下更詳細(xì)地描述)所指定的轉(zhuǎn)換操作。
縮放字段660-其內(nèi)容允許用于存儲(chǔ)器地址生成(例如,用于使用2倍縮放*索引+基數(shù)的地址生成)的索引字段的內(nèi)容的縮放。
位移字段662A-其內(nèi)容被用作存儲(chǔ)器地址生成的一部分(例如,用于使用2倍縮放*索引+基數(shù)+位移的地址生成)。
位移因數(shù)字段662B(注意,位移字段662A直接在位移因數(shù)字段662B上的并置指示了使用一個(gè)或另一個(gè))-其內(nèi)容被用作地址生成的一部分,它指定由存儲(chǔ)器存取的大小(N)縮放的位移因數(shù),其中N是存儲(chǔ)器存取中的字節(jié)的數(shù)量(例如,用于使用2倍縮放*索引+基數(shù)+縮放的位移的地址生成)。忽略冗余的低階位,并且因此位移因數(shù)字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)總大小以生成在計(jì)算有效地址時(shí)所使用的最終位移。N的值由處理器硬件在運(yùn)行時(shí)基于完整操作碼字段674(稍候在本文中描述)和數(shù)據(jù)操縱字段654C確定,如本文稍后描述的。位移字段662A和位移因數(shù)字段662B在它們不用于無存儲(chǔ)器存取605的指令模板和/或不同的實(shí)施例可實(shí)現(xiàn)這兩者中的僅一個(gè)或均未實(shí)現(xiàn)的意義上是任選的。
數(shù)據(jù)元素寬度字段664-其內(nèi)容區(qū)分了將要使用大量數(shù)據(jù)元素寬度中的哪一個(gè)(在一些實(shí)施例中用于所有的指令,在其他實(shí)施例中只用于一些指令)。該字段在如果支持僅一個(gè)數(shù)據(jù)元素寬度和/或使用操作碼的某一方面來支持?jǐn)?shù)據(jù)元素寬度則不需要的意義上是任選的。
寫掩碼字段670-其內(nèi)容基于每一數(shù)據(jù)元素位置來控制目的地向量操作數(shù)中的數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴(kuò)充操作的結(jié)果。A類指令模板支持合并-寫掩碼,而B類指令模板支持合并寫掩碼和調(diào)零寫掩碼兩者。當(dāng)合并的向量掩碼允許在執(zhí)行任何操作(由基礎(chǔ)操作和擴(kuò)充操作指定)期間保護(hù)目的地中的任何元素集免于更新時(shí),在另一實(shí)施例中,保持其中對應(yīng)掩碼位具有0的目的地的每一元素的舊值。相反,當(dāng)調(diào)零向量掩碼允許在執(zhí)行任何操作(由基礎(chǔ)操作和擴(kuò)充操作指定)期間使目的地中的任何元素集調(diào)零時(shí),在一個(gè)實(shí)施例中,目的地的元素在對應(yīng)掩碼位具有0值時(shí)被設(shè)為0。該功能的子集是控制執(zhí)行的操作的向量長度的能力(即,從第一個(gè)到最后一個(gè)要修改的元素的跨度),然而,被修改的元素不必是連續(xù)的。由此,寫掩碼字段670允許部分向量操作,這包括加載、存儲(chǔ)、算術(shù)、邏輯等。同樣,這一掩碼可被用于出錯(cuò)抑制(即,通過將目的地的數(shù)據(jù)元素位置進(jìn)行掩碼以阻止接收可/將造成出錯(cuò)的任何操作的結(jié)果——例如,假定存儲(chǔ)器中的向量跨越頁邊界并且第一頁而非第二頁會(huì)造成頁面出錯(cuò),則在該向量的位于第一頁上的所有數(shù)據(jù)元素被寫掩碼進(jìn)行了掩碼的情況下該頁面出錯(cuò)可被忽略)。此外,寫掩碼允許包含特定類型的條件語句的“向量化循環(huán)”。盡管描述了其中寫掩碼字段670的內(nèi)容選擇了多個(gè)寫掩碼寄存器中的包含要使用的寫掩碼的一個(gè)寫掩碼寄存器(并且由此寫掩碼字段670的內(nèi)容間接地標(biāo)識了要執(zhí)行的掩蔽操作)的本發(fā)明的實(shí)施例,但是替換實(shí)施例相反或另外允許掩碼寫字段670的內(nèi)容直接地指定要執(zhí)行的掩蔽操作。此外,在以下情況下歸零允許性能改進(jìn):1)寄存器重命名被用在其目的地操作數(shù)并非也是源的指令上(也稱為非三重指令),因?yàn)樵诩拇嫫髦孛魉€階段期間,目的地不再是隱式源(來自當(dāng)前目的地寄存器的數(shù)據(jù)元素?zé)o需被復(fù)制到經(jīng)重命名的目的地寄存器或以某種方式與該操作一起攜帶,因?yàn)椴皇遣僮鹘Y(jié)果的任何數(shù)據(jù)元素(任何經(jīng)掩碼的數(shù)據(jù)元素)將被歸零);以及2)在寫回階段期間,因?yàn)榱惚粚懭搿?/p>
立即數(shù)字段672-其內(nèi)容允許對立即數(shù)的指定。該字段在實(shí)現(xiàn)不支持立即數(shù)的通用向量友好格式中不存在且在不使用立即數(shù)的指令中不存在的意義上是任選的。
指令模板類選擇
類字段668-其內(nèi)容在指令的不同的類之間進(jìn)行區(qū)分。參考圖2A-B,該字段的內(nèi)容在A類和B類指令之間進(jìn)行選擇。在圖6A-B中,圓角方形用于指示專用值存在于字段中(例如,在圖6A-B中分別用于類字段668的A類668A和B類668B)。
A類無存儲(chǔ)器存取指令模板
在A類非存儲(chǔ)器存取605的指令模板的情況下,α字段652被解釋為其內(nèi)容區(qū)分了要執(zhí)行不同擴(kuò)充操作類型中的哪一種(例如,針對無存儲(chǔ)器存取、取整型操作610和無存儲(chǔ)器存取、數(shù)據(jù)變換型操作615的指令模板分別指定取整652A.1和數(shù)據(jù)變換652A.2)的RS字段652A,而β字段654區(qū)分了要執(zhí)行指定類型的操作中的哪一種。在圖6中,圓角塊被用來指示存在特定值(例如,修飾符字段646中的無存儲(chǔ)器存取646A;α字段652/rs字段652A的取整652A.1和數(shù)據(jù)變換652A.2)。在無存儲(chǔ)器存取605指令模板中,縮放字段660、位移字段662A以及位移縮放字段662B都不存在。
無存儲(chǔ)器存取指令模板-全部取整控制型操作
在無存儲(chǔ)器存取全部取整控制型操作610的指令模板中,β字段654被解釋為其內(nèi)容提供了靜態(tài)取整的取整控制字段654A。盡管在本發(fā)明的所述實(shí)施例中取整控制字段654A包括抑制所有浮點(diǎn)異常(SAE)字段656和取整操作控制字段658,但是替換實(shí)施例可支持、可將這些概念兩者都編碼成相同的字段或者只有這些概念/字段中的一個(gè)或另一個(gè)(例如,可只有取整操作控制字段658)。
SAE字段656-其內(nèi)容區(qū)分是否停用異常事件報(bào)告;當(dāng)SAE字段656的內(nèi)容指示啟用抑制時(shí),給定指令不報(bào)告任何種類的浮點(diǎn)異常標(biāo)志且不引發(fā)任何浮點(diǎn)異常處理程序。
取整操作控制字段658-其內(nèi)容區(qū)分執(zhí)行一組取整操作中的哪一個(gè)(例如,向上取整、向下取整、向零取整、以及就近取整)。由此,取整操作控制字段658允許在每一指令的基礎(chǔ)上改變?nèi)≌J?,并且因而在需要這一點(diǎn)時(shí)特別有用。在本發(fā)明的其中處理器包括用于指定取整模式的控制寄存器的一個(gè)實(shí)施例中,取整操作控制字段650的內(nèi)容覆蓋該寄存器值(能夠選擇取整模式而不必在這樣的控制寄存器上執(zhí)行保存-修改-恢復(fù)是有利的)。
無存儲(chǔ)器存取指令模板-數(shù)據(jù)變換型操作
在無存儲(chǔ)器存取數(shù)據(jù)變換型操作615的指令模板中,β字段654被解釋為數(shù)據(jù)變換字段654B,其內(nèi)容區(qū)分要執(zhí)行大量數(shù)據(jù)變換中的哪一個(gè)(例如,無數(shù)據(jù)變換、拌和、廣播)。
A類存儲(chǔ)器存取指令模板
在A類存儲(chǔ)器存取620的指令模板的情況下,α字段652被解釋為驅(qū)逐提示字段652B,其內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪一個(gè)(在圖6A中,為存儲(chǔ)器存取時(shí)間625指令模版和存儲(chǔ)器存取非時(shí)間630的指令模版分別指定時(shí)間652B.1和非時(shí)間652B.2),而β字段654被解釋為數(shù)據(jù)操縱字段654C,其內(nèi)容區(qū)分要執(zhí)行大量數(shù)據(jù)操縱操作(也稱為基元(primitive))中的哪一個(gè)(例如,無操縱、廣播、源的向上轉(zhuǎn)換、以及目的地的向下轉(zhuǎn)換)。存儲(chǔ)器存取620的指令模版包括縮放字段660、以及任選的位移字段662A或位移縮放字段662B。
向量存儲(chǔ)器指令使用轉(zhuǎn)換支持來執(zhí)行來自存儲(chǔ)器的向量負(fù)載并將向量存儲(chǔ)到存儲(chǔ)器。如同有規(guī)律的向量指令,向量存儲(chǔ)器指令以數(shù)據(jù)元素式的方式與存儲(chǔ)器來回傳輸數(shù)據(jù),其中實(shí)際傳輸?shù)脑赜蛇x為寫掩碼的向量掩碼的內(nèi)容闡述。在圖6A中,圓角方框被用來指示字段中存在特定值(例如,修飾符字段646的存儲(chǔ)器存取646B;α字段652/驅(qū)逐提示字段652B的時(shí)間652B.1和非時(shí)間652B.2)。
存儲(chǔ)器存取指令模版-時(shí)間
時(shí)間數(shù)據(jù)是可能很快地重新使用足以從高速緩存受益的數(shù)據(jù)。然而,這是提示且不同的處理器可以不同的方式實(shí)現(xiàn)它,包括完全忽略該提示。
存儲(chǔ)器存取指令模版-非時(shí)間
非時(shí)間數(shù)據(jù)是不可能很快地重新使用足以從第一級高速緩存中的高速緩存受益且應(yīng)當(dāng)給予驅(qū)逐優(yōu)先級的數(shù)據(jù)。然而,這是提示且不同的處理器可以不同的方式實(shí)現(xiàn)它,包括完全忽略該提示。
B類指令模板
在B類指令模板的情況下,α字段652被解釋為寫掩碼控制(Z)字段652C,其內(nèi)容區(qū)分由寫掩碼字段670控制的寫掩碼應(yīng)當(dāng)是合并還是調(diào)零。
B類無存儲(chǔ)器存取指令模板
在B類非存儲(chǔ)器存取605的指令模板的情況下,β字段654的一部分被解釋為RL字段657A,其內(nèi)容區(qū)分要執(zhí)行不同擴(kuò)充操作類型中的哪一種(例如,針對無存儲(chǔ)器存取、寫掩碼控制、部分取整控制型操作612的指令模版和無存儲(chǔ)器存取、寫掩碼控制、VSIZE型操作617的指令模板分別指定取整657A.1和向量長度(VSIZE)657A.2),而β字段654的其余部分區(qū)分要執(zhí)行指定類型的操作中的哪一種。在圖6中,圓角塊被用來指示存在特定值(例如,修飾符字段646中的無存儲(chǔ)器存取646A;RL字段657A的取整657A.1和VSIZE 657A.2)。在無存儲(chǔ)器存取605指令模板中,縮放字段660、位移字段662A以及位移縮放字段662B都不存在。
無存儲(chǔ)器存取指令模板-寫掩碼控制、部分取整控制型操作
在無存儲(chǔ)器存取、寫掩碼控制、部分取整控制型操作610的指令模版中,β字段654的其余部分被解釋為取整操作字段659A,并且停用異常事件報(bào)告(給定指令不報(bào)告任何種類的浮點(diǎn)異常標(biāo)志且不提起任何浮點(diǎn)異常處理器)。
取整操作控制字段659A-只作為取整操作控制字段658,其內(nèi)容區(qū)分執(zhí)行一組取整操作中的哪一個(gè)(例如,向上取整、向下取整、向零取整、以及就近取整)。由此,取整操作控制字段659A允許在每一指令的基礎(chǔ)上改變?nèi)≌J?,并且因而在需要這一點(diǎn)時(shí)特別有用。在本發(fā)明的其中處理器包括用于指定取整模式的控制寄存器的一個(gè)實(shí)施例中,取整操作控制字段650的內(nèi)容覆蓋該寄存器值(能夠選擇取整模式而不必在這樣的控制寄存器上執(zhí)行保存-修改-恢復(fù)是有利的)。
無存儲(chǔ)器存取指令模板-寫掩碼控制、VSIZE型操作
在無存儲(chǔ)器存取、寫掩碼控制、VSIZE型操作617的指令模版中,β字段654的其余部分被解釋為向量長度字段659B,其內(nèi)容區(qū)分了要執(zhí)行大量數(shù)據(jù)向量長度中的哪一個(gè)(例如,128字節(jié)、856字節(jié)、或1012字節(jié))。
B類存儲(chǔ)器存取指令模板
在A類存儲(chǔ)器存取620的指令模版的情況下,β字段654的一部分被解釋為廣播字段657B,其內(nèi)容區(qū)分是否要執(zhí)行廣播型數(shù)據(jù)操縱操作,而β字段654的其余部分被解釋為向量長度字段659B。存儲(chǔ)器存取620的指令模版包括縮放字段660、以及任選的位移字段662A或位移縮放字段662B。
與各字段有關(guān)的附加討論
針對通用向量友好指令格式600,示出完整操作碼字段674,包括格式字段640、基礎(chǔ)操作字段642以及數(shù)據(jù)元素寬度字段664。盡管示出了其中完整操作碼字段674包括所有這些字段的一個(gè)實(shí)施例,但是完整操作碼字段674包括在不支持所有這些字段的實(shí)施例中的少于所有的這些字段。完整操作碼字段674提供該操作碼。
擴(kuò)充操作字段650、數(shù)據(jù)元素寬度字段664以及寫掩碼字段670允許這些特征在每一指令的基礎(chǔ)上以通用向量友好指令格式指定。
寫掩碼字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建各種類型的指令,其中這些指令允許基于不同的數(shù)據(jù)元素寬度應(yīng)用該掩碼。
該指令格式要求相對少量的位,因?yàn)樗谄渌侄蔚膬?nèi)容來將不同的字段重用于不同目的。例如,一個(gè)觀點(diǎn)是修飾符字段的內(nèi)容在圖6A-B上的無存儲(chǔ)器存取605指令模板和圖6A-B上的存儲(chǔ)器存取6250指令模板之間選擇;而類字段668的內(nèi)容在圖6A的指令模板610/615和圖6B的612/617之間的這些無存儲(chǔ)器存取605指令模板內(nèi)選擇;并且類字段668的內(nèi)容在圖6A的指令模板625/830和圖6B的627之間的這些存儲(chǔ)器存取620指令模板內(nèi)選擇。從另一觀點(diǎn)看,類字段668的內(nèi)容從圖6A和B的A類和B類指令模板之間選擇;而修飾符字段的內(nèi)容在圖6A的指令模板605和620之間的這些A類指令模板內(nèi)選擇;并且修飾符字段的內(nèi)容在圖6B的指令模板605和620之間的這些B類指令模板內(nèi)選擇。在類字段的內(nèi)容指示A類指令模板的情況下,修飾符字段646的內(nèi)容選擇α字段652的解釋(在rs字段652A和EH字段652B之間)。以相關(guān)的方式,修飾符字段646和類字段668的內(nèi)容選擇α字段是被解釋為rs字段652A、EH字段652B還是寫掩碼控制(Z)字段652C。在類和修飾符字段指示A類無存儲(chǔ)器存取操作的情況下,擴(kuò)充字段的β字段的解釋基于rs字段的內(nèi)容而變化;而在類和修飾符字段指示B類無存儲(chǔ)器存取操作的情況下,β字段的解釋依賴于RL字段的內(nèi)容。在類和修飾符字段指示A類存儲(chǔ)器存取操作的情況下,擴(kuò)充字段的β字段的解釋基于基礎(chǔ)操作字段的內(nèi)容而變化;而在類和修飾符字段指示B類存儲(chǔ)器存取操作的情況下,擴(kuò)充字段的β字段的廣播字段657B的解釋基于基礎(chǔ)操作字段的內(nèi)容而變化。因而,基礎(chǔ)操作字段、修飾符字段、以及擴(kuò)充操作字段的組合允許指定更多種擴(kuò)充操作。
在A類和B類內(nèi)找到的各種指令模板在不同的情形下是有益的。在出于性能原因而需要?dú)w零-寫掩碼或較小向量長度時(shí),A類是有用的。例如,歸零允許在使用重命名時(shí)避免假依賴,因?yàn)椴辉傩枰斯w并目的地;作為另一示例,在用向量掩碼模擬較短向量大小時(shí),向量長度控制使存儲(chǔ)-加載轉(zhuǎn)發(fā)問題變得容易。B類在以下合乎需要的情況下是有用的:1)在使用取整模式控制的同時(shí)允許浮點(diǎn)異常(即,在SAE字段的內(nèi)容指示否);2)能夠使用上轉(zhuǎn)換、混合、交換、和/或下轉(zhuǎn)換;3)操作圖形數(shù)據(jù)類型。例如,上轉(zhuǎn)換、混合、交換、下轉(zhuǎn)換以及圖形數(shù)據(jù)類型減少了在與不同格式的源一起工作時(shí)所需的指令的數(shù)量;作為另一示例,允許異常的能力提供了與有向取整模式的完全I(xiàn)EEE順從。
示例性專用向量友好指令格式
圖7是示出根據(jù)本發(fā)明的實(shí)施例的示例性專用向量友好指令格式的框圖。圖7示出在其指定位置、大小、解釋和字段的次序、以及那些字段中的一些字段的值的意義上是專用的專用向量友好指令格式700。專用向量友好指令格式700可用于擴(kuò)展x86指令集,并且由此一些字段類似于在現(xiàn)有x86指令集及其擴(kuò)展(例如,AVX)中使用的那些字段或與之相同。該格式保持與具有擴(kuò)展的現(xiàn)有x86指令集的前綴編碼字段、實(shí)操作碼字節(jié)字段、MOD R/M字段、SIB字段、位移字段、以及立即數(shù)字段一致。示出來自圖6的字段,來自圖7的字段映射到來自圖7的字段。
應(yīng)當(dāng)理解,雖然出于說明的目的在通用向量友好指令格式600的上下文中,本發(fā)明的實(shí)施例參考專用向量友好指令格式700進(jìn)行了描述,但是本發(fā)明不限于專用向量友好指令格式700,聲明的地方除外。例如,通用向量友好指令格式600構(gòu)想各種字段的各種可能的大小,而專用向量友好指令格式700被示為具有特定大小的字段。作為具體示例,盡管在專用向量友好指令格式700中數(shù)據(jù)元素寬度字段664被示為一位字段,但是本發(fā)明不限于此(即,通用向量友好指令格式600構(gòu)想數(shù)據(jù)元素寬度字段664的其他大小)。
格式-圖7
通用向量友好指令格式600包括以下列出的按照圖7中示出的順序的如下字段。
EVEX前綴(字節(jié)0-3)
EVEX前綴702-以四字節(jié)形式進(jìn)行編碼。
格式字段640(EVEX字節(jié)0,位[7:0])-第一字節(jié)(EVEX字節(jié)0)是格式字段640,并且它包含0x62(在本發(fā)明的一個(gè)實(shí)施例中用于區(qū)分向量友好指令格式的唯一值)。
第二-第四字節(jié)(EVEX字節(jié)1-3)包括提供專用能力的大量位字段。
REX字段705(EVEX字節(jié)1,位[7-5])-由EVEX.R位字段(EVEX字節(jié)1,位[7]–R)、EVEX.X位字段(EVEX字節(jié)1,位[6]–X)以及(657BEX字節(jié)1,位[5]–B)組成。EVEX.R、EVEX.X和EVEX.B位字段提供與對應(yīng)VEX位字段相同的功能,并且使用(多個(gè))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’字段710-這是REX’字段710的第一部分,并且是用于對擴(kuò)展的32個(gè)寄存器集合的較高16個(gè)或較低16個(gè)寄存器進(jìn)行編碼的EVEX.R’位字段(EVEX字節(jié)1,位[4]–R’)。在本發(fā)明的一個(gè)實(shí)施例中,該位與以下指示的其他位一起以位顛倒的格式存儲(chǔ)以(在公知x86的32位模式下)與其實(shí)操作碼字節(jié)是62的BOUND指令進(jìn)行區(qū)分,但是在MOD R/M字段(在下文中描述)中不接受MOD字段中的值11;本發(fā)明的替換實(shí)施例不以顛倒的格式存儲(chǔ)該指示的位以及其他指示的位。值1用于對較低16個(gè)寄存器進(jìn)行編碼。換句話說,通過組合EVEX.R’、EVEX.R、以及來自其他字段的其他RRR來形成R’Rrrr。
操作碼映射字段715(EVEX字節(jié)1,位[3:0]–mmmm)–其內(nèi)容對隱含的領(lǐng)先操作碼字節(jié)(0F、0F 38、或0F 3)進(jìn)行編碼。
數(shù)據(jù)元素寬度字段664(EVEX字節(jié)2,位[7]–W)-由記號EVEX.W表示。EVEX.W用于定義數(shù)據(jù)類型(32位數(shù)據(jù)元素或64位數(shù)據(jù)元素)的粒度(大小)。
EVEX.vvvv 720(EVEX字節(jié)2,位[6:3]-vvvv)-EVEX.vvvv的作用可包括如下:1)EVEX.vvvv對以顛倒((多個(gè))1補(bǔ)碼)的形式指定的第一源寄存器操作數(shù)進(jìn)行編碼且對具有兩個(gè)或兩個(gè)以上源操作數(shù)的指令有效;2)EVEX.vvvv針對特定向量位移對以(多個(gè))1補(bǔ)碼的形式指定的目的地寄存器操作數(shù)進(jìn)行編碼;或者3)EVEX.vvvv不對任何操作數(shù)進(jìn)行編碼,保留該字段,并且應(yīng)當(dāng)包含1111b。由此,EVEX.vvvv字段720對以顛倒((多個(gè))1補(bǔ)碼)的形式存儲(chǔ)的第一源寄存器指定符的4個(gè)低階位進(jìn)行編碼。取決于該指令,額外不同的EVEX位字段用于將指定符大小擴(kuò)展到32個(gè)寄存器。
EVEX.U 668類字段(EVEX字節(jié)2,位[2]-U)-如果EVEX.U=0,則它指示A類或EVEX.U0,如果EVEX.U=1,則它指示B類或EVEX.U1。
前綴編碼字段725(EVEX字節(jié)2,位[1:0]-pp)-提供了用于基礎(chǔ)操作字段的附加位。除了對以EVEX前綴格式的傳統(tǒng)SSE指令提供支持以外,這也具有的壓縮SIMD前綴的益處(EVEX前綴只需要2位,而不是需要字節(jié)來表達(dá)SIMD前綴)。在一個(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)和EVEX格式的這些傳統(tǒng)指令,而無需修改)。雖然較新的指令可將EVEX前綴編碼字段的內(nèi)容直接作為操作碼擴(kuò)展,但是為了一致性,特定實(shí)施例以類似的方式擴(kuò)展,但允許由這些傳統(tǒng)SIMD前綴指定不同的含義。替換實(shí)施例可重新設(shè)計(jì)PLA以支持2位SIMD前綴編碼,并且由此不需要擴(kuò)展。
α字段652(EVEX字節(jié)3,位[7]–EH,也稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫掩碼控制、以及EVEX.N,還被示為具有α)-如先前所述的,該字段是上下文專用的。本文稍后提供了附加描述。
β字段654(EVEX字節(jié)3,位[6:4]-SSS,也稱為EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB,還被示為具有βββ)-如先前所述的,該字段是內(nèi)容專用的。本文稍后提供了附加描述。
REX’字段710-這是REX’字段1210的其余部分,并且是可用于對擴(kuò)展的32個(gè)寄存器集合的較高16個(gè)或較低16寄存器進(jìn)行編碼的EVEX.R’位字段(EVEX字節(jié)3,位[3]–V’)。該位以位反轉(zhuǎn)的格式存儲(chǔ)。值1用于對較低16個(gè)寄存器進(jìn)行編碼。換句話說,通過組合EVEX.V’、EVEX.vvvv來形成V’VVVV。
寫掩碼字段670(EVEX字節(jié)3,位[2:0]-kkk)-其內(nèi)容指定寫掩碼寄存器中的寄存器索引,如先前所述的。在本發(fā)明的一個(gè)實(shí)施例中,專用值EVEX.kkk=000具有隱含著沒有寫掩碼用于特定指令(這可以各種方式(包括使用硬連線到所有的寫掩碼或者旁路掩碼硬件的硬件)實(shí)現(xiàn))的特別行為。
實(shí)操作碼字段730(字節(jié)4)
這也被稱為操作碼字節(jié)。操作碼的一部分在該字段中指定。
MOD R/M字段740(字節(jié)5)
修飾符字段646(MODR/M.MOD,位[7-6]-MOD字段742)——如上所述,MOD字段742的內(nèi)容將存儲(chǔ)器存取和無存儲(chǔ)器存取操作區(qū)分開。這一字段將在本文稍后進(jìn)一步描述。
MODR/M.reg字段744、位[5-3]——ModR/M.reg字段的角色可被概括為兩種情況:ModR/M.reg對目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼;或者M(jìn)odR/M.reg被視為操作碼擴(kuò)展且不用于對任何指令操作數(shù)進(jìn)行編碼。
MODR/M.r/m字段746、位[2-0]——ModR/M.r/m字段的角色可包括以下:ModR/M.r/m對參考存儲(chǔ)器地址的指令操作數(shù)進(jìn)行編碼;或者M(jìn)odR/M.r/m對目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼。
范圍、索引、基礎(chǔ)(SIB)字節(jié)(字節(jié)6)
范圍字段660(SIB.SS,位[7-6]——如上所述,范圍字段660的內(nèi)容被用于存儲(chǔ)器地址生成。這一字段將在本文稍后進(jìn)一步描述。
SIB.xxx 754(位[5-3])和SIB.bbb 756(位[2-0])——先前已經(jīng)針對寄存器索引Xxxx和Bbbb參考了這些字段的內(nèi)容。
移位字節(jié)(字節(jié)7或字節(jié)7-10)
位移字段662A(字節(jié)7-10)-當(dāng)MOD字段742包含10時(shí),字節(jié)7-10是位移字段662A,并且它與傳統(tǒng)32位位移(disp32)一樣地工作,并且以字節(jié)粒度工作。
位移因數(shù)字段662B(字節(jié)7)-當(dāng)MOD字段742包含01時(shí),字節(jié)7是位移因數(shù)字段662B。該字段的位置與傳統(tǒng)x86指令集8位位移(disp8)的位置相同,它以字節(jié)粒度工作。由于disp8是符號擴(kuò)展的,因此它可只在-128和127字節(jié)偏移量之間尋址,在64字節(jié)的高速緩存線的方面,disp8使用可被設(shè)為僅四個(gè)真正有用的值-128、-64、0和64的8位;由于常常需要更大的范圍,所以使用disp32;然而,disp32需要4個(gè)字節(jié)。與disp8和disp32對比,位移因數(shù)字段662B是disp8的重新解釋;當(dāng)使用位移因數(shù)字段662B時(shí),實(shí)際位移通過位移因數(shù)字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)存取的大小(N)確定。該類型的位移被稱為disp8*N。這減小了平均指令長度(用于位移但具有大得多的范圍的單一字節(jié))。這種壓縮位移基于有效位移是存儲(chǔ)器存取的粒度的倍數(shù)的假設(shè),并且由此地址偏移量的冗余低階位不需要被編碼。換句話說,位移因數(shù)字段662B替代傳統(tǒng)x86指令集8位位移。由此,位移因數(shù)字段662B以與x86指令集8位位移相同的方式(因此在ModRM/SIB編碼規(guī)則中沒有變化)進(jìn)行編碼,唯一的不同在于,disp8超載至disp8*N。換句話說,在編碼規(guī)則或編碼長度中沒有變化,而僅在通過硬件對位移值的解釋中有變化(這需要使位移縮放存儲(chǔ)器操作數(shù)的大小以獲得字節(jié)式地址偏移量)。
立即數(shù)
立即數(shù)字段672如先前所述地操作。
示例性寄存器體系架構(gòu)—圖8
圖8是根據(jù)本發(fā)明的一個(gè)實(shí)施例的寄存器體系結(jié)構(gòu)800的框圖。寄存器體系結(jié)構(gòu)的寄存器文件和寄存器列出如下:
向量寄存器文件810—在所示出的實(shí)施例中,有32個(gè)812位寬的向量寄存器;這些寄存器被引用為zmm0到zmm31。較低的16zmm寄存器的較低階656個(gè)位覆蓋在寄存器ymm0-16上。較低的16zmm寄存器的較低階128個(gè)位(ymm寄存器的較低階128個(gè)位)覆蓋在寄存器xmm0-15上。專用向量友好指令格式700對這些覆蓋的寄存器文件操作,如在以下表格中所示的。
換句話說,向量長度字段659B在最大長度與一個(gè)或多個(gè)其他較短長度之間進(jìn)行選擇,其中每一這種較短長度是前一長度的一半,并且沒有向量長度字段659B的指令模版對最大向量長度操作。此外,在一個(gè)實(shí)施例中,專用向量友好指令格式700的B類指令模版對打包或標(biāo)量單/雙精度浮點(diǎn)數(shù)據(jù)以及打包或標(biāo)量整數(shù)數(shù)據(jù)操作。標(biāo)量操作是在zmm/ymm/xmm寄存器中的最低階數(shù)據(jù)元素位置上執(zhí)行的操作;取決于本實(shí)施例,較高階數(shù)據(jù)元素位置保持與在指令之前相同或者調(diào)零。
寫掩碼寄存器815-在所示的實(shí)施例中,存在8個(gè)寫掩碼寄存器(k0至k7),每一寫掩碼寄存器的大小是64位。如先前所述的,在本發(fā)明的一個(gè)實(shí)施例中,向量掩碼寄存器k0無法用作寫掩碼;當(dāng)正??芍甘緆0的編碼用作寫掩碼時(shí),它選擇硬連線的寫掩碼0xFFFF,從而有效地停用該指令的寫掩碼。
多媒體擴(kuò)展控制狀態(tài)寄存器(MXCSR)820-在所示的實(shí)施例中,這個(gè)32位寄存器提供在浮點(diǎn)操作中使用的狀態(tài)和控制位。
通用寄存器825——在所示出的實(shí)施例中,有十六個(gè)64位通用寄存器,這些寄存器與現(xiàn)有的x86尋址模式來尋址存儲(chǔ)器操作數(shù)一起使用。這些寄存器通過名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP,以及R8到R15來引用。
擴(kuò)展標(biāo)志(EFLAGS)寄存器—在所示實(shí)施例中,使用這個(gè)32位寄存器來記錄很多指令的結(jié)果。
浮點(diǎn)控制字(FCW)寄存器835和浮點(diǎn)狀態(tài)字(FSW)寄存器840—在所示實(shí)施例中,這些寄存器由x87指令集擴(kuò)展使用來在FCW的情況下設(shè)置輪模式、異常掩模和標(biāo)志,且在FSW的情況下保持對于例外的追蹤。
標(biāo)量浮點(diǎn)堆棧寄存器文件(x87堆棧)845,在其上面混疊MMX打包整數(shù)平坦寄存器文件850——在所示出的實(shí)施例中,x87堆棧是用于使用x87指令集擴(kuò)展來對32/64/80位浮點(diǎn)數(shù)據(jù)執(zhí)行標(biāo)量浮點(diǎn)運(yùn)算的八元素堆棧;而使用MMX寄存器來對64位打包整數(shù)數(shù)據(jù)執(zhí)行操作,以及為在MMX和XMM寄存器之間執(zhí)行的某些操作保存操作數(shù)。
段寄存器855-在所示實(shí)施例中,存在六個(gè)16位寄存器,用于存儲(chǔ)用于分段的地址生成的數(shù)據(jù)。
RIP寄存器865-在所示實(shí)施例中,這個(gè)64為寄存器存儲(chǔ)指令指針。
本發(fā)明的替換實(shí)施例可以使用較寬的或較窄的寄存器。另外,本發(fā)明的替換實(shí)施例可以使用多一些,少一些或不同的寄存器文件和寄存器。
示例性有序處理器體系結(jié)構(gòu)—圖9A-9B
圖9A-B示出示例性有序處理器體系結(jié)構(gòu)的框圖。這些示例性實(shí)施例是圍繞由寬向量處理器(VPU)擴(kuò)充的有序CPU核的多個(gè)實(shí)例而設(shè)計(jì)的。核通過高帶寬的互連網(wǎng)絡(luò)與某些固定的功能邏輯、存儲(chǔ)器I/O接口和其它必要的I/O邏輯通信,這依賴于e13t應(yīng)用。例如,這個(gè)實(shí)施例的作為獨(dú)立GPU的實(shí)現(xiàn)將一般包括PCIe總線。
圖9A是根據(jù)本發(fā)明的實(shí)施例的連接到管芯上互聯(lián)網(wǎng)絡(luò)902且具有二級(L2)高速緩存的本地子集904的單個(gè)CPU核的框圖。指令解碼器900支持帶有包括特定向量指令格式700的擴(kuò)展的x86指令集。盡管在本發(fā)明的一個(gè)實(shí)施例中(為了簡化設(shè)計(jì)),標(biāo)量單元908和向量單元910使用分開的寄存器集合(分別為標(biāo)量寄存器912和向量寄存器914),并且在這些寄存器之間轉(zhuǎn)移的數(shù)據(jù)被寫入到存儲(chǔ)器并隨后從一級(L1)高速緩存906讀回,但是可選實(shí)施例可以使用不同的方法(例如使用單個(gè)寄存器集合或包括允許數(shù)據(jù)在這兩個(gè)寄存器文件之間傳輸而無需被寫入和讀回的通信路徑)。
L1高速緩存906允許對標(biāo)量和向量單元中的高速緩存存儲(chǔ)器的低等待時(shí)間訪問。與向量友好指令格式中的加載操作指令一起,這意味著L1緩存906可被某種程度上類似擴(kuò)展的寄存器文件對待。這顯著提高了許多算法的性能,尤其是使用驅(qū)逐提示字段652B。
L2高速緩存的本地子集904是全局L2高速緩存的一部分,該全局L2高速緩存被劃分成多個(gè)分開的本地子集,即每個(gè)CPU核一個(gè)本地子集。每個(gè)CPU具有到其自己的L2高速緩存904的本地子集的直接訪問路徑。被CPU核讀出的數(shù)據(jù)被存儲(chǔ)在其L2高速緩存子集904中,并且可以被快速訪問,該訪問與其他CPU核訪問其自己的本地L2高速緩存子集并行。被CPU核寫入的數(shù)據(jù)被存儲(chǔ)在其子集的L2高速緩存子集904中,并在必要的情況下從其它子集清除。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的一致性。
圖9B是根據(jù)本發(fā)明的各實(shí)施例的圖9A中的CPU核的一部分的展開圖。圖9B包括作為L1高速緩存904的L1數(shù)據(jù)高速緩存906A部分,以及關(guān)于向量單元910和向量寄存器914的更多細(xì)節(jié)。具體地說,向量單元910是16寬向量處理單元(VPU)(見16寬ALU 928),該單元執(zhí)行整型、單精度浮點(diǎn)以及雙精度浮點(diǎn)指令。該VPU通過混合單元920支持對寄存器輸入的混合、通過數(shù)值轉(zhuǎn)換單元922A-B支持?jǐn)?shù)值轉(zhuǎn)換,并通過復(fù)制單元924支持對存儲(chǔ)器輸入的復(fù)制。寫掩碼寄存器926允許斷言所得的向量寫入。
可以各種方式攪和寄存器數(shù)據(jù),如,來支持矩陣乘法??蓪碜源鎯?chǔ)器的數(shù)據(jù)跨VPU通道被復(fù)制。這是圖形和非圖形并行數(shù)據(jù)處理中的通用操作,這顯著增加了高速緩存效率。
環(huán)形網(wǎng)絡(luò)是雙向的,以允許諸如CPU核、L2高速緩存和其它邏輯塊之類的代理在芯片內(nèi)彼此通信。每個(gè)環(huán)形數(shù)據(jù)路徑為每個(gè)方向812位寬。
示例性無序體系結(jié)構(gòu)—圖10
圖10是示出根據(jù)本發(fā)明的實(shí)施例的示例性無序體系結(jié)構(gòu)的框圖并且可被看做諸如上文在圖1中討論的流水線等流水線的更具體描述。特定地,圖10示出公知的示例性無序架構(gòu),已經(jīng)被修改為結(jié)合了向量友好指令格式以及其實(shí)行。在圖10中,箭頭指示兩個(gè)或更多個(gè)單元之間的耦合,且箭頭的方向指示這些單元之間的數(shù)據(jù)流的方向。圖10包括耦合到執(zhí)行引擎單元1010和存儲(chǔ)器單元1015的前端單元1005;執(zhí)行引擎單元1010還耦合到存儲(chǔ)器單元1015。
前端單元1005包括耦合到二級(L2)分支預(yù)測單元1022的一級(L1)分支預(yù)測單元1020。L1和L2分支預(yù)測單元1020和1022耦合到L1指令高速緩存單元1024。L1指令高速緩存單元1024耦合至指令翻譯后備緩沖器(TLB)1026,高緩沖器1026進(jìn)一步耦合至指令獲取和預(yù)解碼單元1028。指令獲取和預(yù)解碼單元1028耦合至指令隊(duì)列單元1030,該單元1030進(jìn)一步耦合至解碼單元1032。解碼單元1032包括復(fù)雜解碼器單元1034和三個(gè)簡單解碼器單元1036、1038和1040。解碼單元1032包括微代碼ROM單元1042。在解碼級段中,解碼單元1032可如上所述地操作。L1指令高速緩存單元1024還耦合到存儲(chǔ)器單元1015中的L2高速緩存單元1048。指令TLB單元1026還耦合到存儲(chǔ)器單元1015中的二級TLB單元1046。解碼單元1032、微代碼ROM單元1042、和環(huán)流檢測器(LSD)單元1044各自耦合到執(zhí)行引擎單元1010中的重命名/分配器單元1056。
執(zhí)行引擎單元1010包括耦合到退役單元1074和統(tǒng)一調(diào)度器單元1058的重命名/分配器單元1056。退役單元1074還耦合到執(zhí)行單元1060且包括記錄器緩沖器單元1078。統(tǒng)一調(diào)度器單元1058還耦合到物理寄存器文件單元1076,物理寄存器文件單元1276耦合到執(zhí)行單元1060。物理寄存器文件單元1076包括向量寄存器單元1077A、寫掩碼寄存器單元1077B、和標(biāo)量寄存器單元1077C;這些寄存器單元可提供向量寄存器810、向量掩碼寄存器815、以及通用目的寄存器825;且物理寄存器文件單元1076可包括未示出的附加寄存器文件(如,混疊在MMX打包整數(shù)平面寄存器文件850上的標(biāo)量浮點(diǎn)棧寄存器文件845)。執(zhí)行單元1060包括三個(gè)混合標(biāo)量和向量單元單元1062、1064和1072;負(fù)載單元1066;存儲(chǔ)地址單元1068;存儲(chǔ)數(shù)據(jù)單元1070。負(fù)載單元1066、存儲(chǔ)地址單元1068和存儲(chǔ)數(shù)據(jù)單元1070各自進(jìn)一步耦合到存儲(chǔ)器單元1015中的TLB單元1052。
存儲(chǔ)器單元1015包括耦合到數(shù)據(jù)TLB單元1052的二級TLB單元1046。數(shù)據(jù)TLB單元1052耦合到L1數(shù)據(jù)高速緩存單元1054。L1數(shù)據(jù)高速緩存單元1054還耦合到L2高速緩存單元1048。在一些實(shí)施例中,L2高速緩存單元1048還耦合到存儲(chǔ)器單元1015內(nèi)部和/或外部的L3和更高級高速緩存單元1050。
以示例的方式,示例性無序體系結(jié)構(gòu)可如下實(shí)現(xiàn)過程流水線:1)指令獲取和預(yù)解碼單元1028執(zhí)行獲取和長度解碼級;2)解碼單元1032執(zhí)行解碼級;3)重命名/分配器單元1056執(zhí)行分配級和重命名級;4)統(tǒng)一調(diào)度器1058執(zhí)行調(diào)度級;5)物理寄存器組單元1076、重排序緩沖器單元1078、和存儲(chǔ)器單元1015執(zhí)行寄存器讀取/存儲(chǔ)器讀??;執(zhí)行單元1060執(zhí)行(perform)執(zhí)行(execute)/數(shù)據(jù)轉(zhuǎn)換級;6)存儲(chǔ)器單元1015和重排序緩沖器單元1078執(zhí)行寫回/存儲(chǔ)器寫入級1960;7)引退單元1074執(zhí)行ROB讀取級;8)各單元可牽涉到異常處理級;以及9)引退單元1074和物理寄存器組單元1076執(zhí)行提交級。
示例性單核和多核處理器——圖15
圖15是根據(jù)本發(fā)明的實(shí)施例的單核處理器和多核處理器1500的框圖,具有集成的存儲(chǔ)器控制器和圖形器件。圖15的實(shí)線框示出了處理器1500,處理器1500具有單個(gè)核1502A、系統(tǒng)代理1510、一組一個(gè)或多個(gè)總線控制器單元1516,而可選附加的虛線框示出了替換處理器1500,其具有多個(gè)核1502A-N、位于系統(tǒng)代理單元1510中的一組一個(gè)或多個(gè)集成存儲(chǔ)器控制器單元1514以及集成圖形邏輯1508。
存儲(chǔ)器層次結(jié)構(gòu)包括在各核內(nèi)的一個(gè)或多個(gè)級別的高速緩存、一個(gè)或多個(gè)共享高速緩存單元1506的集合、以及耦合至集成存儲(chǔ)器控制器單元1514的集合的外部存儲(chǔ)器(未示出)。該共享高速緩存單元1506的集合可以包括一個(gè)或多個(gè)中間級高速緩存,諸如二級(L2)、三級(L3)、四級(L4)或其他級別的高速緩存、末級高速緩存(LLC)、和/或其組合。雖然在一個(gè)實(shí)施例中基于環(huán)形的互連單元1512將集成圖形邏輯1508、該組共享高速緩存單元1506和系統(tǒng)代理單元1510進(jìn)行互連,但替代的實(shí)施例也使用任何數(shù)量的公知技術(shù)來互連這些單元。
在某些實(shí)施例中,核1502A-N中的一個(gè)或多個(gè)核能夠多線程化。系統(tǒng)代理1510包括協(xié)調(diào)和操作核1502A-N的那些組件。系統(tǒng)代理單元1510可包括例如功率控制單元(PCU)和顯示單元。PCU可以是或包括調(diào)整核1502A-N和集成圖形邏輯1508的功率狀態(tài)所需的邏輯和組件。顯示單元用于驅(qū)動(dòng)一個(gè)或多個(gè)外部連接的顯示器。
核1502A-N可以是在體系結(jié)構(gòu)和/或指令集上同構(gòu)的或異構(gòu)的。例如,核1502A-N中的一些可以是有序的(例如,如在圖9A和9B中示出的),而其他是無序的(例如,如在圖10中示出的)。作為另一示例,核1502A-N中的兩個(gè)或多個(gè)核能夠執(zhí)行相同的指令集,而其他核只能夠執(zhí)行該指令集中的一個(gè)子集或執(zhí)行不同的指令集。這些核中的至少一個(gè)能夠執(zhí)行本文描述的向量友好指令格式。
處理器可以是通用功能處理器,諸如酷睿(CoreTM)i3、i5、i7、2Duo和Quad、至強(qiáng)(XeonTM)、或安騰(ItaniumTM)處理器,這些均可以從加利福尼亞圣克拉拉市的英特爾公司獲得?;蛘?,處理器可以來自另一公司。處理器可以是專用處理器,諸如,例如,網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、協(xié)處理器、嵌入式處理器、或類似物。該處理器可以被實(shí)現(xiàn)在一個(gè)或多個(gè)芯片上。處理器1500可以是一個(gè)或多個(gè)襯底的一部分,和/或可以使用諸如例如BiCMOS、CMOS或NMOS等的多個(gè)加工技術(shù)中的任何一個(gè)技術(shù)將其實(shí)現(xiàn)在一個(gè)或多個(gè)襯底上。
示例性計(jì)算機(jī)系統(tǒng)和處理器-圖11-13
圖11-13是適于包括處理器1500的示例性系統(tǒng),圖88是可包括一個(gè)或多個(gè)核1502的示例性芯片上系統(tǒng)(SoC)。本領(lǐng)域已知的對膝上型設(shè)備、臺式機(jī)、手持PC、個(gè)人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機(jī)、嵌入式處理器、數(shù)字信號處理器(DSP)、圖形設(shè)備、視頻游戲設(shè)備、機(jī)頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設(shè)備以及各種其他電子設(shè)備的其他系統(tǒng)設(shè)計(jì)和配置也是合適的。一般來說,能夠納入本文中所公開的處理器和/或其它執(zhí)行邏輯的大量系統(tǒng)和電子設(shè)備一般都是合適的。
現(xiàn)在參考圖11,所示出的是根據(jù)本發(fā)明實(shí)施例的系統(tǒng)1100的框圖。系統(tǒng)1100可包括耦合至圖形存儲(chǔ)器控制器中樞(GMCH)1110的一個(gè)或多個(gè)處理器1115、1120。附加處理器1115的任選性質(zhì)用虛線表示在圖11中。
每一處理器1110、1115可以是處理器1500的某種版本。然而,應(yīng)該注意,集成圖形邏輯和集成存儲(chǔ)器控制單元未必存在于處理器1110、1115中。.
圖11示出GMCH 1120可耦合至存儲(chǔ)器1140,該存儲(chǔ)器1140可以是例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)。對于至少一個(gè)實(shí)施例,DRAM可以與非易失性緩存相關(guān)聯(lián)。
GMCH 1120可以是芯片組或芯片組的一部分。GMCH 1120可以與處理器(多個(gè))1110、1115進(jìn)行通信,并控制處理器(多個(gè))1110、1115與存儲(chǔ)器1140之間的交互。GMCH 1120還可用作處理器(多個(gè))1110、1115和系統(tǒng)1100的其它元件之間的加速總線接口。對于至少一個(gè)實(shí)施例,GMCH 1120經(jīng)由諸如前端總線(FSB)1195之類的多站總線與處理器(多個(gè))1110、1115進(jìn)行通信。
此外,GMCH 1120耦合至顯示器1145(諸如平板顯示器)。GMCH 1120可包括集成圖形加速器。GMCH 1120還耦合至輸入/輸出(I/O)控制器中樞(ICH)1150,該輸入/輸出(I/O)控制器中樞(ICH)1150可用于將各種外圍設(shè)備耦合至系統(tǒng)1100。在圖11的實(shí)施例中作為示例示出了外部圖形設(shè)備1160以及另一外圍設(shè)備1170,該外部圖形設(shè)備1160可以是耦合至ICH 1150的分立圖形設(shè)備。
可選地,系統(tǒng)1100中還可存在附加或不同的處理器。例如,附加處理器(多個(gè))1115可包括與處理器1110相同的附加處理器(多個(gè))、與處理器1110異類或不對稱的附加處理器(多個(gè))、加速器(諸如圖形加速器或數(shù)字信號處理(DSP)單元)、現(xiàn)場可編程門陣列或任何其它處理器。按照包括體系結(jié)構(gòu)、微體系結(jié)構(gòu)、熱、功耗特征等等優(yōu)點(diǎn)的度量譜,物理資源1110、1115之間存在各種差別。這些差別會(huì)有效顯示為處理元件1110、1115之間的不對稱性和異類性。對于至少一個(gè)實(shí)施例,各種處理元件1110、1115可駐留在同一管芯封裝中。
現(xiàn)在參照圖12,所示出的是根據(jù)本發(fā)明一實(shí)施例的第二系統(tǒng)1200的框圖。如圖12所示,多處理器系統(tǒng)1200是點(diǎn)對點(diǎn)互連系統(tǒng),并包括經(jīng)由點(diǎn)對點(diǎn)互連1250耦合的第一處理器1270和第二處理器1280。如圖12所示,處理器1270和1280中的每個(gè)可以是處理器1500的某一版本。
可選地,處理器1270、1280中的一個(gè)或多個(gè)可以是除處理器之外的元件,諸如加速器或現(xiàn)場可編程門陣列。
雖然僅以兩個(gè)處理器1270、1280來示出,但應(yīng)理解本發(fā)明的范圍不限于此。在其它實(shí)施例中,在給定處理器中可存在一個(gè)或多個(gè)附加處理元件。
處理器1270還可包括集成存儲(chǔ)器控制器中樞(IMC)1272和點(diǎn)對點(diǎn)(P-P)接口1276和1278。類似地,第二處理器1280包括IMC 1282和P-P接口1286和1288。處理器1270、1280可以經(jīng)由使用點(diǎn)對點(diǎn)(PtP)接口電路1278、1288的點(diǎn)對點(diǎn)(PtP)接口1250來交換數(shù)據(jù)。如圖12所示,IMC 1272和1282將處理器耦合到相應(yīng)的存儲(chǔ)器,即存儲(chǔ)器1242和存儲(chǔ)器1244,這些存儲(chǔ)器可以是本地附連到相應(yīng)處理器的主存儲(chǔ)器部分。
處理器1270、1280可各自經(jīng)由使用點(diǎn)對點(diǎn)接口電路1276、1294、1286、1298的各個(gè)P-P接口1252、1254與芯片組1290交換數(shù)據(jù)。芯片組1290還可經(jīng)由高性能圖形接口1239與高性能圖形電路1238交換數(shù)據(jù)。
共享高速緩存(未示出)可以被包括在任一處理器之內(nèi)或被包括兩個(gè)處理器外部但仍經(jīng)由P-P互連與這些處理器連接,從而如果將某處理器置于低功率模式時(shí),可將任一處理器或兩個(gè)處理器的本地高速緩存信息存儲(chǔ)在該共享高速緩存中。
芯片組1290可經(jīng)由接口1296耦合至第一總線1216。在一個(gè)實(shí)施例中,第一總線1216可以是外圍部件互連(PCI)總線,或諸如PCI Express總線或其它第三代I/O互連總線之類的總線,但本發(fā)明的范圍并不受此限制。
如圖12所示,各種I/O設(shè)備1214可以連同總線橋1216耦合到第一總線1218,總線橋1216將第一總線1220耦合至第二總線1220。在一個(gè)實(shí)施例中,第二總線1220可以是低引腳數(shù)(LPC)總線。在一個(gè)實(shí)施例中,各設(shè)備可耦合到第二總線1220,包括例如鍵盤和/或鼠標(biāo)1222、通信設(shè)備1226、以及可包括代碼1228的諸如盤驅(qū)動(dòng)器或其它海量存儲(chǔ)設(shè)備的數(shù)據(jù)存儲(chǔ)單元1230。進(jìn)一步地,音頻I/O 1224可以耦合到第二總線1220。注意,其它架構(gòu)是可能的。例如,取代圖12的點(diǎn)對點(diǎn)架構(gòu),系統(tǒng)可以實(shí)現(xiàn)多站總線或其它這類架構(gòu)。
現(xiàn)在參照圖13,所示出的是根據(jù)本發(fā)明實(shí)施例的第三系統(tǒng)1300的框圖。圖12和圖13中的相同部件用相同附圖標(biāo)記表示,并從圖13中省去了圖12中的某些方面,以避免使圖13的其它方面變得難以理解。
圖13示出處理元件1270、1280可分別包括集成存儲(chǔ)器和I/O控制邏輯(揅L)_1272和1282。對于至少一個(gè)實(shí)施例,CL 1272、1282可包括諸如以上結(jié)合圖8、9和12所描述的存儲(chǔ)器控制器中樞邏輯(IMC)。此外。CL 1272、1282還可包括I/O控制邏輯。圖13不僅示出耦合至CL 1272、1282的存儲(chǔ)器1242、1244,而且還示出同樣耦合至控制邏輯1272、1282的I/O設(shè)備1314。傳統(tǒng)I/O設(shè)備1315被耦合至芯片組1290。
現(xiàn)在參照圖14,所示出的是根據(jù)本發(fā)明實(shí)施例的SoC 1400的框圖。在圖15中,相似的部件具有同樣的附圖標(biāo)記。另外,虛線框是更先進(jìn)的SoC的可選特征。在圖14中,互連單元(多個(gè))1402被耦合至:應(yīng)用處理器1410,包括一個(gè)或多個(gè)核1502A-N的集合和共享高速緩存單元(多個(gè))1506;系統(tǒng)代理單元1510;總線控制器單元(多個(gè))1516;集成存儲(chǔ)器控制器單元(多個(gè))1514;一個(gè)或多個(gè)媒體處理器1420的集合,可包括集成圖形邏輯1508、用于提供靜態(tài)和/或視頻照相機(jī)功能的圖像處理器1424、用于提供硬件音頻加速的音頻處理器1426、以及用于提供視頻編碼/解碼加速的視頻處理器1428;靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)單元1430;直接存儲(chǔ)器存取(DMA)單元1432;以及顯示單元1440,用于耦合至一個(gè)或多個(gè)外部顯示器。
本文公開的機(jī)制的各實(shí)施例可以被實(shí)現(xiàn)在硬件、軟件、固件或這些實(shí)現(xiàn)方法的組合中。本發(fā)明的實(shí)施例可實(shí)現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計(jì)算機(jī)程序或程序代碼,該可編程系統(tǒng)包括至少一個(gè)處理器、存儲(chǔ)系統(tǒng)(包括易失性和非易失性存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備以及至少一個(gè)輸出設(shè)備。
可將程序代碼應(yīng)用至輸入數(shù)據(jù)以執(zhí)行本文描述的功能并產(chǎn)生輸出信息。輸出信息可以按已知方式被應(yīng)用于一個(gè)或多個(gè)輸出設(shè)備。為了本申請的目的,處理系統(tǒng)包括具有諸如例如數(shù)字信號處理器(DSP)、微控制器、專用集成電路(ASIC)或微處理器之類的處理器的任何系統(tǒng)。
程序代碼可以用高級程序化語言或面向?qū)ο蟮木幊陶Z言來實(shí)現(xiàn),以便與處理系統(tǒng)通信。程序代碼也可以在需要的情況下用匯編語言或機(jī)器語言來實(shí)現(xiàn)。事實(shí)上,本文中描述的機(jī)制不僅限于任何特定編程語言的范圍。在任一情形下,語言可以是編譯語言或解釋語言。
至少一個(gè)實(shí)施例的一個(gè)或多個(gè)方面可以由存儲(chǔ)在機(jī)器可讀介質(zhì)上的表征性指令來實(shí)現(xiàn),該指令表示處理器中的各種邏輯,該指令在被機(jī)器讀取時(shí)使得該機(jī)器制作用于執(zhí)行本文所述的技術(shù)的邏輯。被稱為“IP核”的這些表示可以被存儲(chǔ)在有形的機(jī)器可讀介質(zhì)上,并被提供給多個(gè)客戶或生產(chǎn)設(shè)施以加載到實(shí)際制造該邏輯或處理器的制造機(jī)器中。
此類機(jī)器可讀存儲(chǔ)介質(zhì)可包括但不限于通過機(jī)器或設(shè)備制造或形成的非易失性的粒子有形排列,包括存儲(chǔ)介質(zhì),諸如:硬盤;包括軟盤、光盤、壓縮盤只讀存儲(chǔ)器(CD-ROM)、可重寫壓縮盤(CD-RW)以及磁光盤的任何其它類型的盤;諸如只讀存儲(chǔ)器(ROM)之類的半導(dǎo)體器件;諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)之類的隨機(jī)存取存儲(chǔ)器(RAM);可擦除可編程只讀存儲(chǔ)器(EPROM);閃存;電可擦除可編程只讀存儲(chǔ)器(EEPROM);磁卡或光卡;或適于存儲(chǔ)電子指令的任何其它類型的介質(zhì)。
因此,本發(fā)明的各實(shí)施例還包括非瞬態(tài)、有形機(jī)器可讀介質(zhì),該介質(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)換器可以在處理器上、在處理器外、或者部分在處理器上部分在處理器外。
圖16是根據(jù)本發(fā)明的實(shí)施例的對比使用軟件指令變換器將源指令集中的二進(jìn)制指令變換成目標(biāo)指令集中的二進(jìn)制指令的框圖。在所示的實(shí)施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但作為替代該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來實(shí)現(xiàn)。圖16示出可以使用x86編譯器1604來編譯高級語言1602的程序,以便生成可以由具有至少一個(gè)x86指令集核1616的處理器本地執(zhí)行的x86二進(jìn)制代碼1606(假設(shè)指令中的一些是以向量友好指令格式編譯)。具有至少一個(gè)x86指令集核1616的處理器表示任何處理器,該處理器能夠通過兼容地執(zhí)行或以其它方式處理(1)英特爾x86指令集核的指令集的大部分或(2)旨在具有至少一個(gè)x86指令集核的英特爾處理器上運(yùn)行的應(yīng)用或其它軟件的目標(biāo)代碼版本來執(zhí)行與具有至少一個(gè)x86指令集核的英特爾處理器基本相同的功能,以實(shí)現(xiàn)與具有至少一個(gè)x86指令集核的英特爾處理器基本相同的結(jié)果。x86編譯器1604表示用于生成x86二進(jìn)制代碼1606(例如,目標(biāo)代碼)的編譯器,該二進(jìn)制代碼1616可通過或不通過附加的鏈接處理在具有至少一個(gè)x86指令集核1716的處理器上執(zhí)行。類似地,圖90示出用高級語言1602的程序可以使用替代的指令集編譯器1608來編譯,以生成可以由不具有至少一個(gè)x86指令集核1610的處理器(例如具有執(zhí)行加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集,和/或執(zhí)行加利福尼亞州桑尼維爾市的ARM控股公司的ARM指令集的核的處理器)原生執(zhí)行的替代指令集二進(jìn)制代碼1614。指令轉(zhuǎn)換器1612被用來將x86二進(jìn)制代碼1606轉(zhuǎn)換成可以由不具有x86指令集核1614的處理器原生執(zhí)行的代碼。該轉(zhuǎn)換后的代碼不大可能與替換性指令集二進(jìn)制代碼1610相同,因?yàn)槟軌蜻@樣做的指令轉(zhuǎn)換器難以制造;然而,轉(zhuǎn)換后的代碼將完成一般操作并由來自替代指令集的指令構(gòu)成。因此,指令轉(zhuǎn)換器1612通過仿真、模擬或任何其它過程來表示允許不具有x86指令集處理器或核的處理器或其它電子設(shè)備執(zhí)行x86二進(jìn)制代碼1606的軟件、固件、硬件或其組合。
本文公開的向量友好指令格式的指令的某些操作可由硬件組件執(zhí)行,且可體現(xiàn)在機(jī)器可執(zhí)行指令中,該指令用于導(dǎo)致或至少致使電路或其它硬件組件以執(zhí)行該操作的指令編程。電路可包括通用或?qū)S锰幚砥?、或邏輯電路,這里僅給出幾個(gè)示例。這些操作還可任選地由硬件和軟件的組合執(zhí)行。執(zhí)行邏輯和/或處理器可包括響應(yīng)于從機(jī)器指令導(dǎo)出的機(jī)器指令或一個(gè)或多個(gè)控制信號以存儲(chǔ)指令指定的結(jié)果操作數(shù)的專用或特定電路或其它邏輯。例如,本文公開的指令的實(shí)施例可在圖11-16的一個(gè)或多個(gè)系統(tǒng)中執(zhí)行,且向量友好指令格式的指令的實(shí)施例可存儲(chǔ)在將在系統(tǒng)中執(zhí)行的程序代碼中。另外這些附圖的處理元件可利用本文詳細(xì)描述的詳細(xì)描述的流水線和/或架構(gòu)(例如有序和無序架構(gòu))之一。例如,有序架構(gòu)的解碼單元可解碼指令、將經(jīng)解碼的指令傳送到向量或標(biāo)量單元等。
上述描述旨在說明本發(fā)明的優(yōu)選實(shí)施例。根據(jù)上述討論,還應(yīng)當(dāng)顯而易見的是,在發(fā)展迅速且進(jìn)一步的進(jìn)展難以預(yù)見的此技術(shù)領(lǐng)域中,本領(lǐng)域技術(shù)人員可在安排和細(xì)節(jié)上對本發(fā)明進(jìn)行修改,而不背離落在所附權(quán)利要求及其等價(jià)方案的范圍內(nèi)的本發(fā)明的原理。例如,方法的一個(gè)或多個(gè)操作可組合或進(jìn)一步分開。
可選實(shí)施例
盡管已經(jīng)描述了將本地執(zhí)行向量友好指令格式的實(shí)施例,但本發(fā)明的可選實(shí)施例可通過運(yùn)行在執(zhí)行不同指令集的處理器(例如,執(zhí)行美國加利福亞州桑尼維爾的MIPS技術(shù)公司的MIPS指令集的處理器、執(zhí)行加利福亞州桑尼維爾的ARM控股公司的ARM指令集的處理器)上的仿真層來執(zhí)行向量友好指令格式。同樣,盡管附圖中的流程圖示出本發(fā)明的某些實(shí)施例的特定操作順序,按應(yīng)理解該順序是示例性的(例如,可選實(shí)施例可按不同順序執(zhí)行操作、組合某些操作、使某些操作重疊等)。
在以上描述中,為解釋起見,闡明了眾多具體細(xì)節(jié)以提供對本發(fā)明的實(shí)施例的透徹理解。然而,將對本領(lǐng)域技術(shù)人員明顯的是,沒有這些具體細(xì)節(jié)中的一些也可實(shí)踐一個(gè)或多個(gè)其他實(shí)施例。提供所描述的具體實(shí)施例不是為了限制本發(fā)明而是為了說明本發(fā)明的實(shí)施例。本發(fā)明的范圍不是由所提供的具體示例確定,而是僅由所附權(quán)利要求確定。