亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

在不同的粒度等級下廣播數(shù)據(jù)值的指令執(zhí)行單元的制作方法

文檔序號:6485359閱讀:354來源:國知局
在不同的粒度等級下廣播數(shù)據(jù)值的指令執(zhí)行單元的制作方法
【專利摘要】描述了包括用于執(zhí)行第一指令和第二指令的執(zhí)行單元的裝置。該執(zhí)行單元包括輸入寄存器空間,用于存儲(chǔ)當(dāng)執(zhí)行第一指令時(shí)將被復(fù)制的第一數(shù)據(jù)結(jié)構(gòu),并用于存儲(chǔ)當(dāng)執(zhí)行第二指令時(shí)將被復(fù)制的第二數(shù)據(jù)結(jié)構(gòu)。第一和第二數(shù)據(jù)結(jié)構(gòu)都是打包數(shù)據(jù)結(jié)構(gòu)。第一打包數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值是第二打包數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值的兩倍大小。第一數(shù)據(jù)結(jié)構(gòu)是第二數(shù)據(jù)結(jié)構(gòu)的四倍大小。該執(zhí)行單元還包括復(fù)制邏輯電路,用于當(dāng)執(zhí)行該第一指令時(shí)復(fù)制該第一數(shù)據(jù)結(jié)構(gòu)以便創(chuàng)建第一復(fù)制數(shù)據(jù)結(jié)構(gòu),并且用于當(dāng)執(zhí)行該第二指令時(shí)復(fù)制該第二數(shù)據(jù)結(jié)構(gòu)以便創(chuàng)建第二復(fù)制數(shù)據(jù)結(jié)構(gòu)。
【專利說明】在不同的粒度等級下廣播數(shù)據(jù)值的指令執(zhí)行單元
[0001]本發(fā)明總體上涉及計(jì)算科學(xué),并且更具體地涉及在不同的粒度等級下廣播數(shù)據(jù)值的指令執(zhí)行單元。

【背景技術(shù)】
[0002]圖1示出了在半導(dǎo)體芯片上用邏輯電路實(shí)現(xiàn)的處理核100的高級圖。該處理核包括流水線101。該流水線由各自被設(shè)計(jì)成在完全執(zhí)行程序代碼指令所需的多步驟過程中執(zhí)行特定步驟的多個(gè)級組成。這些級通常至少包括:1)指令取出和解碼;2)數(shù)據(jù)取出;3)執(zhí)行;4)寫回。執(zhí)行級對由在先前級(例如在上述步驟I))中所取出和解碼的指令所標(biāo)識(shí)并在另一先前級(例如在上述步驟2))中被取出的數(shù)據(jù)執(zhí)行由在先前級(例如在上述步驟D)中取出和解碼的指令所標(biāo)識(shí)的特定操作。被操作的數(shù)據(jù)通常是從(通用)寄存器存儲(chǔ)空間102中取出的。在該操作完成時(shí)所創(chuàng)建的新數(shù)據(jù)通常也被“寫回”寄存器存儲(chǔ)空間(例如在上述級4))。
[0003]與執(zhí)行級相關(guān)聯(lián)的邏輯電路通常由多個(gè)“執(zhí)行單元”或“功能單元” 103_1至103_N構(gòu)成,這些單元各自被設(shè)計(jì)成執(zhí)行其自身的唯一操作子集(例如,第一功能單元執(zhí)行整數(shù)數(shù)學(xué)操作,第二功能單元執(zhí)行浮點(diǎn)指令,第三功能單元執(zhí)行從高速緩存/存儲(chǔ)器的加載操作和/或到高速緩存/存儲(chǔ)器的存儲(chǔ)操作等等)。由所有這些功能單元執(zhí)行的所有操作的集合與處理核100所支持的“指令集”相對應(yīng)。
[0004]計(jì)算機(jī)科學(xué)領(lǐng)域中廣泛認(rèn)可兩種類型的處理器架構(gòu):“標(biāo)量”和“向量”。標(biāo)量處理器被設(shè)計(jì)成執(zhí)行對單個(gè)數(shù)據(jù)集進(jìn)行操作的指令,而向量處理器被設(shè)計(jì)成執(zhí)行對多個(gè)數(shù)據(jù)集進(jìn)行操作的指令。圖2A和2B呈現(xiàn)了展示標(biāo)量處理器與向量處理器之間的基本差異的比較示例。
[0005]圖2A示出標(biāo)量AND (與)指令的示例,其中單個(gè)操作數(shù)集A和B —起進(jìn)行“與”運(yùn)算以產(chǎn)生單個(gè)(或“標(biāo)量”)結(jié)果C(S卩,AB = C)。相反,圖2B示出向量AND指令的示例,其中兩個(gè)操作數(shù)集A/B和D/E并行地分別一起進(jìn)行“與”運(yùn)算以同時(shí)產(chǎn)生向量結(jié)果C和F(即,
A.AND.B = C以及D.AND.E = F)。就術(shù)語學(xué)而言,“向量”是具有多個(gè)“元素”的數(shù)據(jù)元素。例如,向量V = Q,R,S,T,U具有五個(gè)不同的元素:Q、R、S、T和U。示例性向量V的“尺寸”是5 (因?yàn)樗哂?個(gè)元素)。
[0006]圖1還示出向量寄存器空間104的存在,該向量寄存器空間104不同于通用寄存器空間102。具體而言,通用寄存器空間102標(biāo)準(zhǔn)地用于存儲(chǔ)標(biāo)量值。這樣,當(dāng)各執(zhí)行單元中的任一個(gè)執(zhí)行標(biāo)量操作時(shí),它們標(biāo)準(zhǔn)地使用從通用寄存器存儲(chǔ)空間102調(diào)用的操作數(shù)(并將結(jié)果寫回通用寄存器存儲(chǔ)空間102)。相反,當(dāng)各執(zhí)行單元中的任一個(gè)執(zhí)行向量操作時(shí),它們標(biāo)準(zhǔn)地使用從向量寄存器空間107調(diào)用的操作數(shù)(并將結(jié)果寫回向量寄存器空間107)??深愃频胤峙浯鎯?chǔ)器的不同區(qū)域以存儲(chǔ)標(biāo)量值和向量值。
[0007]還應(yīng)注意,存在位于功能單元103_1到103_N的相應(yīng)輸入處的掩碼邏輯104_1到104_N,以及位于功能單元103_1到103_N的輸出處的掩碼邏輯105_1到105_N。在各種實(shí)現(xiàn)中,實(shí)際上僅實(shí)現(xiàn)這些層中的一個(gè)層一不過這并非嚴(yán)格要求。對于采用掩碼的任何指令,輸入掩碼邏輯104_1到104_N和/或輸出掩碼邏輯105_1到105_N可用于控制哪些元素被該向量指令有效地操作。在此,從掩碼寄存器空間106讀取掩碼向量(例如與從向量寄存器存儲(chǔ)空間107讀取的輸入數(shù)據(jù)向量一起),并將該掩碼向量呈現(xiàn)給掩碼邏輯104、105層中的至少一層。
[0008]在執(zhí)行向量程序代碼的過程中,每一向量指令無需要求全數(shù)據(jù)字。例如,一些指令的輸入向量可能僅僅是8個(gè)元素,其他指令的輸入向量可能是16個(gè)元素,其他指令的輸入向量可能是32個(gè)元素,等等。因此,掩碼層104/105用于標(biāo)識(shí)完整向量數(shù)據(jù)字中的應(yīng)用于特定指令的一組元素,以在多個(gè)指令之間實(shí)現(xiàn)不同的向量尺寸。通常,對于每一向量指令,掩碼寄存器空間106中所保持的特定掩碼模式被該指令調(diào)出,從掩碼寄存器空間中被取出并且被提供給掩碼層104/105中的任一者或兩者,以“啟用”針對該特定向量操作的正確元素集合。
[0009]圖3a至圖3d示出多個(gè)現(xiàn)有技術(shù)VBR0ADCAST指令的邏輯操作。VBR0ADCAST指令有效地將數(shù)據(jù)結(jié)構(gòu)復(fù)制多次到某個(gè)結(jié)果中。圖3a至圖3d的現(xiàn)有技術(shù)VBR0ADCAST指令中的每一個(gè)被實(shí)現(xiàn)在具有256位結(jié)果向量數(shù)據(jù)寬度的向量處理器架構(gòu)上。
[0010]圖3a 描繪“256 位 1BR0ADCASTSS 指令。如圖 3a 中所看到的,256 位 VBR0ADCASTSS指令從存儲(chǔ)器301_A讀取32位單精度浮點(diǎn)數(shù)據(jù)值并且將其復(fù)制八次到256位目的地302_A0
[0011]圖3b 描繪“ 128 位 1BR0ADCASTSS 指令。如圖 3b 中所看到的,128 位 VBR0ADCASTSS指令從存儲(chǔ)器301_B讀取32位單精度浮點(diǎn)數(shù)據(jù)值并且將其復(fù)制四次到256位目的地302_
B。目的地中的四個(gè)剩余的32位元素用零值蓋寫。
[0012]圖3c描繪VBR0ADCASTSD指令。如圖3c中所看到的,VBR0ADCASTSS指令從存儲(chǔ)器301_C讀取64位雙精度浮點(diǎn)數(shù)據(jù)值并且將其復(fù)制四次到256位目的地302_C。
[0013]圖3d描繪VBR0ADCASTSF128指令。如圖3d中所看到的,VBR0ADCASTSF128指令從存儲(chǔ)器301_D讀取128位數(shù)據(jù)字并且將其復(fù)制兩次到256位目的地302d。源操作數(shù)301_D可以是具有兩個(gè)64位雙精度浮點(diǎn)元素(在圖3d中描繪)或四個(gè)32位單精度浮點(diǎn)元素(未在圖3d中描繪)的打包數(shù)據(jù)結(jié)構(gòu)。
[0014]附圖簡要說明
[0015]本發(fā)明是通過示例說明的,而不僅局限于各個(gè)附圖的圖示,在附圖中,類似的參考標(biāo)號表示類似的元件,其中:
[0016]圖1示出指令執(zhí)行流水線;
[0017]圖2a和圖2b對比標(biāo)量和向量處理;
[0018]圖3a至圖3d示出現(xiàn)有技術(shù)VBR0ADCAST指令;
[0019]圖4a至圖4g示出改進(jìn)的VBR0ADCAST指令;
[0020]圖5a和圖5b涉及用于實(shí)現(xiàn)改進(jìn)的VBR0ADCAST指令的執(zhí)行邏輯電路;
[0021]圖6A-6B是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其指令模板的框圖;
[0022]圖7是示出根據(jù)本發(fā)明的實(shí)施例的示例性專用向量友好指令格式的框圖;
[0023]圖8是根據(jù)本發(fā)明的一個(gè)實(shí)施例的寄存器架構(gòu)的框圖;
[0024]圖9A是示出根據(jù)本發(fā)明的實(shí)施例的示例性有序流水線以及示例性寄存器重命名的無序發(fā)布/執(zhí)行流水線兩者的框圖;
[0025]圖9B是示出根據(jù)本發(fā)明的各實(shí)施例的要包括在處理器中的有序架構(gòu)核的示例性實(shí)施例和示例性的寄存器重命名的無序發(fā)布/執(zhí)行架構(gòu)核的框圖;
[0026]圖10A-B示出了更具體的示例性有序核架構(gòu)的框圖,該核將是芯片中的若干邏輯塊之一(包括相同類型和/或不同類型的其他核);
[0027]圖11是根據(jù)本發(fā)明的實(shí)施例的可具有超過一個(gè)的核、可具有集成的存儲(chǔ)器控制器、并且可具有集成圖形的處理器的框圖;
[0028]圖12是根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)的框圖;
[0029]圖13是根據(jù)本發(fā)明的實(shí)施例的第一更具體的示例性系統(tǒng)的框圖;
[0030]圖14是根據(jù)本發(fā)明的實(shí)施例的第二更具體的示例性系統(tǒng)的框圖;
[0031]圖15是根據(jù)本發(fā)明的實(shí)施例的SoC的框圖;
[0032]圖16是根據(jù)本發(fā)明的實(shí)施例的對比使用軟件指令變換器將源指令集中的二進(jìn)制指令變換成目標(biāo)指令集中的二進(jìn)制指令的框圖。

【具體實(shí)施方式】
[0033]概覽
[0034]圖4a至4f涉及新的高級VBR0ADCAST指令集。該新的高級VBR0ADCAST指令集的特征為寫入掩碼層,其允許在正在復(fù)制的數(shù)據(jù)結(jié)構(gòu)內(nèi)的數(shù)據(jù)元素(多個(gè))的粒度下進(jìn)行掩碼(masking)。例如,如果正在復(fù)制的數(shù)據(jù)結(jié)構(gòu)是包含兩個(gè)32位單精度值的64位結(jié)構(gòu),寫入掩碼將支持在32位粒度下的掩碼。而且,盡管上述在圖3a至圖3d中討論的現(xiàn)有技術(shù)VBR0ADCAST指令創(chuàng)建256位的結(jié)果,相比之下,圖4a至圖4f的改進(jìn)的VBR0ADCAST指令創(chuàng)建512位的結(jié)果。如將從以下討論中變得明顯的,擴(kuò)展到512位的結(jié)果允許相比于圖3a至圖3d的現(xiàn)有技術(shù)VBR0ADCAST指令明顯更加復(fù)雜的復(fù)制模式。
[0035]圖4a展示采用掩碼(masking)的VBR0ADCAST指令。如圖4a所見,VBR0ADCAST指令將32位輸入數(shù)據(jù)結(jié)構(gòu)401_A復(fù)制十六次從而創(chuàng)建復(fù)制數(shù)據(jù)結(jié)構(gòu)402_A。掩碼層403_A應(yīng)用掩碼模式從而在32位粒度下掩碼復(fù)制數(shù)據(jù)結(jié)構(gòu)402_A,以創(chuàng)建結(jié)果數(shù)據(jù)結(jié)構(gòu)404_A。應(yīng)當(dāng)理解的是結(jié)果數(shù)據(jù)結(jié)構(gòu)最終被寫入到向量寄存器空間中的目的寄存器。在指令字段中指定目的寄存器的地址。
[0036]在一種實(shí)施例中,輸入數(shù)據(jù)結(jié)構(gòu)是從存儲(chǔ)器讀取或從自向量寄存器空間(諸如圖1的寄存器空間107)取出的向量源操作數(shù)中提取的(例如,最右側(cè)元素)32位單精度浮點(diǎn)值。在各種情況中,指令格式包括標(biāo)識(shí)將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)在何處的字段。
[0037]在圖4a的掩碼模式中看到的I和O的特定模式僅是示例性的。本領(lǐng)域普通技術(shù)人員將理解的是可使用與掩碼的尺寸相一致的I和O的任意模式。在一種實(shí)施例中,掩碼模式被嵌入在指令自身中(例如,類似于立即數(shù)(immediate)操作數(shù))。可替代地,可從掩碼模式寄存器空間(諸如圖1的寄存器空間106)取出掩碼模式。在前一種情況中,指令格式包括包含實(shí)際掩碼模式的字段,而在后一種情況中,指令格式包括識(shí)別將從何處取出掩碼模式的字段。
[0038]在向量友好指令格式的實(shí)現(xiàn)方式中,以下更詳細(xì)地描述其實(shí)施例,該指令格式支持這兩種掩碼模式技術(shù)。在這種情況中,指令格式包括標(biāo)識(shí)將為該指令采取何種方法的附加字段(例如,I =掩碼模式類似于嵌入在指令中的立即數(shù)操作數(shù),O =掩碼模式將從掩碼寄存器空間取出)。
[0039]單獨(dú)地或組合地,所應(yīng)用的掩碼的類型可以是“合并”或“歸零”。在合并掩碼的情況中,不蓋寫結(jié)果數(shù)據(jù)結(jié)構(gòu)的“掩碼出(masked out) ”字段(諸如字段405)。而是該位置處的目的寄存器中的原始值被保留。與之相比,在歸零掩碼的情況中,結(jié)果數(shù)據(jù)結(jié)構(gòu)的“掩碼出”字段用值O蓋寫目的寄存器中的該位置。在各種實(shí)施例中(諸如,與剛剛在上文所提及的向量友好指令格式相關(guān)聯(lián)的那些實(shí)施例),在指令格式的另一個(gè)字段中指定將應(yīng)用合并還是歸零掩碼。
[0040]有關(guān)掩碼的上述評論也適用于與圖4b至圖4f相關(guān)聯(lián)的指令的下述討論。為了方便,未在以下對其進(jìn)行重復(fù)。
[0041 ] 圖4b展示采用掩碼的VBR0ADCASTSD指令。如圖4b所見,VBR0ADCAST指令將64位輸入數(shù)據(jù)結(jié)構(gòu)401_B復(fù)制八次從而創(chuàng)建復(fù)制數(shù)據(jù)結(jié)構(gòu)402_B。掩碼層403_B應(yīng)用掩碼模式從而在64位粒度下掩碼復(fù)制數(shù)據(jù)結(jié)構(gòu)402_B,以創(chuàng)建結(jié)果數(shù)據(jù)結(jié)構(gòu)404_B。應(yīng)當(dāng)理解的是結(jié)果數(shù)據(jù)結(jié)構(gòu)最終被寫入到向量寄存器空間中的目的寄存器。在指令字段中指定目的寄存器的地址。
[0042]在一種實(shí)施例中,輸入數(shù)據(jù)結(jié)構(gòu)是從存儲(chǔ)器讀取或從自向量寄存器空間(諸如圖1的寄存器空間107)取出的向量源操作數(shù)中提取的(例如,最右側(cè)元素)64位雙精度浮點(diǎn)值。在各種情況中,指令格式包括標(biāo)識(shí)將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)在何處的字段。
[0043]圖4c展示采用掩碼的VBR0ADCAST32X2指令。如圖4c所見,VBR0ADCAST32X2指令將64位輸入數(shù)據(jù)結(jié)構(gòu)401_C復(fù)制八次從而創(chuàng)建復(fù)制數(shù)據(jù)結(jié)構(gòu)402_C。然而,所復(fù)制的64位輸入數(shù)據(jù)結(jié)構(gòu)401_C是一對打包32位單精度浮點(diǎn)值。掩碼層403_C因此在32位粒度下應(yīng)用掩碼模式從而創(chuàng)建結(jié)果數(shù)據(jù)結(jié)構(gòu)404_C。應(yīng)當(dāng)理解的是結(jié)果數(shù)據(jù)結(jié)構(gòu)最終被寫入到向量寄存器空間中的目的寄存器。在指令字段中指定目的寄存器的地址。
[0044]在一種實(shí)施例中,輸入數(shù)據(jù)結(jié)構(gòu)是從存儲(chǔ)器讀取或從自向量寄存器空間(諸如圖1的寄存器空間107)取出的向量源操作數(shù)中提取的(例如,最右側(cè)元素)。在各種情況中,指令格式包括標(biāo)識(shí)將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)在何處的字段。
[0045]圖4d展示采用掩碼的VBR0ADCAST32X4指令。如圖4d所見,VBR0ADCAST32X4指令將128位輸入數(shù)據(jù)結(jié)構(gòu)401_D復(fù)制四次從而創(chuàng)建復(fù)制數(shù)據(jù)結(jié)構(gòu)402_D。然而,被復(fù)制的128位輸入數(shù)據(jù)結(jié)構(gòu)401_D是四字(foursome)打包32位單精度浮點(diǎn)值。掩碼層403_D在32位粒度下應(yīng)用掩碼模式從而創(chuàng)建結(jié)果數(shù)據(jù)結(jié)構(gòu)404_D。應(yīng)當(dāng)理解的是結(jié)果數(shù)據(jù)結(jié)構(gòu)最終被寫入到向量寄存器空間中的目的寄存器。在指令字段中指定目的寄存器的地址。
[0046]在一種實(shí)施例中,輸入數(shù)據(jù)結(jié)構(gòu)是從存儲(chǔ)器讀取或從自向量寄存器空間(諸如圖1的寄存器空間107)取出的向量源操作數(shù)中提取的(例如,最右側(cè)元素)。在各種情況中,指令格式包括標(biāo)識(shí)將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)在何處的字段。
[0047]圖4e展示采用掩碼的VBR0ADCAST32X8指令。如圖4e所見,VBR0ADCAST32X8指令將256位輸入數(shù)據(jù)結(jié)構(gòu)401_E復(fù)制四次從而創(chuàng)建復(fù)制數(shù)據(jù)結(jié)構(gòu)402_E。然而,所復(fù)制的256位輸入數(shù)據(jù)結(jié)構(gòu)401_E是八字(“eightsome”)打包32位單精度浮點(diǎn)值。因此,掩碼層403_E在32位粒度下應(yīng)用掩碼模式從而創(chuàng)建結(jié)果數(shù)據(jù)結(jié)構(gòu)404_E。應(yīng)當(dāng)理解的是結(jié)果數(shù)據(jù)結(jié)構(gòu)最終被寫入到向量寄存器空間中的目的寄存器。在指令字段中指定目的寄存器的地址。
[0048]在一種實(shí)施例中,輸入數(shù)據(jù)結(jié)構(gòu)是從存儲(chǔ)器讀取或從自向量寄存器空間(諸如圖1的寄存器空間107)取出的向量源操作數(shù)中提取的(例如,最右側(cè)元素)。在各種情況中,指令格式包括標(biāo)識(shí)將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)在何處的字段。
[0049]圖4f展示采用掩碼的VBR0ADCAST64X2指令。如圖4f所見,VBR0ADCAST64X2指令將128位輸入數(shù)據(jù)結(jié)構(gòu)401_F復(fù)制四次從而創(chuàng)建復(fù)制數(shù)據(jù)結(jié)構(gòu)402_F。然而,所復(fù)制的128位輸入數(shù)據(jù)結(jié)構(gòu)401_F是一對打包64位雙精度浮點(diǎn)值。因此,掩碼層403_F在64位粒度下應(yīng)用掩碼模式從而創(chuàng)建結(jié)果數(shù)據(jù)結(jié)構(gòu)404_F。應(yīng)當(dāng)理解的是結(jié)果數(shù)據(jù)結(jié)構(gòu)最終被寫入到向量寄存器空間中的目的寄存器。在指令字段中指定目的寄存器的地址。
[0050]在一種實(shí)施例中,輸入數(shù)據(jù)結(jié)構(gòu)是從存儲(chǔ)器讀取或從自向量寄存器空間(諸如圖1的寄存器空間107)獲取的向量源操作數(shù)中提取的(例如,最右側(cè)元素)。在各種情況中,指令格式包括標(biāo)識(shí)將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)在何處的字段。
[0051 ] 圖4g展示采用掩碼的VBR0ADCAST64X4指令。如圖4g所見,VBR0ADCAST64X4指令將256位輸入數(shù)據(jù)結(jié)構(gòu)401_G復(fù)制兩次從而創(chuàng)建復(fù)制數(shù)據(jù)結(jié)構(gòu)402_G。然而,所復(fù)制的256位輸入數(shù)據(jù)結(jié)構(gòu)401_G是四字打包64位雙精度浮點(diǎn)值。因此,掩碼層403_G在64位粒度下應(yīng)用掩碼模式從而創(chuàng)建結(jié)果數(shù)據(jù)結(jié)構(gòu)404_G。應(yīng)當(dāng)理解的是結(jié)果數(shù)據(jù)結(jié)構(gòu)最終被寫入到向量寄存器空間中的目的寄存器。在指令字段中指定目的寄存器的地址。
[0052]在一種實(shí)施例中,輸入數(shù)據(jù)結(jié)構(gòu)是從存儲(chǔ)器讀取或從自向量寄存器空間(諸如圖1的寄存器空間107)取出的向量源操作數(shù)中提取的(例如,最右側(cè)元素)。在各種情況中,指令格式包括標(biāo)識(shí)將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)在何處的字段。
[0053]在VBR0ADCAST32X4、VBR0ADCAST32X8、VBR0ADCAST64X2 以及 VBR0ADCAST64X4 指令的上述討論中,將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)被描述為僅可從存儲(chǔ)器獲得。然而,可構(gòu)想地,這些指令可被擴(kuò)展從而從或者存儲(chǔ)器或者向量寄存器空間接受將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)。這樣,取決于實(shí)現(xiàn)方式,支持這些指令的流水線的數(shù)據(jù)取出級(fetch stage)可稱合到存儲(chǔ)器,或存儲(chǔ)器和寄存器空間。
[0054]而且,采用掩碼的VBR0ADCASTSS、采用掩碼的 VBROADCASTSD、VBR0ADCAST32X2、VBR0ADCAST32X4,VBR0ADCAST32X8,VBR0ADCAST64X2 以及 VBR0ADCAST64X4 指令各自的討論被描述為僅支持浮點(diǎn)數(shù)據(jù)值。可構(gòu)想地,這些指令可被擴(kuò)展到處理整數(shù)以及浮點(diǎn)數(shù)據(jù)值。在此,圖1的寄存器空間102可包括專用于存儲(chǔ)浮點(diǎn)值的第一部分和專用于存儲(chǔ)浮點(diǎn)值的另一部分。在不擴(kuò)展到整數(shù)值的情況下,針對對這些指令進(jìn)行處理的方式,流水線的數(shù)據(jù)取出和寫回級耦合到浮點(diǎn)寄存器空間而不是整數(shù)寄存器空間。作為對比,如果這些指令被設(shè)計(jì)為支持兩種數(shù)據(jù)類型,數(shù)據(jù)取出和寫回級可耦合到每一者(取決于指令的解碼)。
[0055]圖5a展示可實(shí)現(xiàn)上述在圖4a至圖4f中討論的指令的任意組合(包括全部)的執(zhí)行的邏輯設(shè)計(jì)。參考圖5a,第一寄存器501保持將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)。注意,第一寄存器501的尺寸應(yīng)當(dāng)足夠大以便保持它期望能夠復(fù)制的最大數(shù)據(jù)結(jié)構(gòu)。而且,第一寄存器501還位于流水線中的數(shù)據(jù)取出級的后端。為了本申請的目的,這種寄存器可被認(rèn)為是執(zhí)行單元的一部分。第一寄存器501耦合到復(fù)制邏輯電路502,該復(fù)制邏輯電路復(fù)制第一寄存器內(nèi)的內(nèi)容以便在其輸出503產(chǎn)生與正在執(zhí)行的指令相一致的復(fù)制數(shù)據(jù)結(jié)構(gòu)。對于被微代碼化的那些實(shí)現(xiàn)方式而言,用于復(fù)制邏輯電路502的術(shù)語“邏輯電路”等等將包括微代碼和響應(yīng)于微代碼而動(dòng)作的邏輯。
[0056]復(fù)制邏輯電路的輸出503耦合到掩碼邏輯504,該掩碼邏輯從寄存器505接收掩碼模式,以便將掩碼應(yīng)用到復(fù)制數(shù)據(jù)結(jié)構(gòu),從而在寄存器506中創(chuàng)建結(jié)果數(shù)據(jù)結(jié)構(gòu)。取決于實(shí)現(xiàn)方式,寄存器506可與向量寄存器空間107中的寄存器相對應(yīng),或者寄存器506可以是在執(zhí)行單元內(nèi)部的并且被目的寄存器的內(nèi)容填充的(例如,在數(shù)據(jù)取出級)并且然后在掩碼邏輯將結(jié)果寫入其內(nèi)后被寫回相同的目的寄存器的寄存器。
[0057]在進(jìn)一步的實(shí)施例中,執(zhí)行單元邏輯電路被設(shè)計(jì)為不僅支持圖4a至圖4g的指令中的任意一個(gè)/全部,而且支持圖3a至圖3d的現(xiàn)有技術(shù)指令中的任意一個(gè)/全部。在這種情況中,因?yàn)閳D3a至圖3d的現(xiàn)有技術(shù)指令不支持掩碼,存在當(dāng)正在執(zhí)行這些指令時(shí)繞過掩碼邏輯504的旁路通路507。
[0058]盡管上述指令的描述包括數(shù)據(jù)值的特定位寬度、將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)以及結(jié)果的大小,本領(lǐng)域普通技術(shù)人員將認(rèn)識(shí)到在此所述的概念可被擴(kuò)展到不同的對應(yīng)寬度。
[0059]圖5b展示可被圖5a的邏輯電路執(zhí)行的方法。將被復(fù)制的數(shù)據(jù)結(jié)構(gòu)被放置在第一寄存器510中,并且,如果掩碼(masking)適用511,掩碼模式被放置在第二寄存器512中。然后,與正在執(zhí)行的指令相符地復(fù)制數(shù)據(jù)結(jié)構(gòu),以便創(chuàng)建復(fù)制數(shù)據(jù)結(jié)構(gòu)513。如果掩碼適用514,將掩碼模式應(yīng)用到復(fù)制數(shù)據(jù)結(jié)構(gòu)515,以便創(chuàng)建結(jié)果數(shù)據(jù)結(jié)構(gòu)。如果掩碼不適用,結(jié)果數(shù)據(jù)結(jié)構(gòu)是復(fù)制數(shù)據(jù)結(jié)構(gòu)516。
[0060]示例性指令格式
[0061]本文中所描述的指令的實(shí)施例可以不同的格式體現(xiàn)。另外,在下文中詳述示例性系統(tǒng)、架構(gòu)、以及流水線。指令的實(shí)施例可在這些系統(tǒng)、架構(gòu)、以及流水線上執(zhí)行,但是不限于詳述的系統(tǒng)、架構(gòu)、以及流水線。
[0062]通用向量友好指令格式
[0063]向量友好指令格式是適于向量指令(例如,存在專用于向量操作的特定字段)的指令格式。盡管描述了其中通過向量友好指令格式支持向量和標(biāo)量運(yùn)算兩者的實(shí)施例,但是替代實(shí)施例僅使用通過向量友好指令格式的向量運(yùn)算。
[0064]圖6A-6B是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其指令模板的框圖。圖6A是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其A類指令模板的框圖;而圖6B是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其B類指令模板的框圖。具體地,針對通用向量友好指令格式600定義A類和B類指令模板,兩者包括無存儲(chǔ)器訪問605的指令模板和存儲(chǔ)器訪問620的指令模板。在向量友好指令格式的上下文中的術(shù)語“通用”指不束縛于任何專用指令集的指令格式。
[0065]盡管將描述其中向量友好指令格式支持64字節(jié)向量操作數(shù)長度(或尺寸)與32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或尺寸)(并且由此,64字節(jié)向量由16雙字尺寸的元素或者替代地8四字尺寸的元素組成)、64字節(jié)向量操作數(shù)長度(或尺寸)與16位(2字節(jié))或8位(I字節(jié))數(shù)據(jù)元素寬度(或尺寸)、32字節(jié)向量操作數(shù)長度(或尺寸)與32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(I字節(jié))數(shù)據(jù)元素寬度(或尺寸)、以及16字節(jié)向量操作數(shù)長度(或尺寸)與32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(I字節(jié))數(shù)據(jù)元素寬度(或尺寸)的本發(fā)明的實(shí)施例,但是替代實(shí)施例可支持更大、更小、和/或不同的向量操作數(shù)尺寸(例如,256字節(jié)向量操作數(shù))與更大、更小或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)。
[0066]圖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的指令模板。
[0067]通用向量友好指令格式600包括以下列出的按照在圖6A-6B中示出的順序的如下字段。結(jié)合以上的討論,在實(shí)施例中,參考下文在圖6A-B和7中提供的格式細(xì)節(jié),可利用非存儲(chǔ)器訪問指令類型605或存儲(chǔ)器訪問指令類型620??稍谝韵旅枋龅募拇嫫鞯刂纷侄?44中標(biāo)識(shí)讀取掩碼、輸入向量操作數(shù)和目的地的地址。在進(jìn)一步的實(shí)施例中,讀掩碼和寫掩碼被編碼在EVEX.kkk字段中。
[0068]格式字段640 —該字段中的特定值(指令格式標(biāo)識(shí)符值)唯一地標(biāo)識(shí)向量友好指令格式,并且由此標(biāo)識(shí)指令在指令流中以向量友好指令格式出現(xiàn)。由此,該字段對于僅具有通用向量友好指令格式的指令集是不需要的,在這個(gè)意義上該字段是任選的。
[0069]基礎(chǔ)操作字段642 —其內(nèi)容區(qū)分不同的基礎(chǔ)操作。
[0070]寄存器索引字段644-其內(nèi)容直接或者通過地址生成來指定源或目的地操作數(shù)在寄存器中或者在存儲(chǔ)器中的位置。這些字段包括足夠數(shù)量的位以從PxQ(例如,32x512、16x128,32x1024,64x1024)寄存器組選擇N個(gè)寄存器。盡管在一個(gè)實(shí)施例中N可高達(dá)三個(gè)源和一個(gè)目的地寄存器,但是替代實(shí)施例可支持更多或更少的源和目的地寄存器(例如,可支持高達(dá)兩個(gè)源,其中這些源中的一個(gè)源還用作目的地,可支持高達(dá)三個(gè)源,其中這些源中的一個(gè)源還用作目的地,可支持高達(dá)兩個(gè)源和一個(gè)目的地)。
[0071]修飾符(modifier)字段646 —其內(nèi)容將指定存儲(chǔ)器訪問的以通用向量指令格式出現(xiàn)的指令與不指定存儲(chǔ)器訪問的以通用向量指令格式出現(xiàn)的指令區(qū)分開;即在無存儲(chǔ)器訪問605的指令模板與存儲(chǔ)器訪問620的指令模板之間進(jìn)行區(qū)分。存儲(chǔ)器訪問操作讀取和/或?qū)懭氲酱鎯?chǔ)器層次(在一些情況下,使用寄存器中的值來指定源和/或目的地地址),而非存儲(chǔ)器訪問操作不這樣(例如,源和/或目的地是寄存器)。盡管在一個(gè)實(shí)施例中,該字段還在三種不同的方式之間選擇以執(zhí)行存儲(chǔ)器地址計(jì)算,但是替代實(shí)施例可支持更多、更少或不同的方式來執(zhí)行存儲(chǔ)器地址計(jì)算。
[0072]擴(kuò)充操作字段650 —其內(nèi)容區(qū)分除基礎(chǔ)操作以外還要執(zhí)行各種不同操作中的哪一個(gè)操作。該字段是針對上下文的。在本發(fā)明的一個(gè)實(shí)施例中,該字段被分成類字段668、α字段652、以及β字段654。
[0073]擴(kuò)充操作字段650允許在單一指令而非2、3或4個(gè)指令中執(zhí)行多組共同的操作。
[0074]比例字段660 —其內(nèi)容允許用于存儲(chǔ)器地址生成(例如,用于使用2ttw*索引+基址的地址生成)的索引字段的內(nèi)容的按比例縮放。
[0075]位移字段662A —其內(nèi)容用作存儲(chǔ)器地址生成的一部分(例如,用于使用2 索引+基址+位移的地址生成)。
[0076]位移因數(shù)字段662B (注意,位移字段662A直接在位移因數(shù)字段662B上的并置指示使用一個(gè)或另一個(gè))一其內(nèi)容用作地址生成的一部分,它指定通過存儲(chǔ)器訪問的尺寸(N)按比例縮放的位移因數(shù),其中N是存儲(chǔ)器訪問中的字節(jié)數(shù)量(例如,用于使用2?*索弓I +基址+按比例縮放的位移的地址生成)。忽略冗余的低階位,并且因此將位移因數(shù)字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)總尺寸(N)以生成在計(jì)算有效地址中使用的最終位移。N的值由處理器硬件在運(yùn)行時(shí)基于完整操作碼字段674 (稍后在本文中描述)和數(shù)據(jù)操縱字段654C確定。位移字段662A和位移因數(shù)字段662B可以不用于無存儲(chǔ)器訪問605的指令模板和/或不同的實(shí)施例可實(shí)現(xiàn)兩者中的僅一個(gè)或不實(shí)現(xiàn)兩者中的任一個(gè),在這個(gè)意義上位移字段662A和位移因數(shù)字段662B是任選的。
[0077]數(shù)據(jù)元素寬度字段664 —其內(nèi)容區(qū)分使用多個(gè)數(shù)據(jù)元素寬度中的哪一個(gè)(在一些實(shí)施例中用于所有指令,在其他實(shí)施例中只用于一些指令)。如果支持僅一個(gè)數(shù)據(jù)元素寬度和/或使用操作碼的某一方面來支持?jǐn)?shù)據(jù)元素寬度,則該字段是不需要的,在這個(gè)意義上該字段是任選的。
[0078]寫掩碼字段670 —其內(nèi)容在每一數(shù)據(jù)元素位置的基礎(chǔ)上控制目的地向量操作數(shù)中的數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴(kuò)充操作的結(jié)果。A類指令模板支持合并-寫掩碼操作,而B類指令模板支持合并寫掩碼操作和歸零寫掩碼操作兩者。當(dāng)合并時(shí),向量掩碼允許在執(zhí)行任何操作期間保護(hù)目的地中的任何元素集免于更新(由基礎(chǔ)操作和擴(kuò)充操作指定);在另一實(shí)施例中,保持其中對應(yīng)掩碼位具有O的目的地的每一元素的舊值。相反,當(dāng)歸零時(shí),向量掩碼允許在執(zhí)行任何操作期間使目的地中的任何元素集歸零(由基礎(chǔ)操作和擴(kuò)充操作指定);在一個(gè)實(shí)施例中,目的地的元素在對應(yīng)掩碼位具有O值時(shí)被設(shè)為O。該功能的子集是控制執(zhí)行的操作的向量長度的能力(即,從第一個(gè)到最后一個(gè)要修改的元素的跨度),然而,被修改的元素不一定要是連續(xù)的。由此,寫掩碼字段670允許部分向量操作,這包括加載、存儲(chǔ)、算術(shù)、邏輯等。盡管描述了其中寫掩碼字段670的內(nèi)容選擇了多個(gè)寫掩碼寄存器中的包含要使用的寫掩碼的一個(gè)寫掩碼寄存器(并且由此寫掩碼字段670的內(nèi)容間接地標(biāo)識(shí)了要執(zhí)行的掩碼操作)的本發(fā)明的實(shí)施例,但是替代實(shí)施例相反或另外允許掩碼寫字段670的內(nèi)容直接地指定要執(zhí)行的掩碼操作。
[0079]立即數(shù)字段672 —其內(nèi)容允許對立即數(shù)的指定。該字段在實(shí)現(xiàn)不支持立即數(shù)的通用向量友好格式中不存在且在不使用立即數(shù)的指令中不存在,在這個(gè)意義上該字段是任選的。
[0080]類字段668 —其內(nèi)容在不同類的指令之間進(jìn)行區(qū)分。參考圖6A-B,該字段的內(nèi)容在A類和B類指令之間進(jìn)行選擇。在圖6A-B中,圓角方形用于指示專用值存在于字段中(例如,在圖6A-B中分別用于類字段668的A類668A和B類668B)。
[0081]A類指令模板
[0082]在A類非存儲(chǔ)器訪問605的指令模板的情況下,α字段652被解釋為其內(nèi)容區(qū)分要執(zhí)行不同擴(kuò)充操作類型中的哪一種(例如,針對無存儲(chǔ)器訪問的舍入型操作610和無存儲(chǔ)器訪問的數(shù)據(jù)變換型操作615的指令模板分別指定舍入652Α.1和數(shù)據(jù)變換652Α.2)的RS字段652Α,而β字段654區(qū)分要執(zhí)行指定類型的操作中的哪一種。在無存儲(chǔ)器訪問605指令模板中,比例字段660、位移字段662Α以及位移比例字段662Β不存在。
[0083]無存儲(chǔ)器訪問的指令模板一完全舍入控制型操作
[0084]在無存儲(chǔ)器訪問的完全舍入控制型操作610的指令模板中,β字段654被解釋為其內(nèi)容提供靜態(tài)舍入的舍入控制字段654A。盡管在本發(fā)明的所述實(shí)施例中舍入控制字段654A包括抑制所有浮點(diǎn)異常(SAE)字段656和舍入操作控制字段658,但是替代實(shí)施例可支持、可將這些概念兩者都編碼成相同的字段或者僅具有這些概念/字段中的一個(gè)或另一個(gè)(例如,可僅有舍入操作控制字段658)。
[0085]SAE字段656 —其內(nèi)容區(qū)分是否停用異常事件報(bào)告;當(dāng)SAE字段656的內(nèi)容指示啟用抑制時(shí),給定指令不報(bào)告任何種類的浮點(diǎn)異常標(biāo)志且不喚起任何浮點(diǎn)異常處理程序。
[0086]舍入操作控制字段658 —其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(gè)(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段658允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個(gè)實(shí)施例中,舍入操作控制字段650的內(nèi)容優(yōu)先于該寄存器值。
[0087]無存儲(chǔ)器訪問的指令模板一數(shù)據(jù)變換型操作
[0088]在無存儲(chǔ)器訪問的數(shù)據(jù)變換型操作615的指令模板中,β字段654被解釋為數(shù)據(jù)變換字段654Β,其內(nèi)容區(qū)分要執(zhí)行多個(gè)數(shù)據(jù)變換中的哪一個(gè)(例如,無數(shù)據(jù)變換、混合、廣播)。
[0089]在A類存儲(chǔ)器訪問620的指令模板的情況下,α字段652被解釋為驅(qū)逐提示字段652Β,其內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪一個(gè)(在圖6Α中,對于存儲(chǔ)器訪問時(shí)效性625的指令模板和存儲(chǔ)器訪問非時(shí)效性630的指令模板分別指定時(shí)效性的652Β.1和非時(shí)效性的652Β.2),而β字段654被解釋為數(shù)據(jù)操縱字段654C,其內(nèi)容區(qū)分要執(zhí)行多個(gè)數(shù)據(jù)操縱操作(也稱為基元(primitive))中的哪一個(gè)(例如,無操縱、廣播、源的向上轉(zhuǎn)換、以及目的地的向下轉(zhuǎn)換)。存儲(chǔ)器訪問620的指令模板包括比例字段660、以及任選的位移字段662A或位移比例字段662B。
[0090]向量存儲(chǔ)器指令使用轉(zhuǎn)換支持來執(zhí)行來自存儲(chǔ)器的向量加載并將向量存儲(chǔ)到存儲(chǔ)器。如同尋常的向量指令,向量存儲(chǔ)器指令以數(shù)據(jù)元素式的方式與存儲(chǔ)器來回傳輸數(shù)據(jù),其中實(shí)際傳輸?shù)脑赜蛇x為寫掩碼的向量掩碼的內(nèi)容規(guī)定。
[0091 ] 存儲(chǔ)器訪問的指令模板一時(shí)效性的
[0092]時(shí)效性的數(shù)據(jù)是可能足夠快地重新使用以從高速緩存受益的數(shù)據(jù)。然而,這是提示,且不同的處理器可以不同的方式實(shí)現(xiàn)它,包括完全忽略該提示。
[0093]存儲(chǔ)器訪問的指令模板一非時(shí)效性的
[0094]非時(shí)效性的數(shù)據(jù)是不可能足夠快地重新使用以從第一級高速緩存中的高速緩存受益且應(yīng)當(dāng)被給予驅(qū)逐優(yōu)先級的數(shù)據(jù)。然而,這是提示,且不同的處理器可以不同的方式實(shí)現(xiàn)它,包括完全忽略該提示。
[0095]B類指令模板
[0096]在B類指令模板的情況下,α字段652被解釋為寫掩碼控制(Z)字段652C,其內(nèi)容區(qū)分由寫掩碼字段670控制的寫掩碼操作應(yīng)當(dāng)是合并還是歸零。
[0097]在B類非存儲(chǔ)器訪問605的指令模板的情況下,β字段654的一部分被解釋為RL字段657Α,其內(nèi)容區(qū)分要執(zhí)行不同擴(kuò)充操作類型中的哪一種(例如,針對無存儲(chǔ)器訪問的寫掩碼控制部分舍入控制類型操作612的指令模板和無存儲(chǔ)器訪問的寫掩碼控制VSIZE型操作617的指令模板分別指定舍入657Α.1和向量長度(VSIZE) 657Α.2),而β字段654的其余部分區(qū)分要執(zhí)行指定類型的操作中的哪一種。在無存儲(chǔ)器訪問605指令模板中,比例字段660、位移字段662A以及位移比例字段662B不存在。
[0098]在無存儲(chǔ)器訪問的寫掩碼控制的部分舍入控制型操作610的指令模板中,β字段654的其余部分被解釋為舍入操作字段659Α,并且停用異常事件報(bào)告(給定指令不報(bào)告任何種類的浮點(diǎn)異常標(biāo)志且不喚起任何浮點(diǎn)異常處理程序)。
[0099]舍入操作控制字段659Α —只作為舍入操作控制字段658,其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(gè)(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段659Α允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個(gè)實(shí)施例中,舍入操作控制字段650的內(nèi)容優(yōu)先于該寄存器值。
[0100]在無存儲(chǔ)器訪問的寫掩碼控制VSIZE型操作617的指令模板中,β字段654的其余部分被解釋為向量長度字段659Β,其內(nèi)容區(qū)分要執(zhí)行多個(gè)數(shù)據(jù)向量長度中的哪一個(gè)(例如,128字節(jié)、256字節(jié)、或512字節(jié))。
[0101]在B類存儲(chǔ)器訪問620的指令模板的情況下,β字段654的一部分被解釋為廣播字段657Β,其內(nèi)容區(qū)分是否要執(zhí)行廣播型數(shù)據(jù)操縱操作,而β字段654的其余部分被解釋為向量長度字段659Β。存儲(chǔ)器訪問620的指令模板包括比例字段660、以及任選的位移字段662Α或位移比例字段662Β。
[0102]針對通用向量友好指令格式600,示出完整操作碼字段674包括格式字段640、基礎(chǔ)操作字段642以及數(shù)據(jù)元素寬度字段664。盡管示出了其中完整操作碼字段674包括所有這些字段的一個(gè)實(shí)施例,但是在不支持所有這些字段的實(shí)施例中,完整操作碼字段674包括少于所有的這些字段。完整操作碼字段674提供操作碼(opcode)。
[0103]擴(kuò)充操作字段650、數(shù)據(jù)元素寬度字段664以及寫掩碼字段670允許在每一指令的基礎(chǔ)上以通用向量友好指令格式指定這些特征。
[0104]寫掩碼字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建各種類型的指令,因?yàn)檫@些指令允許基于不同的數(shù)據(jù)元素寬度應(yīng)用該掩碼。
[0105]在A類和B類內(nèi)出現(xiàn)的各種指令模板在不同的情形下是有益的。在本發(fā)明的一些實(shí)施例中,不同處理器或者處理器內(nèi)的不同核可支持僅A類、僅B類、或者可支持兩類。舉例而言,旨在用于通用計(jì)算的高性能通用無序核可僅支持B類,旨在主要用于圖形和/或科學(xué)(吞吐量)計(jì)算的核可僅支持A類,并且旨在用于兩者的核可支持兩者(當(dāng)然,具有來自兩類的模板和指令的一些混合、但是并非來自兩類的所有模板和指令的核在本發(fā)明的范圍內(nèi))。同樣,單一處理器可包括多個(gè)核,所有核支持相同的類或者其中不同的核支持不同的類。舉例而言,在具有單獨(dú)的圖形和通用核的處理器中,圖形核中的旨在主要用于圖形和/或科學(xué)計(jì)算的一個(gè)核可僅支持A類,而通用核中的一個(gè)或多個(gè)可以是具有旨在用于通用計(jì)算的僅支持B類的無序執(zhí)行和寄存器重命名的高性能通用核。當(dāng)然,在本發(fā)明的不同實(shí)施例中,來自一類的特征也可在其他類中實(shí)現(xiàn)??墒挂愿呒壵Z言撰寫的程序成為(例如,及時(shí)編譯或者統(tǒng)計(jì)編譯)各種不同的可執(zhí)行形式,包括:1)僅具有用于執(zhí)行的目標(biāo)處理器支持的類的指令的形式;或者2)具有使用所有類的指令的不同組合而編寫的替代例程且具有選擇這些例程以基于由當(dāng)前正在執(zhí)行代碼的處理器支持的指令而執(zhí)行的控制流代碼的形式。
[0106]示例性專用向量友好指令格式
[0107]圖7是示出根據(jù)本發(fā)明的實(shí)施例的示例性專用向量友好指令格式的框圖。圖7示出專用向量友好指令格式700,其指定位置、尺寸、解釋和字段的次序、以及那些字段中的一些字段的值,在這個(gè)意義上向量友好指令格式700是專用的。專用向量友好指令格式700可用于擴(kuò)展x86指令集,并且由此一些字段類似于在現(xiàn)有x86指令集及其擴(kuò)展(例如,AVX)中使用的那些字段或與之相同。該格式保持與具有擴(kuò)展的現(xiàn)有x86指令集的前綴編碼字段、實(shí)操作碼字節(jié)字段、MOD R/M字段、SIB字段、位移字段、以及立即數(shù)字段一致。示出來自圖6的字段,來自圖7的字段映射到來自圖7的字段。
[0108]應(yīng)當(dāng)理解,雖然出于說明的目的在通用向量友好指令格式600的上下文中參考專用向量友好指令格式700描述了本發(fā)明的實(shí)施例,但是本發(fā)明不限于專用向量友好指令格式700,除非另有聲明。例如,通用向量友好指令格式600構(gòu)想各種字段的各種可能的尺寸,而專用向量友好指令格式700被示為具有特定尺寸的字段。作為具體示例,盡管在專用向量友好指令格式700中數(shù)據(jù)元素寬度字段664被示為一位字段,但是本發(fā)明不限于此(即,通用向量友好指令格式600構(gòu)想數(shù)據(jù)元素寬度字段664的其他尺寸)。
[0109]通用向量友好指令格式600包括以下列出的按照圖7A中示出的順序的如下字段。
[0110]EVEX前綴(字節(jié)0-3) 702 —以四字節(jié)形式進(jìn)行編碼。
[0111]格式字段640(EVEX字節(jié)0,位[7:0]) —第一字節(jié)(EVEX字節(jié)O)是格式字段640,并且它包含0x62 (在本發(fā)明的一個(gè)實(shí)施例中用于區(qū)分向量友好指令格式的唯一值)。
[0112]第二一第四字節(jié)(EVEX字節(jié)1-3)包括提供專用能力的多個(gè)位字段。
[0113]REX 字段 705 (EVEX 字節(jié) I,位[7-5]) —由 EVEX.R 位字段(EVEX 字節(jié) I,位[7] - R)、EVEX.X 位字段(EVEX 字節(jié) 1,位[6] - X)以及(757BEX 字節(jié) 1,位[5] - B)組成。EVEX.R、EVEX.X和EVEX.B位字段提供與對應(yīng)VEX位字段相同的功能,并且使用I補(bǔ)碼的形式進(jìn)行編碼,即ZMMO被編碼為1111B,ZMM15被編碼為0000B。這些指令的其他字段對如在本領(lǐng)域中已知的寄存器索引的較低三個(gè)位(rrr、xxx、以及bbb)進(jìn)行編碼,由此可通過增加EVEX.R、EVEX.X 以及 EVEX.B 來形成 Rrrr、Xxxx 以及 Bbbb。
[0114]REX’字段610—這是REX’字段610的第一部分,并且是用于對擴(kuò)展的32個(gè)寄存器集合的較高16個(gè)或較低16個(gè)寄存器進(jìn)行編碼的EVEX.R’位字段(EVEX字節(jié)1,位[4] -R,)。在本發(fā)明的一個(gè)實(shí)施例中,該位與以下指示的其他位一起以位反轉(zhuǎn)的格式存儲(chǔ)以(在公知x86的32位模式下)與實(shí)操作碼字節(jié)是62的BOUND指令進(jìn)行區(qū)分,但是在MOD R/Μ字段(在下文中描述)中不接受MOD字段中的值11 ;本發(fā)明的替代實(shí)施例不以反轉(zhuǎn)的格式存儲(chǔ)該指示的位以及其他指示的位。值I用于對較低16個(gè)寄存器進(jìn)行編碼。換句話說,通過組合EVEX.R’、EVEX.R、以及來自其他字段的其他RRR來形成R’ Rrrr。
[0115]操作碼映射字段715(EVEX字節(jié)1,位[3:0] - _m)-其內(nèi)容對隱含的前導(dǎo)操作碼字節(jié)(0F、0F38、或0F3)進(jìn)行編碼。
[0116]數(shù)據(jù)元素寬度字段664 (EVEX字節(jié)2,位[7] - W) 一由記號EVEX.W表示。EVEX.W用于定義數(shù)據(jù)類型(32位數(shù)據(jù)元素或64位數(shù)據(jù)元素)的粒度(尺寸)。
[0117]EVEX.vvvv720 (EVEX 字節(jié) 2,位[6:3] -vvvv) 一 EVEX.vvvv 的作用可包括如下:1)EVEX.vvvv編碼第一源寄存器操作數(shù)且對具有兩個(gè)或兩個(gè)以上源操作數(shù)的指令有效,第一源寄存器操作數(shù)以反轉(zhuǎn)(I補(bǔ)碼)的形式被指定;2) EVEX.vvvv編碼目的地寄存器操作數(shù),目的地寄存器操作數(shù)針對特定向量位移以I補(bǔ)碼的形式被指定;或者3)EVEX.vvvv不編碼任何操作數(shù),保留該字段,并且應(yīng)當(dāng)包含1111b。由此,EVEX.vvvv字段720對以反轉(zhuǎn)(I補(bǔ)碼)的形式存儲(chǔ)的第一源寄存器指定符的4個(gè)低階位進(jìn)行編碼。取決于該指令,額外不同的EVEX位字段用于將指定符尺寸擴(kuò)展到32個(gè)寄存器。
[0118]EVEX.U668類字段(EVEX字節(jié)2,位[2]-U) 一如果EVEX.U = 0,則它指示A類或EVEX.UO ;如果 EVEX.U = 1,則它指示 B 類或 EVEX.Ul。
[0119]前綴編碼字段725 (EVEX字節(jié)2,位[1:0]-ρρ) —提供了用于基礎(chǔ)操作字段的附加位。除了對以EVEX前綴格式的傳統(tǒng)SSE指令提供支持以外,這也具有壓縮SMD前綴的益處(EVEX前綴只需要2位,而不是需要字節(jié)來表達(dá)SMD前綴)。在一個(gè)實(shí)施例中,為了支持使用以傳統(tǒng)格式和以EVEX前綴格式的SMD前綴(66H、F2H、F3H)的傳統(tǒng)SSE指令,將這些傳統(tǒng)SMD前綴編碼成SMD前綴編碼字段;并且在運(yùn)行時(shí)在提供給解碼器的PLA之前被擴(kuò)展成傳統(tǒng)SMD前綴(因此PLA可執(zhí)行傳統(tǒng)和EVEX格式的這些傳統(tǒng)指令,而無需修改)。雖然較新的指令可將EVEX前綴編碼字段的內(nèi)容直接作為操作碼擴(kuò)展,但是為了一致性,特定實(shí)施例以類似的方式擴(kuò)展,但允許由這些傳統(tǒng)SIMD前綴指定不同的含義。替代實(shí)施例可重新設(shè)計(jì)PLA以支持2位SMD前綴編碼,并且由此不需要擴(kuò)展。
[0120]α 字段 652 (EVEX 字節(jié) 3,位[7] - EH,也稱為 EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫掩碼控制、以及EVEX.N;也以α示出)一如先前所述,該字段是針對上下文的。
[0121]β 字段 654 (EVEX 字節(jié) 3,位[6:4]_SSS,也稱為 EVEX.s2_。、EVEX.r2_。、EVEX.rrl、EVEX.LLO、EVEX.LLB ;也以β β β示出)一如先前所述,該字段是針對上下文的。
[0122]REX’字段610 —這是REX’字段的其余部分,并且是可用于對擴(kuò)展的32個(gè)寄存器集合的較高16個(gè)或較低16個(gè)寄存器進(jìn)行編碼的EVEX.V’位字段(EVEX字節(jié)3,位[3] - V’)。該位以位反轉(zhuǎn)的格式存儲(chǔ)。值I用于對較低16個(gè)寄存器進(jìn)行編碼。換句話說,通過組合EVEX.V’、EVEX.vvvv 來形成 V’ VVVV。
[0123]寫掩碼字段670 (EVEX字節(jié)3,位[2:0]_kkk) —其內(nèi)容指定寫掩碼寄存器中的寄存器索引,如先前所述。在本發(fā)明的一個(gè)實(shí)施例中,特定值EVEX.kkk = 000具有暗示沒有寫掩碼用于特定指令的特殊行為(這可以各種方式實(shí)現(xiàn),包括使用硬連線到所有的寫掩碼或者旁路掩碼硬件的硬件來實(shí)現(xiàn))。
[0124]實(shí)操作碼字段730 (字節(jié)4)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中被指定。
[0125]MOD R/Μ字段740 (字節(jié)5)包括MOD字段742、Reg字段744、以及R/Μ字段746。如先前所述的,MOD字段742的內(nèi)容將存儲(chǔ)器訪問和非存儲(chǔ)器訪問操作區(qū)分開。Reg字段744的作用可被歸結(jié)為兩種情形:對目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼;或者被視為操作碼擴(kuò)展且不用于對任何指令操作數(shù)進(jìn)行編碼。R/Μ字段746的作用可包括如下:對引用存儲(chǔ)器地址的指令操作數(shù)進(jìn)行編碼;或者對目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼。
[0126]比例、索引、基址(SIB)字節(jié)(字節(jié)6) —如先前所述的,比例字段650的內(nèi)容用于存儲(chǔ)器地址生成。SIB.xxx754和SIB.bbb756 一先前已經(jīng)針對寄存器索引Xxxx和Bbbb提及了這些字段的內(nèi)容。
[0127]位移字段662A (字節(jié)7-10) —當(dāng)MOD字段742包含10時(shí),字節(jié)7_10是位移字段662A,并且它與傳統(tǒng)32位位移(disp32) —樣地工作,并且以字節(jié)粒度工作。
[0128]位移因數(shù)字段662B (字節(jié)7) —當(dāng)MOD字段742包含OI時(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是dispS的重新解釋;當(dāng)使用位移因數(shù)字段662B時(shí),通過將位移因數(shù)字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)訪問的尺寸(N)來確定實(shí)際位移。該類型的位移被稱為disp8*N。這減小了平均指令長度(單個(gè)字節(jié)用于位移,但具有大得多的范圍)。這種壓縮位移基于有效位移是存儲(chǔ)器訪問的粒度的倍數(shù)的假設(shè),并且由此地址偏移量的冗余低階位不需要被編碼。換句話說,位移因數(shù)字段662B替代傳統(tǒng)x86指令集8位位移。由此,位移因數(shù)字段662B以與x86指令集8位位移相同的方式(因此在ModRM/SIB編碼規(guī)則中沒有變化)進(jìn)行編碼,唯一的不同在于,將dispS超載至disp8*N。換句話說,在編碼規(guī)則或編碼長度中沒有變化,而僅在通過硬件對位移值的解釋中有變化(這需要按存儲(chǔ)器操作數(shù)的尺寸按比例縮放位移量以獲得字節(jié)式地址偏移量)。
[0129]立即數(shù)字段672如先前所述地操作。
[0130]完整操作碼字段
[0131]圖7B是示出根據(jù)本發(fā)明的實(shí)施例的構(gòu)成完整操作碼字段674的具有專用向量友好指令格式700的字段的框圖。具體地,完整操作碼字段674包括格式字段640、基礎(chǔ)操作字段642、以及數(shù)據(jù)元素寬度(W)字段664?;A(chǔ)操作字段642包括前綴編碼字段725、操作碼映射字段715以及實(shí)操作碼字段730。
[0132]寄存器索引字段
[0133]圖7C是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的構(gòu)成寄存器索引字段644的具有專用向量友好指令格式700的字段的框圖。具體地,寄存器索引字段644包括REX字段705、REX’字段 710、MODR/M.reg 字段 744、MODR/M.r/m 字段 746、VVVV 字段 720、xxx 字段 754 以及bbb 字段 756。
[0134]擴(kuò)充操作字段
[0135]圖7D是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的構(gòu)成擴(kuò)充操作字段650的具有專用向量友好指令格式700的字段的框圖。當(dāng)類(U)字段668包含O時(shí),它表明EVEX.U0(A類668A);當(dāng)它包含I時(shí),它表明EVEX.Ul (B類668B)。當(dāng)U = O且MOD字段742包含11 (表明無存儲(chǔ)器訪問操作)時(shí),α字段652 (EVEX字節(jié)3,位[7] - EH)被解釋為rs字段652A。當(dāng)rs字段652A包含I (舍入652A.1)時(shí),β字段654 (EVEX字節(jié)3,位[6:4] - SSS)被解釋為舍入控制字段654A。舍入控制字段654A包括一位SAE字段656和兩位舍入操作字段658。當(dāng)rs字段652A包含O (數(shù)據(jù)變換652A.2)時(shí),β字段654 (EVEX字節(jié)3,位[6:4] - SSS)被解釋為三位數(shù)據(jù)變換字段654Β。當(dāng)U = O且MOD字段742包含00、01或10 (表明存儲(chǔ)器訪問操作)時(shí),α字段652 (EVEX字節(jié)3,位[7] -EH)被解釋為驅(qū)逐提示(EH)字段652B且β字段654(EVEX字節(jié)3,位[6:4] - SSS)被解釋為三位數(shù)據(jù)操縱字段654C。
[0136]當(dāng)U = I時(shí),α字段652 (EVEX字節(jié)3,位[7] - EH)被解釋為寫掩碼控制(Z)字段652C。當(dāng)U = I且MOD字段742包含11 (表明無存儲(chǔ)器訪問操作)時(shí),β字段654的一部分(EVEX字節(jié)3,位[4] - S0)被解釋為RL字段657Α ;當(dāng)它包含I (舍入657Α.1)時(shí),β字段654的其余部分(EVEX字節(jié)3,位[6_5] - S2^1)被解釋為舍入操作字段659A,而當(dāng)RL字段657A包含0(VSIZE657.A2)時(shí),β字段654的其余部分(EVEX字節(jié)3,位[6-5]-?^)被解釋為向量長度字段659B(EVEX字節(jié)3,位[6_5] - L1J。當(dāng)U= I且MOD字段742包含00、01或10(表明存儲(chǔ)器訪問操作)時(shí),β字段654(EVEX字節(jié)3,位[6:4] - SSS)被解釋為向量長度字段659B (EVEX字節(jié)3,位[6-5] - L卜0)和廣播字段657B (EVEX字節(jié)3,位[4] - B)。
[0137]示例性寄存器架構(gòu)
[0138]圖8是根據(jù)本發(fā)明的一個(gè)實(shí)施例的寄存器架構(gòu)800的框圖。在所示出的實(shí)施例中,有32個(gè)512位寬的向量寄存器810 ;這些寄存器被引用為zmmO到zmm31。較低的16zmm寄存器的較低階256個(gè)位覆蓋在寄存器ymmO-16上。較低的16zmm寄存器的較低階128個(gè)位(ymm寄存器的較低階128個(gè)位)覆蓋在寄存器xmmO-15上。專用向量友好指令格式700對這些覆蓋的寄存器組操作,如在以下表格中所示的。
[0139]
可調(diào)節(jié)向量長類操作寄存器
Jt____
不包括向量長A (圖6A;U=0) 61.0, 615, zmm寄存器(向度字段659B625,630 量長度是64
的指令模板__字節(jié))
B (附圖6B; 612zmm寄存器(向
U=D量長度是64
___字節(jié))
包括向量長度B (附圖6B; 617,627zmm、ymm、或字段659B的U=I)xmm寄存器(向指令模板量長度是64


字節(jié)、32字節(jié)、


或16字節(jié)),

取決于向量長
___度字段659B
[0140]換句話說,向量長度字段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ù)元素位置保持與在指令之前相同或者歸零。
[0141]寫掩碼寄存器815 —在所示的實(shí)施例中,存在8個(gè)寫掩碼寄存器(kO至k7),每一寫掩碼寄存器的尺寸是64位。在替代實(shí)施例中,寫掩碼寄存器815的尺寸是16位。如先前所述的,在本發(fā)明的一個(gè)實(shí)施例中,向量掩碼寄存器kO無法用作寫掩碼;當(dāng)正常指示kO的編碼用作寫掩碼時(shí),它選擇硬連線的寫掩碼OxFFFF,從而有效地停用該指令的寫掩碼操作。
[0142]通用寄存器825——在所示出的實(shí)施例中,有十六個(gè)64位通用寄存器,這些寄存器與現(xiàn)有的x86尋址模式一起使用來尋址存儲(chǔ)器操作數(shù)。這些寄存器通過名稱RAX、RBX、RCX、RDX、RBP、RS1、RD1、RSP 以及 R8 到 R15 來引用。
[0143]標(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ù)。
[0144]本發(fā)明的替代實(shí)施例可以使用較寬的或較窄的寄存器。另外,本發(fā)明的替代實(shí)施例可以使用更多、更少或不同的寄存器組和寄存器。
[0145]示例性核架構(gòu)、處理器和計(jì)算機(jī)架構(gòu)
[0146]處理器核可以用出于不同目的的不同方式在不同的處理器中實(shí)現(xiàn)。例如,這樣的核的實(shí)現(xiàn)可以包括:1)旨在用于通用計(jì)算的通用有序核;2)預(yù)期用于通用計(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í)被稱為應(yīng)用核或應(yīng)用處理器)、以上描述的協(xié)處理器和附加功能包括在同一管芯上的芯片上系統(tǒng)。接著描述示例性核架構(gòu),隨后描述示例性處理器和計(jì)算機(jī)架構(gòu)。
[0147]示例性核架構(gòu)
[0148]有序和無序核框圖
[0149]圖9A是示出根據(jù)本發(fā)明的各實(shí)施例的示例性有序流水線和示例性的寄存器重命名的無序發(fā)布/執(zhí)行流水線的框圖。圖9B是示出根據(jù)本發(fā)明的各實(shí)施例的要包括在處理器中的有序架構(gòu)核的示例性實(shí)施例和示例性的寄存器重命名的無序發(fā)布/執(zhí)行架構(gòu)核的框圖。圖9A-B中的實(shí)線框示出了有序流水線和有序核,而可選增加的虛線框示出了寄存器重命名的、無序發(fā)布/執(zhí)行流水線和核。給定有序方面是無序方面的子集的情況下,將描述無序方面。
[0150]在圖9A中,處理器流水線900包括取出級902、長度解碼級904、解碼級906、分配級908、重命名級910、調(diào)度(也稱為分派或發(fā)布)級912、寄存器讀取/存儲(chǔ)器讀取級914、執(zhí)行級916、寫回/存儲(chǔ)器寫入級918、異常處理級922和提交級924。
[0151]圖9B示出了包括耦合到執(zhí)行引擎單元950的前端單元930的處理器核990,且執(zhí)行引擎單元和前端單元兩者都耦合到存儲(chǔ)器單元970。核990可以是精簡指令集計(jì)算(RISC)核、復(fù)雜指令集計(jì)算(CISC)核、超長指令字(VLIW)核或混合或替代核類型。作為又一選項(xiàng),核990可以是專用核,諸如例如網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用計(jì)算圖形處理器單元(GPGPU)核、或圖形核等等。
[0152]前端單元930包括耦合到指令高速緩存單元934的分支預(yù)測單元932,該指令高速緩存單元934耦合到指令轉(zhuǎn)換后備緩沖器(TLB) 936,該指令轉(zhuǎn)換后備緩沖器936耦合到指令取出單元938,指令取出單元938耦合到解碼單元940。解碼單元940 (或解碼器)可解碼指令,并生成從原始指令解碼出的、或以其他方式反映原始指令的、或從原始指令導(dǎo)出的一個(gè)或多個(gè)微操作、微代碼進(jìn)入點(diǎn)、微指令、其他指令、或其他控制信號作為輸出。解碼單元940可使用各種不同的機(jī)制來實(shí)現(xiàn)。合適的機(jī)制的示例包括但不限于查找表、硬件實(shí)現(xiàn)、可編程邏輯陣列(PLA)、微代碼只讀存儲(chǔ)器(ROM)等。在一個(gè)實(shí)施例中,核990包括(例如,在解碼單元940中或否則在前端單元930內(nèi)的)用于存儲(chǔ)某些宏指令的微代碼的微代碼ROM或其他介質(zhì)。解碼單元940耦合到執(zhí)行引擎單元950中的重命名/分配單元952。
[0153]執(zhí)行引擎單元950包括重命名/分配器單元952,該重命名/分配器單元952耦合至引退單元954和一個(gè)或多個(gè)調(diào)度器單元956的集合。調(diào)度器單元956表示任何數(shù)目的不同調(diào)度器,包括預(yù)留站、中央指令窗等。這些調(diào)度器單元956耦合到物理寄存器組單元958。每個(gè)物理寄存器組單元958表示一個(gè)或多個(gè)物理寄存器組,其中不同的物理寄存器組存儲(chǔ)一種或多種不同的數(shù)據(jù)類型,諸如標(biāo)量整數(shù)、標(biāo)量浮點(diǎn)、打包整數(shù)、打包浮點(diǎn)、向量整數(shù)、向量浮點(diǎn)、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等。在一個(gè)實(shí)施例中,物理寄存器組單元958包括向量寄存器單元、寫掩碼寄存器單元和標(biāo)量寄存器單元。這些寄存器單元可以提供架構(gòu)向量寄存器、向量掩碼寄存器、和通用寄存器。物理寄存器組單元958與引退單元954重疊以示出可以用來實(shí)現(xiàn)寄存器重命名和無序執(zhí)行的各種方式(例如,使用重新排序緩沖器和引退寄存器組;使用將來的文件、歷史緩沖器和引退寄存器組;使用寄存器映射和寄存器池等等)。引退單元954和物理寄存器組單元958耦合到執(zhí)行群集960。執(zhí)行群集960包括一個(gè)或多個(gè)執(zhí)行單元962的集合和一個(gè)或多個(gè)存儲(chǔ)器訪問單元964的集合。執(zhí)行單元962可以對各種類型的數(shù)據(jù)(例如,標(biāo)量浮點(diǎn)、打包整數(shù)、打包浮點(diǎn)、向量整型、向量浮點(diǎn))執(zhí)行各種操作(例如,移位、加法、減法、乘法)。盡管一些實(shí)施例可以包括專用于特定功能或功能集合的多個(gè)執(zhí)行單元,但其他實(shí)施例可包括全部執(zhí)行所有功能的僅一個(gè)執(zhí)行單元或多個(gè)執(zhí)行單元。調(diào)度器單元956、物理寄存器組單元958和執(zhí)行群集960被示為可能有多個(gè),因?yàn)槟承?shí)施例為某些類型的數(shù)據(jù)/操作創(chuàng)建分開的流水線(例如,標(biāo)量整型流水線、標(biāo)量浮點(diǎn)/打包整型/打包浮點(diǎn)/向量整型/向量浮點(diǎn)流水線,和/或各自具有其自己的調(diào)度器單元、物理寄存器組單元和/或執(zhí)行群集的存儲(chǔ)器訪問流水線一以及在分開的存儲(chǔ)器訪問流水線的情況下,實(shí)現(xiàn)其中僅該流水線的執(zhí)行群集具有存儲(chǔ)器訪問單元964的某些實(shí)施例)。還應(yīng)當(dāng)理解,在使用分開的流水線的情況下,這些流水線中的一個(gè)或多個(gè)可以為無序發(fā)布/執(zhí)行,并且其余流水線可以為有序發(fā)布/執(zhí)行。
[0154]存儲(chǔ)器訪問單元964的集合耦合到存儲(chǔ)器單元970,該存儲(chǔ)器單元970包括耦合到數(shù)據(jù)高速緩存單元974的數(shù)據(jù)TLB單元972,其中數(shù)據(jù)高速緩存單元974耦合到二級(L2)高速緩存單元976。在一個(gè)示例性實(shí)施例中,存儲(chǔ)器訪問單元964可以包括加載單元、存儲(chǔ)地址單元和存儲(chǔ)數(shù)據(jù)單元,這些單元中的每一個(gè)單元耦合到存儲(chǔ)器單元970中的數(shù)據(jù)TLB單元972。指令高速緩存單元934還耦合到存儲(chǔ)器單元970中的二級(L2)高速緩存單元976。L2高速緩存單元976耦合到一個(gè)或多個(gè)其他級的高速緩存,并最終耦合到主存儲(chǔ)器。
[0155]作為示例,示例性寄存器重命名的、無序發(fā)布/執(zhí)行核架構(gòu)可以如下實(shí)現(xiàn)流水線900:1)指令取出938執(zhí)行取出和長度解碼級902和904 ;2)解碼單元940執(zhí)行解碼級906 ;3)重命名/分配器單元952執(zhí)行分配級908和重命名級910 ;4)調(diào)度器單元956執(zhí)行調(diào)度級912 ;5)物理寄存器組單元958和存儲(chǔ)器單元970執(zhí)行寄存器讀取/存儲(chǔ)器讀取級914 ;執(zhí)行群集960執(zhí)行執(zhí)行級916 ;6)存儲(chǔ)器單元970和物理寄存器組單元958執(zhí)行寫回/存儲(chǔ)器寫入級918 ;7)各單元可牽涉到異常處理級922 ;以及8)引退單元954和物理寄存器組單元958執(zhí)行提交級924。
[0156]核990可支持一個(gè)或多個(gè)指令集(例如,x86指令集(具有與較新版本一起添加的一些擴(kuò)展);加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集;加利福尼州桑尼維爾市的ARM控股的ARM指令集(具有諸如NEON等可選附加擴(kuò)展)),其中包括本文中描述的各指令。在一個(gè)實(shí)施例中,核990包括用于支持打包數(shù)據(jù)指令集擴(kuò)展(例如,AVX1、AVX2和/或先前描述的一些形式的一般向量友好指令格式(U = O和/或U= I))的邏輯,從而允許很多多媒體應(yīng)用使用的操作能夠使用打包數(shù)據(jù)來執(zhí)行。
[0157]應(yīng)當(dāng)理解,核可支持多線程化(執(zhí)行兩個(gè)或更多個(gè)并行的操作或線程的集合),并且可以按各種方式來完成該多線程化,此各種方式包括時(shí)分多線程化、同步多線程化(其中單個(gè)物理核為物理核正在同步多線程化的各線程中的每一個(gè)線程提供邏輯核)、或其組合(例如,時(shí)分取出和解碼以及此后諸如用丨ntel?超線程化技術(shù)來同步多線程化)。
[0158]盡管在無序執(zhí)行的上下文中描述了寄存器重命名,但應(yīng)當(dāng)理解,可以在有序架構(gòu)中使用寄存器重命名。盡管所示出的處理器的實(shí)施例還包括分開的指令和數(shù)據(jù)高速緩存單元934/974以及共享L2高速緩存單元976,但替代實(shí)施例可以具有用于指令和數(shù)據(jù)兩者的單個(gè)內(nèi)部高速緩存,諸如例如一級(LI)內(nèi)部高速緩存或多個(gè)級別的內(nèi)部高速緩存。在一些實(shí)施例中,該系統(tǒng)可包括內(nèi)部高速緩存和在核和/或處理器外部的外部高速緩存的組合?;蛘?,所有高速緩存都可以在核和/或處理器的外部。
[0159]具體的示例性有序核架構(gòu)
[0160]圖10A-B示出了更具體的示例性有序核架構(gòu)的框圖,該核將是芯片中的若干邏輯塊之一(包括相同類型和/或不同類型的其他核)。根據(jù)應(yīng)用,這些邏輯塊通過高帶寬的互連網(wǎng)絡(luò)(例如,環(huán)形網(wǎng)絡(luò))與一些固定的功能邏輯、存儲(chǔ)器I/o接口和其它必要的I/O邏輯通信。
[0161]圖1OA是根據(jù)本發(fā)明的各實(shí)施例的單個(gè)處理器核以及它與管芯上互連網(wǎng)絡(luò)1002的連接及其二級(L2)高速緩存1004的本地子集的框圖。在一個(gè)實(shí)施例中,指令解碼器1000支持具有打包數(shù)據(jù)指令集擴(kuò)展的x86指令集。LI高速緩存1006允許對進(jìn)入標(biāo)量和向量單元中的高速緩存存儲(chǔ)器的低等待時(shí)間訪問。盡管在一個(gè)實(shí)施例中(為了簡化設(shè)計(jì)),標(biāo)量單元1008和向量單元1010使用分開的寄存器集合(分別為標(biāo)量寄存器1012和向量寄存器1014),并且在這些寄存器之間轉(zhuǎn)移的數(shù)據(jù)被寫入到存儲(chǔ)器并隨后從一級(LI)高速緩存1006讀回,但是本發(fā)明的替代實(shí)施例可以使用不同的方法(例如使用單個(gè)寄存器集合或包括允許數(shù)據(jù)在這兩個(gè)寄存器組之間傳輸而無需被寫入和讀回的通信路徑)。
[0162]L2高速緩存的本地子集1004是全局L2高速緩存的一部分,該全局L2高速緩存被劃分成多個(gè)分開的本地子集,即每個(gè)處理器核一個(gè)本地子集。每個(gè)處理器核具有到其自己的L2高速緩存1004的本地子集的直接訪問路徑。被處理器核讀出的數(shù)據(jù)被存儲(chǔ)在其L2高速緩存子集1004中,并且可以與其他處理器核訪問其自己的本地L2高速緩存子集并行地被快速訪問。被處理器核寫入的數(shù)據(jù)被存儲(chǔ)在其自己的L2高速緩存子集1004中,并在必要的情況下從其它子集清除。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的一致性。環(huán)形網(wǎng)絡(luò)是雙向的,以允許諸如處理器核、L2高速緩存和其它邏輯塊之類的代理在芯片內(nèi)彼此通信。每個(gè)環(huán)形數(shù)據(jù)路徑為每個(gè)方向1012位寬。
[0163]圖1OB是根據(jù)本發(fā)明的各實(shí)施例的圖1OA中的處理器核的一部分的展開圖。圖1OB包括LI高速緩存1004的LI數(shù)據(jù)高速緩存1006A部分,以及關(guān)于向量單元1010和向量寄存器1014的更多細(xì)節(jié)。具體地說,向量單元1010是16寬向量處理單元(VPU)(見16寬ALU1028),該單元執(zhí)行整型、單精度浮點(diǎn)以及雙精度浮點(diǎn)指令中的一個(gè)或多個(gè)。該VPU通過混合單元1020支持對寄存器輸入的混合、通過數(shù)值轉(zhuǎn)換單元1022A-B支持?jǐn)?shù)值轉(zhuǎn)換、并通過復(fù)制單元1024支持對存儲(chǔ)器輸入的復(fù)制。寫掩碼寄存器1026允許斷言所得的向量寫入。
[0164]具有集成存儲(chǔ)器控制器和圖形器件的處理器
[0165]圖11是根據(jù)本發(fā)明的各實(shí)施例可能具有一個(gè)以上核、可能具有集成存儲(chǔ)器控制器、以及可能具有集成圖形器件的處理器1100的框圖。圖11中的實(shí)線框示出具有單個(gè)核1102A、系統(tǒng)代理1100、一個(gè)或多個(gè)總線控制器單元1110的集合的處理器1100,而虛線框的可選附加示出具有多個(gè)核1102A-N、系統(tǒng)代理單元1110中的一個(gè)或多個(gè)集成存儲(chǔ)器控制器單元1114的集合以及專用邏輯1108的替代處理器1100。
[0166]因此,處理器1100的不同實(shí)現(xiàn)可包括:1)CPU,其中專用邏輯1108是集成圖形和/或科學(xué)(吞吐量)邏輯(其可包括一個(gè)或多個(gè)核),并且核1102A-N是一個(gè)或多個(gè)通用核(例如,通用的有序核、通用的無序核、這兩者的組合);2)協(xié)處理器,其中核1102A-N是旨在主要用于圖形和/或科學(xué)(吞吐量)的多個(gè)專用核;以及3)協(xié)處理器,其中核1102A-N是多個(gè)通用有序核。因此,處理器1100可以是通用處理器、協(xié)處理器或?qū)S锰幚砥鳎T如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高吞吐量的集成眾核(MIC)協(xié)處理器(包括30個(gè)或更多核)、或嵌入式處理器等。該處理器可以被實(shí)現(xiàn)在一個(gè)或多個(gè)芯片上。處理器1100可以是一個(gè)或多個(gè)襯底的一部分,和/或可以使用諸如例如BiCM0S、CM0S或NMOS等的多個(gè)加工技術(shù)中的任何一個(gè)技術(shù)將處理器1100實(shí)現(xiàn)在一個(gè)或多個(gè)襯底上。
[0167]存儲(chǔ)器層次結(jié)構(gòu)包括在各核內(nèi)的一個(gè)或多個(gè)級別的高速緩存、一個(gè)或多個(gè)共享高速緩存單元1106的集合、以及耦合至集成存儲(chǔ)器控制器單元1114的集合的外部存儲(chǔ)器(未示出)。該共享高速緩存單元1106的集合可以包括一個(gè)或多個(gè)中間級高速緩存,諸如二級(L2)、三級(L3)、四級(L4)或其他級別的高速緩存、末級高速緩存(LLC)、和/或其組合。盡管在一個(gè)實(shí)施例中,基于環(huán)的互連單元1112將集成圖形邏輯1108、共享高速緩存單元1106的集合以及系統(tǒng)代理單元1110/集成存儲(chǔ)器控制器單元1114互連,但替代實(shí)施例可使用任何數(shù)量的公知技術(shù)來將這些單元互連。在一個(gè)實(shí)施例中,可以維護(hù)一個(gè)或多個(gè)高速緩存單元1106和核1102A-N之間的一致性(coherency)。
[0168]在一些實(shí)施例中,核1102A-N中的一個(gè)或多個(gè)核能夠多線程化。系統(tǒng)代理1110包括協(xié)調(diào)和操作核1102A-N的那些組件。系統(tǒng)代理單元1110可包括例如功率控制單元(PCU)和顯示單元。P⑶可以是或包括用于調(diào)整核1102A-N和集成圖形邏輯1108的功率狀態(tài)所需的邏輯和組件。顯示單元用于驅(qū)動(dòng)一個(gè)或多個(gè)外部連接的顯示器。
[0169]核1,102A-N在架構(gòu)指令集方面可以是同構(gòu)的或異構(gòu)的;即,這些核1102A-N中的兩個(gè)或更多個(gè)核可能能夠執(zhí)行相同的指令集,而其他核可能能夠執(zhí)行該指令集的僅僅子集或不同的指令集。
[0170]示例性計(jì)算機(jī)架構(gòu)
[0171]圖12-15是示例性計(jì)算機(jī)架構(gòu)的框圖。本領(lǐng)域已知的對膝上型設(shè)備、臺(tái)式機(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í)行邏輯的多個(gè)系統(tǒng)和電子設(shè)備一般都是合適的。
[0172]現(xiàn)在參見圖12,所示為根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)1300的框圖。系統(tǒng)1200可以包括一個(gè)或多個(gè)處理器1210、1215,這些處理器耦合到控制器中樞1220。在一個(gè)實(shí)施例中,控制器中樞1220包括圖形存儲(chǔ)器控制器中樞(GMCH) 1290和輸入/輸出中樞(1H) 1250(其可以在分開的芯片上);GMCH1290包括存儲(chǔ)器和圖形控制器,存儲(chǔ)器1240和協(xié)處理器1245耦合到該存儲(chǔ)器和圖形控制器;10H1250將輸入/輸出(I/O)設(shè)備1260耦合到GMCH1290。或者,存儲(chǔ)器和圖形控制器中的一個(gè)或兩者可以被集成在處理器內(nèi)(如本文中所描述的),存儲(chǔ)器1240和協(xié)處理器1245直接耦合到處理器1210以及控制器中樞1220,控制器中樞1220與10H1250處于單個(gè)芯片中。
[0173]附加處理器1215的任選性質(zhì)用虛線表示在圖12中。每一處理器1210、1215可包括本文中描述的處理核中的一個(gè)或多個(gè),并且可以是處理器1100的某一版本。
[0174]存儲(chǔ)器1240可以是例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、相變存儲(chǔ)器(PCM)或這兩者的組合。對于至少一個(gè)實(shí)施例,控制器中樞1220經(jīng)由諸如前端總線(FSB)之類的多分支總線、諸如快速通道互連(QPI)之類的點(diǎn)對點(diǎn)接口、或者類似的連接1295與處理器1210、1215進(jìn)行通信。
[0175]在一個(gè)實(shí)施例中,協(xié)處理器1245是專用處理器,諸如例如高吞吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。在一個(gè)實(shí)施例中,控制器中樞1220可以包括集成圖形加速器。
[0176]在物理資源1210、1215之間可以存在包括架構(gòu)、微架構(gòu)、熱、和功耗特征等的一系列品質(zhì)度量方面的各種差異。
[0177]在一個(gè)實(shí)施例中,處理器1210執(zhí)行控制一般類型的數(shù)據(jù)處理操作的指令。協(xié)處理器指令可嵌入在這些指令中。處理器1210將這些協(xié)處理器指令識(shí)別為應(yīng)當(dāng)由附連的協(xié)處理器1245執(zhí)行的類型。因此,處理器1210在協(xié)處理器總線或者其他互連上將這些協(xié)處理器指令(或者表示協(xié)處理器指令的控制信號)發(fā)布到協(xié)處理器1245。協(xié)處理器1245接受并執(zhí)行所接收的協(xié)處理器指令。
[0178]現(xiàn)在參考圖13,所示為根據(jù)本發(fā)明的一實(shí)施例的更具體的第一示例性系統(tǒng)1300的框圖。如圖13所示,多處理器系統(tǒng)1300是點(diǎn)對點(diǎn)互連系統(tǒng),并包括經(jīng)由點(diǎn)對點(diǎn)互連1350耦合的第一處理器1370和第二處理器1380。處理器1370和1380中的每一個(gè)都可以是處理器1100的某一版本。在本發(fā)明的一個(gè)實(shí)施例中,處理器1370和1380分別是處理器1210和1215,而協(xié)處理器1338是協(xié)處理器1245。在另一實(shí)施例中,處理器1370和1380分別是處理器1210和協(xié)處理器1245。
[0179]處理器1370和1380被示為分別包括集成存儲(chǔ)器控制器(MC)單元1372和1382。處理器1370還包括作為其總線控制器單元的一部分的點(diǎn)對點(diǎn)(P-P)接口 1376和1378 ;類似地,第二處理器1380包括點(diǎn)對點(diǎn)接口 1386和1388。處理器1370、1380可以使用點(diǎn)對點(diǎn)(P-P)電路1378、1388經(jīng)由P-P接口 1350來交換信息。如圖13所示,IMC1372和1382將各處理器耦合至相應(yīng)的存儲(chǔ)器,即存儲(chǔ)器1332和存儲(chǔ)器1334,這些存儲(chǔ)器可以是本地附連至相應(yīng)的處理器的主存儲(chǔ)器的部分。
[0180]處理器1370、1380可各自經(jīng)由使用點(diǎn)對點(diǎn)接口電路1376、1394、1386、1398的各個(gè)P-P接口 1352、1354與芯片組1398交換信息。芯片組1390可以可選地經(jīng)由高性能接口 1339與協(xié)處理器1338交換信息。在一個(gè)實(shí)施例中,協(xié)處理器1338是專用處理器,諸如例如高吞吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、或嵌入式處理器等等。
[0181]共享高速緩存(未示出)可以被包括在任一處理器之內(nèi),或被包括在兩個(gè)處理器外部但仍經(jīng)由P-P互連與這些處理器連接,從而如果將某處理器置于低功率模式時(shí),可將任一處理器或兩個(gè)處理器的本地高速緩存信息存儲(chǔ)在該共享高速緩存中。
[0182]芯片組1390可經(jīng)由接口 1396耦合至第一總線1316。在一個(gè)實(shí)施例中,第一總線1316可以是外圍組件互連(PCI)總線,或諸如PCI Express總線或其它第三代I/O互連總線之類的總線,但本發(fā)明的范圍并不受此限制。
[0183]如圖13所示,各種I/O設(shè)備1314可以連同總線橋1318耦合到第一總線1316,總線橋1318將第一總線1316耦合至第二總線1320。在一個(gè)實(shí)施例中,諸如協(xié)處理器、高吞吐量MIC處理器、GPGPU的處理器、加速器(諸如例如圖形加速器或數(shù)字信號處理器(DSP)單元)、現(xiàn)場可編程門陣列或任何其他處理器的一個(gè)或多個(gè)附加處理器1315耦合到第一總線1316。在一個(gè)實(shí)施例中,第二總線1320可以是低引腳計(jì)數(shù)(LPC)總線。各種設(shè)備可以被耦合至第二總線1320,在一個(gè)實(shí)施例中這些設(shè)備包括例如鍵盤/鼠標(biāo)1322、通信設(shè)備1327以及諸如可包括指令/代碼和數(shù)據(jù)1328的盤驅(qū)動(dòng)器或其它大容量存儲(chǔ)設(shè)備的存儲(chǔ)單元1330。此外,音頻1/01324可以被耦合至第二總線1320。注意,其它架構(gòu)是可能的。例如,代替圖13的點(diǎn)對點(diǎn)架構(gòu),系統(tǒng)可以實(shí)現(xiàn)多分支總線或其它這類架構(gòu)。
[0184]現(xiàn)在參考圖14,所示為根據(jù)本發(fā)明的實(shí)施例的更具體的第二示例性系統(tǒng)1400的框圖。圖13和圖14中的相同部件用相同附圖標(biāo)記表示,并從圖14中省去了圖13中的某些方面,以避免使圖14的其它方面變得模糊。
[0185]圖14示出處理器1370、1380可分別包括集成存儲(chǔ)器和I/O控制邏輯(“CL”) 1372和1382。因此,CL1372、1382包括集成存儲(chǔ)器控制器單元并包括I/O控制邏輯。圖14不僅示出存儲(chǔ)器1332、1334耦合至CL1372、1382,而且還示出I/O設(shè)備1414也耦合至控制邏輯1372、1382。傳統(tǒng)I/O設(shè)備1415被耦合至芯片組1390。
[0186]現(xiàn)在參考圖15,所示為根據(jù)本發(fā)明的一實(shí)施例的SoC1500的框圖。在圖11中,相似的部件具有同樣的附圖標(biāo)記。另外,虛線框是更先進(jìn)的SoC的可選特征。在圖15中,互連單元1502被耦合至:應(yīng)用處理器1510,該應(yīng)用處理器包括一個(gè)或多個(gè)核202A-N的集合以及共享高速緩存單元1106 ;系統(tǒng)代理單元1110 ;總線控制器單元1116 ;集成存儲(chǔ)器控制器單元1114 ;一組或一個(gè)或多個(gè)協(xié)處理器1520,其可包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)單元1530 ;直接存儲(chǔ)器存取(DMA)單元1532 ;以及用于耦合至一個(gè)或多個(gè)外部顯示器的顯示單元1540。在一個(gè)實(shí)施例中,協(xié)處理器1520包括專用處理器,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、GPGPU、高吞吐量MIC處理器、或嵌入式處理器等等。
[0187]本文公開的機(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è)備。
[0188]可將程序代碼(諸如圖13中示出的代碼1330)應(yīng)用于輸入指令,以執(zhí)行本文描述的各功能并生成輸出信息??梢园匆阎绞綄⑤敵鲂畔?yīng)用于一個(gè)或多個(gè)輸出設(shè)備。為了本申請的目的,處理系統(tǒng)包括具有諸如例如數(shù)字信號處理器(DSP)、微控制器、專用集成電路(ASIC)或微處理器之類的處理器的任何系統(tǒng)。
[0189]程序代碼可以用高級程序化語言或面向?qū)ο蟮木幊陶Z言來實(shí)現(xiàn),以便與處理系統(tǒng)通信。在需要時(shí),也可用匯編語言或機(jī)器語言來實(shí)現(xiàn)程序代碼。事實(shí)上,本文中描述的機(jī)制不限于任何特定編程語言的范圍。在任一情形下,該語言可以是編譯語言或解釋語言。
[0190]至少一個(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ī)器中。
[0191]這樣的機(jī)器可讀存儲(chǔ)介質(zhì)可以包括但不限于通過機(jī)器或設(shè)備制造或形成的物品的非瞬態(tài)的有形安排,其包括存儲(chǔ)介質(zhì),諸如:硬盤;任何其它類型的盤,包括軟盤、光盤、緊致盤只讀存儲(chǔ)器(CD-ROM)、緊致盤可重寫(CD-RW)以及磁光盤;半導(dǎo)體器件,例如只讀存儲(chǔ)器(ROM)、諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)和靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)之類的隨機(jī)存取存儲(chǔ)器(RAM)、可擦除可編程只讀存儲(chǔ)器(EPROM)、閃存、電可擦除可編程只讀存儲(chǔ)器(EEPROM);相變存儲(chǔ)器(PCM);磁卡或光卡;或適于存儲(chǔ)電子指令的任何其它類型的介質(zhì)。
[0192]因此,本發(fā)明的各實(shí)施例還包括非瞬態(tài)的有形機(jī)器可讀介質(zhì),該介質(zhì)包含指令或包含設(shè)計(jì)數(shù)據(jù),諸如硬件描述語言(HDL),它定義本文中描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特征。這些實(shí)施例也被稱為程序產(chǎn)品。
[0193]仿真(包括二進(jìn)制變換、代碼變形等)
[0194]在一些情況下,指令轉(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)換器可以在處理器上、在處理器外、或者部分在處理器上且部分在處理器外。
[0195]圖16是根據(jù)本發(fā)明的各實(shí)施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn)制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的框圖。在所示的實(shí)施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但作為替代,該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來實(shí)現(xiàn)。圖16示出可以使用x86編譯器1604來編譯利用高級語言1602的程序,以生成可以由具有至少一個(gè)x86指令集核的處理器1606原生執(zhí)行的x86 二進(jìn)制代碼1606。具有至少一個(gè)x86指令集核的處理器1616表示任何處理器,這些處理器能通過兼容地執(zhí)行或以其他方式處理以下內(nèi)容來執(zhí)行與具有至少一個(gè)x86指令集核的英特爾處理器基本相同的功能:1)英特爾x86指令集核的指令集的本質(zhì)部分,或2)目標(biāo)為在具有至少一個(gè)x86指令集核的英特爾處理器上運(yùn)行的應(yīng)用或其它程序的目標(biāo)代碼版本,以便取得與具有至少一個(gè)x86指令集核的英特爾處理器基本相同的結(jié)果。x86編譯器1604表示用于生成x86 二進(jìn)制代碼1606(例如,目標(biāo)代碼)的編譯器,該二進(jìn)制代碼1606可通過或不通過附加的鏈接處理在具有至少一個(gè)x86指令集核的處理器1616上執(zhí)行。類似地,圖16示出可以使用替代的指令集編譯器1608來編譯利用高級語言1602的程序,以生成可以由不具有至少一個(gè)x86指令集核的處理器1614(例如具有執(zhí)行加利福尼亞州桑尼維爾市的MIPS技術(shù)公司的MIPS指令集、和/或執(zhí)行加利福尼亞州桑尼維爾市的ARM控股公司的ARM指令集的核的處理器)原生執(zhí)行的替代指令集二進(jìn)制代碼1610。指令轉(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的軟件、固件、硬件或其組合。
【權(quán)利要求】
1.一種裝置,包括: 執(zhí)行單元,用于執(zhí)行第一指令和第二指令,所述執(zhí)行單元包括以下: i)輸入寄存器空間,用于存儲(chǔ)當(dāng)執(zhí)行所述第一指令時(shí)將被復(fù)制的第一數(shù)據(jù)結(jié)構(gòu),并且用于存儲(chǔ)當(dāng)執(zhí)行所述第二指令時(shí)將被復(fù)制的第二數(shù)據(jù)結(jié)構(gòu),所述第一和第二數(shù)據(jù)結(jié)構(gòu)都是打包數(shù)據(jù)結(jié)構(gòu),所述第一打包數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值是所述第二打包數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值的兩倍大小,所述第一數(shù)據(jù)結(jié)構(gòu)是所述第二數(shù)據(jù)結(jié)構(gòu)的四倍大?。? ii)復(fù)制邏輯電路,用于當(dāng)執(zhí)行所述第一指令時(shí)復(fù)制所述第一數(shù)據(jù)結(jié)構(gòu)以便創(chuàng)建第一復(fù)制數(shù)據(jù)結(jié)構(gòu),并且用于當(dāng)執(zhí)行所述第二指令時(shí)復(fù)制所述第二數(shù)據(jù)結(jié)構(gòu)以便創(chuàng)建第二復(fù)制數(shù)據(jù)結(jié)構(gòu)。
2.如權(quán)利要求1所述的裝置,其中所述第一復(fù)制數(shù)據(jù)結(jié)構(gòu)包括所述第一數(shù)據(jù)結(jié)構(gòu)的兩個(gè)拷貝。
3.如權(quán)利要求1所述的裝置,其中所述第二復(fù)制數(shù)據(jù)結(jié)構(gòu)包括所述第二數(shù)據(jù)結(jié)構(gòu)的八個(gè)拷貝。
4.如權(quán)利要求1所述的裝置,其中所述第一打包數(shù)據(jù)結(jié)構(gòu)的所述數(shù)據(jù)值是每個(gè)64比特并且所述第二打包數(shù)據(jù)結(jié)構(gòu)的所述數(shù)據(jù)值是每個(gè)32比特。
5.如權(quán)利要求1所述的裝置,其中所述執(zhí)行單元進(jìn)一步包括用于執(zhí)行復(fù)制第三數(shù)據(jù)結(jié)構(gòu)十六次的第三指令以便創(chuàng)建第三復(fù)制結(jié)構(gòu)的邏輯,所述第三數(shù)據(jù)結(jié)構(gòu)不是打包數(shù)據(jù)結(jié)構(gòu),所述第三數(shù)據(jù)結(jié)構(gòu)具有其大小與所述第二數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值大小相同的數(shù)據(jù)值。
6.如權(quán)利要求5所述的裝置,其中所述第一打包數(shù)據(jù)結(jié)構(gòu)的所述數(shù)據(jù)值是浮點(diǎn)數(shù)據(jù)值并且所述第二打包數(shù)據(jù)結(jié)構(gòu)的所述數(shù)據(jù)值是浮點(diǎn)數(shù)據(jù)值。
7.如權(quán)利要求5所述的裝置,其中所述第一打包數(shù)據(jù)結(jié)構(gòu)的所述數(shù)據(jù)值是整型數(shù)據(jù)值并且所述第二打包數(shù)據(jù)結(jié)構(gòu)的所述數(shù)據(jù)值是整型數(shù)據(jù)值。
8.一種方法,包括: 取出用于第一指令的第一數(shù)據(jù)結(jié)構(gòu),所述第一數(shù)據(jù)結(jié)構(gòu)是第一打包數(shù)據(jù)結(jié)構(gòu); 通過在執(zhí)行單元內(nèi)復(fù)制所述第一數(shù)據(jù)結(jié)構(gòu)來執(zhí)行所述第一指令; 取出用于第二指令的第二數(shù)據(jù)結(jié)構(gòu),所述第二數(shù)據(jù)結(jié)構(gòu)是第二打包數(shù)據(jù)結(jié)構(gòu),所述第一打包數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值是所述第二打包數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值的兩倍大小,所述第一數(shù)據(jù)結(jié)構(gòu)是所述第二數(shù)據(jù)結(jié)構(gòu)的四倍大??; 通過在所述執(zhí)行單元內(nèi)復(fù)制所述第二數(shù)據(jù)結(jié)構(gòu)來執(zhí)行所述第二指令。
9.如權(quán)利要求8所述的方法,其中所述第一和第二數(shù)據(jù)值是浮點(diǎn)數(shù)據(jù)值。
10.如權(quán)利要求9所述的方法,其中所述第一數(shù)據(jù)值是64位并且所述第二數(shù)據(jù)值是32位。
11.如權(quán)利要求8所述的方法,進(jìn)一步包括: 取出用于第三指令的第三數(shù)據(jù)結(jié)構(gòu),所述第三數(shù)據(jù)結(jié)構(gòu)是未打包數(shù)據(jù)結(jié)構(gòu),所述第三數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值具有與所述第二數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值中的所述一個(gè)相同的大?。? 通過在所述執(zhí)行單元內(nèi)復(fù)制所述第三數(shù)據(jù)結(jié)構(gòu)十六次來執(zhí)行所述第三指令。
12.如權(quán)利要求11所述的方法,進(jìn)一步包括: 取出用于第四指令的第四數(shù)據(jù)結(jié)構(gòu),所述第四數(shù)據(jù)結(jié)構(gòu)是打包數(shù)據(jù)結(jié)構(gòu),所述第四數(shù)據(jù)結(jié)構(gòu)與所述第一數(shù)據(jù)結(jié)構(gòu)大小相同,所述第四數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值與所述第二數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值大小相同; 通過在所述執(zhí)行單元內(nèi)復(fù)制所述第四數(shù)據(jù)結(jié)構(gòu)兩次來執(zhí)行所述第四指令,所述第四數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值具有與所述第二數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值中的一個(gè)相同的大小。
13.如權(quán)利要求12所述的方法,其中所述第一、第二、第三和第四指令的所述數(shù)據(jù)值是浮點(diǎn)數(shù)據(jù)值。
14.如權(quán)利要求8所述的方法,進(jìn)一步包括: 取出用于第三指令的第三數(shù)據(jù)結(jié)構(gòu),所述第三數(shù)據(jù)結(jié)構(gòu)是打包數(shù)據(jù)結(jié)構(gòu),所述第三數(shù)據(jù)結(jié)構(gòu)與所述第一數(shù)據(jù)結(jié)構(gòu)大小相同,所述第三數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值與所述第二數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值大小相同; 通過在所述執(zhí)行單元內(nèi)復(fù)制所述第三數(shù)據(jù)結(jié)構(gòu)兩次來執(zhí)行所述第三指令,所述第三數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值具有與所述第二數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)值中的一個(gè)相同的大小。
15.一種裝置,包括: 執(zhí)行單元,用于執(zhí)行第一指令和第二指令,所述執(zhí)行單元包括以下:i)輸入寄存器空間,用于存儲(chǔ)為將被所述執(zhí)行單元執(zhí)行的多個(gè)指令中的每一個(gè)而將被復(fù)制的對應(yīng)的數(shù)據(jù)結(jié)構(gòu),用于所述多個(gè)指令中的每一個(gè)的所述對應(yīng)的數(shù)據(jù)結(jié)構(gòu)包括用于第一指令的第一未打包數(shù)據(jù)結(jié)構(gòu);用于第二指令的第二未打包數(shù)據(jù)結(jié)構(gòu),其中所述第二未打包數(shù)據(jù)結(jié)構(gòu)是所述第一未打包數(shù)據(jù)結(jié)構(gòu)的兩倍大小,用于第三指令的第三打包數(shù)據(jù)結(jié)構(gòu),其數(shù)據(jù)值與所述第一未打包數(shù)據(jù)結(jié)構(gòu)大小相同,用于第四指令的第四打包數(shù)據(jù)結(jié)構(gòu),其數(shù)據(jù)值與所述第二未打包數(shù)據(jù)結(jié)構(gòu)大小相同; ?)復(fù)制邏輯電路,用于:當(dāng)執(zhí)行所述第一指令時(shí)復(fù)制所述第一數(shù)據(jù)結(jié)構(gòu),當(dāng)執(zhí)行所述第二指令時(shí)復(fù)制所述第二數(shù)據(jù)結(jié)構(gòu),當(dāng)執(zhí)行所述第三指令時(shí)復(fù)制所述第三數(shù)據(jù)結(jié)構(gòu),當(dāng)執(zhí)行所述第四指令時(shí)復(fù)制所述第四數(shù)據(jù)結(jié)構(gòu)。
16.如權(quán)利要求15所述的裝置,其中所述第四指令的所述復(fù)制產(chǎn)生第四復(fù)制數(shù)據(jù)結(jié)構(gòu),所述第四復(fù)制數(shù)據(jù)結(jié)構(gòu)包含所述第四數(shù)據(jù)結(jié)構(gòu)的以下數(shù)量中任一數(shù)量的拷貝: 兩個(gè); 四個(gè);
17.如權(quán)利要求16所述的裝置,其中所述第三指令的所述復(fù)制產(chǎn)生第三復(fù)制數(shù)據(jù)結(jié)構(gòu),所述第三復(fù)制數(shù)據(jù)結(jié)構(gòu)包含所述第三數(shù)據(jù)結(jié)構(gòu)的以下數(shù)量中任一數(shù)量的拷貝: 兩個(gè); 四個(gè); 八個(gè)。
18.如權(quán)利要求15所述的裝置,其中所述第四打包數(shù)據(jù)結(jié)構(gòu)具有以下數(shù)量中任一數(shù)量的數(shù)據(jù)值: 兩個(gè); 四個(gè);
19.如權(quán)利要求18所述的裝置,其中所述第三打包數(shù)據(jù)結(jié)構(gòu)具有以下數(shù)量中任一數(shù)量的數(shù)據(jù)值: 兩個(gè); 四個(gè); 八個(gè)。
20.如權(quán)利要求15所述的裝置,其中所述第一數(shù)據(jù)結(jié)構(gòu)是32位并且所述第二數(shù)據(jù)結(jié)構(gòu)是64位。
【文檔編號】G06F9/30GK104185837SQ201180075876
【公開日】2014年12月3日 申請日期:2011年12月23日 優(yōu)先權(quán)日:2011年12月23日
【發(fā)明者】E·烏爾德-阿邁德-瓦爾, R·凡倫天, J·考博爾圣阿德里安, M·J·查尼, B·L·托爾 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1