實(shí)施例大體涉及計(jì)算機(jī)處理器的領(lǐng)域。更特定地,涉及包括機(jī)器級(jí)指令以從3D坐標(biāo)計(jì)算3D Z曲線索引的裝置。
背景技術(shù):
Z序曲線是一類空間填充曲線,它是域?yàn)閱挝粎^(qū)間[0,1]的連續(xù)函數(shù)。Z排序(例如,Morton排序)可以對(duì)大的數(shù)據(jù)集提供明顯的性能提高,在該大的數(shù)據(jù)集中多維局部性是重要的,包括疏和密矩陣運(yùn)算(尤其是矩陣乘法)、有限元分析、圖像分析、地震分析、光線跟蹤及其他。然而,從坐標(biāo)計(jì)算Z序曲線索引可能是計(jì)算密集型的。
附圖說明
可以從下列詳細(xì)描述結(jié)合下列圖獲得對(duì)本實(shí)施例的更好理解,其中:
圖1A-B圖示對(duì)于8×8矩陣的示范性Z序映射;
圖2A-B圖示根據(jù)實(shí)施例對(duì)于硬件Z曲線索引實(shí)現(xiàn)的示范性多級(jí)邏輯;
圖3示出根據(jù)實(shí)施例實(shí)現(xiàn)32位3D Z曲線索引指令的多級(jí)邏輯設(shè)置的框圖;
圖4示出根據(jù)實(shí)施例實(shí)現(xiàn)64位3D Z曲線索引指令的多級(jí)邏輯設(shè)置的框圖;
圖5是根據(jù)實(shí)施例從三個(gè)坐標(biāo)計(jì)算3D Z曲線索引的指令的操作數(shù)和邏輯的框圖;
圖6是根據(jù)實(shí)施例用于處理3D Z曲線索引指令的流程圖;
圖7A-B是圖示根據(jù)實(shí)施例的通用向量友好指令格式及其指令模板的框圖;
圖8A-D是圖示根據(jù)實(shí)施例的示范性特定向量友好指令格式的框圖;
圖9是根據(jù)一個(gè)實(shí)施例的寄存器架構(gòu)的框圖;
圖10A是圖示示范性有序提取、解碼、引退流水線和示范性寄存器重命名、無序發(fā)出/執(zhí)行流水線兩者的框圖;
圖10B是圖示要包括在實(shí)施例中的有序提取、解碼、引退核的示范性實(shí)施例和示范性寄存器重命名、無序發(fā)出/執(zhí)行架構(gòu)核兩者的框圖;
圖11A-B圖示示范性有序核架構(gòu)的框圖;
圖12是根據(jù)實(shí)施例具有超過一個(gè)核、集成存儲(chǔ)器控制器和集成圖形的處理器的框圖;
圖13圖示示范性計(jì)算系統(tǒng)的框圖;
圖14圖示第二示范性計(jì)算系統(tǒng)的框圖;
圖15圖示第三示范性計(jì)算系統(tǒng)的框圖;
圖16圖示根據(jù)實(shí)施例的芯片上系統(tǒng)(SoC)的框圖;以及
圖17圖示對(duì)比軟件指令轉(zhuǎn)換器的使用的框圖,軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn)制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令。
具體實(shí)施方式
在下列描述中,為了解釋目的,闡述許多特定細(xì)節(jié)以便提供對(duì)下文描述的實(shí)施例的全面解釋。然而,實(shí)施例可以在沒有這些特定細(xì)節(jié)中的一些的情況下實(shí)踐,這對(duì)于本領(lǐng)域內(nèi)技術(shù)人員將是明顯的。在其它實(shí)例中,以框圖的形式示出眾所周知的結(jié)構(gòu)和設(shè)備以避免使實(shí)施例的基本原理難以理解。在一個(gè)實(shí)施例中,描述架構(gòu)擴(kuò)展,其擴(kuò)展Intel架構(gòu)(IA),但基本原理不限于任何特定ISA。
向量和SIMD指令綜覽
某些類型的應(yīng)用通常需要對(duì)大量數(shù)據(jù)項(xiàng)執(zhí)行相同操作(稱為“數(shù)據(jù)并行性”)。單指令多數(shù)據(jù)(SIMD)指促使處理器對(duì)多個(gè)數(shù)據(jù)項(xiàng)執(zhí)行操作的一類指令。SIMD技術(shù)尤其適合于處理器,其可以將寄存器中的位邏輯分成許多大小固定的數(shù)據(jù)元素,其中的每個(gè)代表單獨(dú)值。例如,256位寄存器中的位可以規(guī)定為源操作數(shù),其要作為四個(gè)單獨(dú)64位緊縮(packed)數(shù)據(jù)元素(四字(Q)大小數(shù)據(jù)元素)、八個(gè)單獨(dú)32位緊縮數(shù)據(jù)元素(雙字(D)大小數(shù)據(jù)元素)、十六個(gè)單獨(dú)16位緊縮數(shù)據(jù)元素(字(W)大小數(shù)據(jù)元素)或三十二個(gè)單獨(dú)8位數(shù)據(jù)元素(字節(jié)(B)大小數(shù)據(jù)元素)而被操作。該類型的數(shù)據(jù)稱為“緊縮”數(shù)據(jù)類型或“向量”數(shù)據(jù)類型,并且該數(shù)據(jù)類型的操作數(shù)稱為緊縮數(shù)據(jù)操作數(shù)或向量操作數(shù)。也就是說,緊縮數(shù)據(jù)項(xiàng)或向量指緊縮數(shù)據(jù)元素序列,并且緊縮數(shù)據(jù)操作數(shù)或向量操作數(shù)是SIMD指令的源或目的地操作數(shù)(也稱為緊縮數(shù)據(jù)指令或向量指令)。
SIMD技術(shù)(例如由具有指令集的Intel? Core?處理器采用的技術(shù),該指令集包括x86、MMX?、流播SIMD擴(kuò)展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令)在應(yīng)用性能方面實(shí)現(xiàn)明顯提高。已發(fā)布額外SIMD擴(kuò)展集(稱為高級(jí)向量擴(kuò)展(AVX)(AVX1和AVX2)并且使用向量擴(kuò)展(VEX)編碼方案)(參見,例如參見2014年9月的Intel? 64和IA-32架構(gòu)軟件開發(fā)商手冊(cè);以及參見2014年9月的Intel? Intel?架構(gòu)指令集擴(kuò)展編程參考)。
Z曲線索引化綜覽
圖1A圖示對(duì)于圖示的8×8矩陣100的每個(gè)元素的Z序鍵映射(Z-order key mapping)。在顯示的每個(gè)元素內(nèi),較高階位在頂部并且較低階位在底部。Z曲線排序的一個(gè)實(shí)現(xiàn)通過使每個(gè)維度中原始索引中的每個(gè)的位交織(例如,洗牌)來執(zhí)行。在圖示的矩陣100的每個(gè)元素中示出的Z排序通過矩陣100中每個(gè)元素的dimension_1 101和dimension_2 102的逐位交織而生成。
例如,通過使每個(gè)維度的坐標(biāo)的位交織可以確定坐標(biāo)[2,3](例如,在dimension_1 101的二進(jìn)制010以及在dimension_2 102的二進(jìn)制011)處元素的Z曲線索引,從而得到001101(例如,0x0D)的二進(jìn)制Z曲線索引。示范性Z曲線索引值指示坐標(biāo)[2,3]處的矩陣元素是示范性矩陣100的Z序曲線中的第13個(gè)(零索引,以10為基)索引。
圖1B是通過相繼跟蹤Z序中元素的矩陣元素所創(chuàng)建的Z曲線200的圖形圖示。為了示范性目的,在圖1B中示出簡單的2D Z曲線和關(guān)聯(lián)的索引。對(duì)于具有有限位長的有限數(shù)量的坐標(biāo),用預(yù)先計(jì)算的值填充的查找表可以用于快速確定坐標(biāo)集的Z曲線索引。這可能因?yàn)樽鴺?biāo)的數(shù)量和大小在增加而變得不切實(shí)際。在一個(gè)實(shí)施例中,處理器包括32位和64位機(jī)器級(jí)指令來計(jì)算3D Z曲線索引以在分析較大數(shù)據(jù)集時(shí)降低計(jì)算開銷并且提高應(yīng)用性能。
計(jì)算3D Z曲線索引的機(jī)器級(jí)指令
在一個(gè)實(shí)施例中,機(jī)器指令促使處理器通過對(duì)輸入坐標(biāo)值執(zhí)行位操縱操作來計(jì)算3D Z曲線索引。
下面的表1示出示范性32位3D Z曲線索引的位操作。
表1 - 32位Z曲線位洗牌
如在表1中示出的,32位z曲線索引指令將每個(gè)源坐標(biāo)的10個(gè)低階位洗牌到32位目的地。在一個(gè)實(shí)施例中,每個(gè)源的這10個(gè)低階位交錯(cuò)分布到目的地,其中每源具有三位跨步且在源之間具有一位偏移,使得這些位分布到零位,然后在規(guī)定范圍內(nèi)每三個(gè)位。例如,src1位分布到位0、3、6…27;src2位分布到位1、4、7…28;并且src3位分布到位2、5、8…29。
下文的表2示出64位3D Z曲線索引指令的位操作。
表2 - 64位Z曲線位洗牌
如在表2中示出的,64位z曲線索引指令將每個(gè)源坐標(biāo)的20個(gè)低階位洗牌到64位目的地。在一個(gè)實(shí)施例中,每個(gè)源的這20個(gè)低階位交錯(cuò)分布到目的地,其中每源具有三位跨步且在源之間具有一位偏移,使得這些位分布到零位,然后在規(guī)定范圍內(nèi)每三個(gè)位。例如,src1位分布到位0、3、6…57;src2位分布到位1、4、7…58;并且src3位分布到位2、5、8…59。
用于計(jì)算32位Z曲線索引的示范性高級(jí)偽代碼在下文的表3中示出。用于計(jì)算64位Z曲線索引的示范性高級(jí)偽代碼在下文的表4中示出。偽代碼證實(shí)可以用于執(zhí)行在上文的表1和表2中示出的位分布的示范性高級(jí)邏輯。
表3 - 32位Z曲線索引偽代碼
表4 - 64位Z曲線索引偽代碼
圖2A-B圖示根據(jù)實(shí)施例對(duì)于硬件Z曲線索引實(shí)現(xiàn)的示范性多級(jí)邏輯。圖2A示出單級(jí)邏輯210,其包括XOR門212、移位電路214和AND門216。源輸入202可以是來自之前的邏輯級(jí)的源操作數(shù)或輸入。臨時(shí)寄存器集(例如,temp_A 204、temp_2 306)用于供應(yīng)控制值,其中temp_A 204向移位電路供應(yīng)移位值并且temp_B 206供應(yīng)位掩蔽,其將在經(jīng)由stage_out 218輸出數(shù)據(jù)之前施加。stage_out 218值對(duì)除最后的級(jí)以外的每個(gè)邏輯級(jí)供應(yīng)SRC 202。對(duì)于最后的級(jí),stage_out 218是對(duì)應(yīng)于作為源(例如,SRC 202)提供的初始坐標(biāo)的目的地輸出的一部分。
圖2B示出根據(jù)實(shí)施例實(shí)現(xiàn)3D Z曲線索引指令的多級(jí)邏輯設(shè)置的框圖。在這樣的實(shí)施例中,處理器包括執(zhí)行單元,其配置成對(duì)每個(gè)源輸入執(zhí)行邏輯操作并且使每坐標(biāo)分量組合成單個(gè)輸出。在一個(gè)實(shí)施例中,單級(jí)邏輯210的多個(gè)實(shí)例220(例如,對(duì)于32位是220A-E、對(duì)于64位是220A-F)設(shè)置成對(duì)單個(gè)輸入坐標(biāo)計(jì)算3D Z曲線索引的一部分。除最后的級(jí)以外的所有級(jí)的stage_out 218提供后續(xù)級(jí)的源。最后的級(jí)的stage_out 218提供與單個(gè)初始輸入坐標(biāo)關(guān)聯(lián)的Z曲線索引的部分。在一個(gè)實(shí)施例中,相應(yīng)坐標(biāo)的輸出則在輸出到目的地寄存器之前組合。
在執(zhí)行單元中可以串行或并行執(zhí)行計(jì)算每個(gè)Z曲線索引的相應(yīng)分量的操作。例如,計(jì)算Z曲線索引的單個(gè)宏指令可以解碼成多個(gè)微操作,其各自促使一個(gè)或多個(gè)執(zhí)行單元在使單獨(dú)中間值組合之前對(duì)每個(gè)源坐標(biāo)執(zhí)行操作。
圖3示出根據(jù)實(shí)施例實(shí)現(xiàn)32位3D Z曲線索引指令的多級(jí)邏輯設(shè)置的框圖。在一個(gè)實(shí)施例中,在圖2A中示出的邏輯210的多個(gè)實(shí)例可以耦合,如由圖2B中示出的邏輯級(jí)220A-E示出的。多級(jí)邏輯可以用于對(duì)每個(gè)坐標(biāo)執(zhí)行Z曲線索引位洗牌。第一邏輯級(jí)220A接受32位源輸入302,連同零左移位304和0x000003ff的掩蔽值306。第一邏輯級(jí)220A輸出308作為第二邏輯級(jí)220B的源而提供,該第二邏輯級(jí)220B接受16位左移位314和0xff0000ff的掩蔽值316作為輸入。第二邏輯級(jí)220B輸出318作為第三邏輯級(jí)220C的源而提供,該第三邏輯級(jí)220C接受八位左移位324和0x0300f00f的掩蔽值326作為輸入。第三邏輯級(jí)220C輸出328作為第四邏輯級(jí)220D的源而提供,該第四邏輯級(jí)220D接受四位左移位334和0x030c30c3的掩蔽值336作為輸入。第四邏輯級(jí)220D輸出338作為第五邏輯級(jí)220E的源而提供,該第五邏輯級(jí)220E接受兩位左移位344和0x030c30c3的掩蔽值346作為輸入。第五邏輯級(jí)220E的輸出348移位并且與其他源坐標(biāo)的處理輸出組合并且作為3D Z曲線索引結(jié)果而返回。每個(gè)源輸入經(jīng)歷相似邏輯流水線。在一個(gè)實(shí)施例中,對(duì)每個(gè)輸入并行執(zhí)行微操作。
圖4示出根據(jù)實(shí)施例實(shí)現(xiàn)64位3D Z曲線索引指令的多級(jí)邏輯設(shè)置的框圖。圖2B中示出的每個(gè)邏輯級(jí)220A-F可以用于對(duì)每個(gè)坐標(biāo)執(zhí)行Z曲線索引位洗牌。在一個(gè)實(shí)施例中,邏輯級(jí)配置成以至少64位的精度執(zhí)行操作來產(chǎn)生64位輸出。第一邏輯級(jí)220A接受64位源輸入402,連同零左移位404和0x000fffff的掩蔽值406。第一邏輯級(jí)220A輸出408作為第二邏輯級(jí)220B的源而提供,該第二邏輯級(jí)220B接受32位左移位414和0x1f00000000ffff的掩蔽值416作為輸入。第二邏輯級(jí)220B輸出418作為第三邏輯級(jí)220C的源而提供,該第三邏輯級(jí)220C接受16位左移位424和0x1f0000ff0000ff的掩蔽值426作為輸入。第三邏輯級(jí)220C輸出428作為第四邏輯級(jí)220D的源而提供,該第四邏輯級(jí)220D接受八位左移位434和0x100f00f00f00f00f的掩蔽值436作為輸入。第四邏輯級(jí)220D輸出438作為第五邏輯級(jí)220E的源而提供,該第五邏輯級(jí)220E接受四位左移位444和0x10c30c30c30c30c3的掩蔽值446作為輸入。第五邏輯級(jí)220E輸出448作為第五邏輯級(jí)220E的源而提供,該第五邏輯級(jí)220E接受2位左移位454和0x1249249249249249的掩蔽值456作為輸入。第六邏輯級(jí)220F的輸出458移位并且與其他源坐標(biāo)的輸出組合并且作為3D Z曲線索引而輸出。每個(gè)源輸入經(jīng)歷相似邏輯流水線。在一個(gè)實(shí)施例中,對(duì)每個(gè)輸入并行執(zhí)行微操作。
圖5是根據(jù)實(shí)施例從三個(gè)坐標(biāo)計(jì)算3D Z曲線索引的指令的操作數(shù)和邏輯的框圖。指令的實(shí)施例包括三個(gè)源操作數(shù)。第一源操作數(shù)502與X維度關(guān)聯(lián),第二源操作數(shù)504與Y維度關(guān)聯(lián),并且第三源操作數(shù)506與Z維度關(guān)聯(lián)。根據(jù)實(shí)施例,在宏指令級(jí),源操作數(shù)是存儲(chǔ)相應(yīng)坐標(biāo)值的寄存器、存儲(chǔ)相應(yīng)坐標(biāo)值的存儲(chǔ)器地址或立即坐標(biāo)值。在微指令級(jí),與操作數(shù)關(guān)聯(lián)的坐標(biāo)在被執(zhí)行單元處理之前存儲(chǔ)在處理器寄存器中。在一個(gè)實(shí)施例中,復(fù)用器(例如,mux 508)使源寄存器耦合于處理器執(zhí)行單元中的z序邏輯510,其從源坐標(biāo)計(jì)算Z序索引。32位預(yù)輸出寄存器和最后結(jié)果寄存器的示范性位布局的表示在下文的表5中示出。
表5 - Z序邏輯輸出
上文的表5示出每個(gè)源輸入的32位預(yù)輸出。表5中的每個(gè)x、y或z值指示所指示的坐標(biāo)值的單個(gè)位,其中向右是最低有效位并且左邊是最高有效位。在一個(gè)實(shí)施例中,SRC1’預(yù)輸出值從由SRC1 502指示的值生成,SRC2’預(yù)輸出值從由SRC2 504指示的值生成,并且SRC3’預(yù)輸出值從由SRC3 506指示的值生成。在這樣的實(shí)施例中,Z序索引通過使SRC2’預(yù)輸出左移位一個(gè)位、使SRC3’預(yù)輸出左移位兩個(gè)位并且對(duì)移位的預(yù)輸出值執(zhí)行逐位OR操作而創(chuàng)建。計(jì)算的索引然后輸出給由指令的目的地操作數(shù)512規(guī)定的DEST位點(diǎn)。在一個(gè)實(shí)施例中,示出的寄存器是SIMD/向量寄存器并且指令是執(zhí)行向量操作的SIM指令。
圖6是根據(jù)實(shí)施例用于處理3D Z曲線索引指令的流程圖。如在框602處示出的,指令流水線在處理器提取單個(gè)z曲線索引指令來計(jì)算3D Z曲線索引時(shí)開始。指令具有第一、第二和第三源操作數(shù)以及目的地操作數(shù),如還在框602處示出的。
如在框604處示出的,處理器將Z曲線索引指令解碼為解碼指令。在一個(gè)實(shí)施例中,解碼指令是單個(gè)操作。在一個(gè)實(shí)施例中,解碼指令包括一個(gè)或多個(gè)邏輯微操作來執(zhí)行指令的每個(gè)子元素。微操作可以是硬接線或微代碼操作以可以促使處理器的部件(例如執(zhí)行單元)執(zhí)行各種操作來實(shí)現(xiàn)指令。
在一個(gè)實(shí)施例中,解碼指令促使處理器的部件(例如執(zhí)行單元)執(zhí)行各種操作,其包括提取由源操作數(shù)指示的源操作數(shù)值的操作,如在框606處示出的。在各種實(shí)施例中,源操作數(shù)可以包括寄存器、存儲(chǔ)器地址或立即值(immediate values)。微操作可以從存儲(chǔ)器提取值或?qū)⒅导虞d到內(nèi)部處理器寄存器內(nèi)。
如在框608處示出的,一個(gè)或多個(gè)處理器執(zhí)行單元執(zhí)行解碼指令以通過使源坐標(biāo)值的構(gòu)成位交織來計(jì)算3D Z曲線索引。在一個(gè)實(shí)施例中,通過使每個(gè)源值的10個(gè)低階位交織成長度為至少32個(gè)位的Z曲線索引來計(jì)算Z曲線索引。在一個(gè)實(shí)施例中,通過使每個(gè)源值的20個(gè)低階位交織成長度為至少60個(gè)位的Z曲線索引來計(jì)算Z曲線索引。
如在框610處示出的,處理器將Z曲線索引指令的結(jié)果存儲(chǔ)到目的地操作數(shù)所指示的位點(diǎn)內(nèi)。對(duì)于32位指令,Z曲線索引存儲(chǔ)到32位輸出寄存器。對(duì)于64位指令,Z曲線索引存儲(chǔ)在64位輸出寄存器中。
本文描述的實(shí)施例指使用X、Y和Z坐標(biāo)的操作,它們是用于在三維空間內(nèi)定義位置的笛卡爾坐標(biāo)。本領(lǐng)域內(nèi)普通技術(shù)人員將理解,使用的坐標(biāo)是示范性的并且X、Y和Z坐標(biāo)一般指用于在Z曲線排序能適用的三維空間中定義第一、第二或第三維度的位點(diǎn)的任何坐標(biāo)集。
本文描述的實(shí)施例可以在處理裝置或數(shù)據(jù)處理系統(tǒng)中實(shí)現(xiàn)。在前面的描述中,闡述許多特定細(xì)節(jié)以便提供對(duì)本文描述的實(shí)施例的全面理解。然而,實(shí)施例可以在沒有這些特定細(xì)節(jié)中的一些的情況下實(shí)踐,如對(duì)于本領(lǐng)域內(nèi)普通技術(shù)人員將顯而易見的。描述的架構(gòu)特征中的一些是Intel架構(gòu)(IA)的擴(kuò)展。然而,基本原理不限于任何特定ISA。
本文描述的指令的實(shí)施例對(duì)源坐標(biāo)值內(nèi)的高階或低階位操作。如本文使用的,高階和低階位定義為最高有效和最低有效位,與在構(gòu)成數(shù)據(jù)字的字節(jié)存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)器中時(shí)用于解釋那些字節(jié)的約定無關(guān)。也就是說,根據(jù)在使用中的字節(jié)順序約定,低階或最低有效位可以存儲(chǔ)在數(shù)據(jù)字內(nèi)的最小地址或最大地址中。
為了提供更完整理解,在下文提供示范性指令格式、處理器核架構(gòu)、處理器和計(jì)算機(jī)架構(gòu)的綜覽。
示范性指令格式
本文描述的指令的實(shí)施例可以采用不同格式體現(xiàn)。另外,示范性系統(tǒng)、架構(gòu)和流水線在下文詳述。指令的實(shí)施例可以在這樣的系統(tǒng)、架構(gòu)和流水線上執(zhí)行,但不限于詳述的那些。
向量友好指令格式是適合于向量指令的指令格式(例如,存在向量操作特定的某些字段)。盡管描述其中通過向量友好指令格式支持向量和標(biāo)量操作兩者的實(shí)施例,備選實(shí)施例僅使用向量友好指令格式的向量操作。
圖7A-7B是圖示根據(jù)實(shí)施例的通用向量友好指令格式及其指令模板的框圖。圖7A是圖示根據(jù)實(shí)施例的通用向量友好指令格式及其類別A指令模板的框圖;而圖7B是圖示根據(jù)實(shí)施例的通用友好指令格式及其類別B指令模板的框圖。具體地,針對(duì)通用向量友好指令格式700定義類別A和類別B指令模板,這兩個(gè)都包括無存儲(chǔ)器訪問705指令模板和存儲(chǔ)器訪問720指令模板。術(shù)語通用在向量友好指令格式的上下文中指未與任何特定指令集綁定的指令格式。
將描述其中向量友好指令格式支持以下內(nèi)容的實(shí)施例:具有32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬(或大?。┑?4字節(jié)向量操作數(shù)長度(或大小)(并且從而,64字節(jié)向量由16個(gè)雙字大小的元素或備選地8個(gè)四字大小的元素組成);具有16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬(或大小)的64字節(jié)向量操作數(shù)長度(或大?。痪哂?2位(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ù)元素寬(或大小)的16字節(jié)向量操作數(shù)長度(或大?。H欢?,備選實(shí)施例支持具有更多、更少或不同數(shù)據(jù)元素寬(例如,128位(16字節(jié))數(shù)據(jù)元素寬)的更多、更少和/或不同向量操作數(shù)大?。ɡ?,256字節(jié)向量操作數(shù))。
圖7A中的類別A指令模板包括:1)在無存儲(chǔ)器訪問705指令模板內(nèi)示出無存儲(chǔ)器訪問的全舍入控制型操作710指令模板和無存儲(chǔ)器訪問的數(shù)據(jù)變換型操作715指令模板;和2)在存儲(chǔ)器訪問720指令模板內(nèi)示出存儲(chǔ)器訪問的暫時(shí)725指令模板和存儲(chǔ)器訪問的非暫時(shí)730指令模板。圖7B中的類別B指令模板包括:1)在無存儲(chǔ)器訪問705指令模板內(nèi)示出無存儲(chǔ)器訪問的寫掩蔽控制的部分舍入控制型操作712指令模板和無存儲(chǔ)器訪問的寫掩蔽控制的vsize型操作717指令模板;和2)在存儲(chǔ)器訪問720指令模板內(nèi)示出存儲(chǔ)器訪問的寫掩蔽控制727指令模板。
通用向量友好指令格式700包括在下文按圖7A-7B中圖示的順序列出的下列字段。
格式字段740-該字段中的特定值(指令格式標(biāo)識(shí)符值)唯一識(shí)別向量友好指令格式,并且從而識(shí)別指令流中采用向量友好指令格式的指令的發(fā)生。如此,該字段在對(duì)于僅具有通用向量友好指令格式的指令集不需要它這一意義上是可選的。
基本操作字段742-它的內(nèi)容區(qū)分不同基本操作。
寄存器索引字段744-它的內(nèi)容直接或通過地址生成而規(guī)定源和目的地操作數(shù)的位點(diǎn),不論它們是在寄存器中還是存儲(chǔ)器中。這些包括足夠數(shù)量的位來從P×Q(例如,32×512、16×128、32×1024、64×1024)寄存器堆選擇N個(gè)寄存器。盡管在一個(gè)實(shí)施例中N可以多至三個(gè)源和一個(gè)目的地寄存器,備選實(shí)施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多至兩個(gè)源,其中這些源中的一個(gè)也充當(dāng)目的地,可以支持多至三個(gè)源,其中這些源中的一個(gè)也充當(dāng)目的地,可以支持多至兩個(gè)源和一個(gè)目的地)。
修改字段(modifier field)746-它的內(nèi)容將采用通用向量指令格式的規(guī)定存儲(chǔ)器訪問的指令的發(fā)生從沒有存儲(chǔ)器訪問的那些指令區(qū)分;即,在無存儲(chǔ)器訪問705指令模板與存儲(chǔ)器訪問720指令模板之間進(jìn)行區(qū)分。存儲(chǔ)器訪問操作讀和/或?qū)懭氪鎯?chǔ)器層級(jí)(在一些情況下使用寄存器中的值規(guī)定源和/或目的地地址),而非存儲(chǔ)器訪問操作則不這樣(例如,源和目的地是寄存器)。盡管在一個(gè)實(shí)施例中該字段也在執(zhí)行存儲(chǔ)器地址計(jì)算的三個(gè)方式之間選擇,備選實(shí)施例可以支持執(zhí)行存儲(chǔ)器地址計(jì)算的更多、更少或不同方式。
增廣操作字段750-它的內(nèi)容區(qū)分除基本操作外還要執(zhí)行的多種不同操作中的哪一個(gè)。該字段是上下文特定的。在本發(fā)明的一個(gè)實(shí)施例中,該字段分成類別字段768、alpha字段752和beta字段754。增廣操作字段750允許在單指令而不是2、3或4個(gè)指令中執(zhí)行共用操作組。
標(biāo)度字段760-它的內(nèi)容允許定標(biāo)索引字段的內(nèi)容用于存儲(chǔ)器地址生成(例如,用于使用2scale*索引+基址的地址生成)。
位移字段762A-它的內(nèi)容用作存儲(chǔ)器地址生成(例如,用于使用2scale*索引+基址+位移的地址生成)的部分。
位移因數(shù)字段762B(注意位移字段762A直接在位移因數(shù)字段762B上的并置指示使用一個(gè)或另一個(gè))-它的內(nèi)容用作地址生成的部分;它規(guī)定要通過存儲(chǔ)器訪問的大小(N)來定標(biāo)的位移因數(shù)-其中N是存儲(chǔ)器訪問中字節(jié)的數(shù)量(例如,對(duì)于使用2scale*索引+基址+定標(biāo)位移的地址生成)。冗余低階位被忽略,并且因此位移因數(shù)字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)總大小(N)以便生成要在計(jì)算有效地址方面使用的最終位移。N的值由在運(yùn)行時(shí)的處理器硬件基于全操作碼字段774(稍后在本文描述)和數(shù)據(jù)操縱字段754C確定。位移字段762A和位移因數(shù)字段762B在它們未用于無存儲(chǔ)器訪問705指令模板這一意義上是可選的和/或不同的實(shí)施例可以僅實(shí)現(xiàn)兩個(gè)中的一個(gè)或兩個(gè)都未實(shí)現(xiàn)。
數(shù)據(jù)元素寬度字段764-它的內(nèi)容區(qū)分要使用的許多數(shù)據(jù)元素寬度中的哪一個(gè)(在一些實(shí)施例中對(duì)于所有指令;在其他實(shí)施例中僅對(duì)于指令中的一些)。該字段在如果使用操作碼的某一方面支持?jǐn)?shù)據(jù)元素寬度和/或僅支持一個(gè)數(shù)據(jù)元素寬度則不需要該字段這一意義上是可選的。
寫掩蔽字段770-它的內(nèi)容在每數(shù)據(jù)元素位置基礎(chǔ)上控制目的地向量操作數(shù)中的數(shù)據(jù)元素位置是否反映基本操作和增廣操作的結(jié)果。類別A指令模板支持合并-寫掩蔽,而類別B指令模板既支持合并也支持歸零-寫掩蔽。在合并時(shí),向量掩蔽允許保護(hù)目的地中的任何元素集以在執(zhí)行任何操作(由基本操作和增廣操作規(guī)定)期間免于更新;在另一個(gè)實(shí)施例中,保留目的地的每個(gè)元素的舊值,其中對(duì)應(yīng)掩蔽位具有0。相比之下,在歸零時(shí),向量掩蔽允許目的地中的任何元素集在執(zhí)行任何操作(由基本操作和增廣操作規(guī)定)期間歸零;在一個(gè)實(shí)施例中,在對(duì)應(yīng)掩蔽位具有0值時(shí),目的地的元素設(shè)置為0。該功能性的子集是控制正在執(zhí)行的操作的向量長度的能力(即,正在修改的元素的跨度,從第一個(gè)到最后一個(gè));然而,修改的元素是連續(xù)的,這不是必要的。從而,寫掩蔽字段770允許部分向量操作,包括加載、存儲(chǔ)、算術(shù)、邏輯等。盡管描述其中寫掩蔽字段770的內(nèi)容選擇包含要使用的寫掩蔽的許多寫掩蔽寄存器中的一個(gè)(并且從而寫掩蔽字段770的內(nèi)容間接識(shí)別要執(zhí)行的掩蔽)的實(shí)施例,備選實(shí)施例相反或另外允許掩蔽寫字段770的內(nèi)容直接規(guī)定要執(zhí)行的掩蔽。
立即字段772-它的內(nèi)容允許規(guī)定立即。該字段在它在不支持立即的通用向量友好格式的實(shí)現(xiàn)中不存在并且它在未使用立即的指令中不存在這一意義上是可選的。
類別字段768-它的內(nèi)容區(qū)分不同類別的指令。參考圖7A-B,該字段的內(nèi)容在類別A和類別B指令之間選擇。在圖8A-B中,圓角方形用于指示在字段中存在特定值(例如,在圖7A-B中分別是類別字段768的類別A 768A和類別B 768B)。
類別A的指令模板
在類別A的非存儲(chǔ)器訪問705指令模板的情況下,alpha字段752解釋為RS字段752A,它的內(nèi)容區(qū)分要執(zhí)行的不同增廣操作類型中的哪一個(gè)(例如,舍入752A.1和數(shù)據(jù)變換752A.2分別對(duì)無存儲(chǔ)器訪問的舍入型操作710和無存儲(chǔ)器訪問的數(shù)據(jù)變換類型操作715指令模板規(guī)定),而beta字段754區(qū)分要執(zhí)行規(guī)定類型的操作中的哪個(gè)。在無存儲(chǔ)器訪問705指令模板中,標(biāo)度字段760、位移字段762A和位移標(biāo)度字段762B不存在。
無存儲(chǔ)器訪問指令模板-全舍入控制型操作
在無存儲(chǔ)器訪問全舍入控制型操作701指令模板中,beta字段754解釋為舍入控制字段754A,它的內(nèi)容提供靜態(tài)舍入。盡管在描述的實(shí)施例中舍入控制字段754A包括抑制所有浮點(diǎn)異常(SAE)字段756和舍入操作控制字段758,備選實(shí)施例可以支持這些概念、可以將這些概念編碼為相同字段或僅具有這些概念/字段中的一個(gè)或另一個(gè)(例如,可以僅具有舍入操作控制字段758)。
SAE字段756-它的內(nèi)容區(qū)分是否停用異常事件報(bào)告;在SAE字段756的內(nèi)容指示啟用抑制時(shí),給定指令未報(bào)告任何種類的浮點(diǎn)異常標(biāo)志并且未引發(fā)任何浮點(diǎn)異常處理程序。
舍入操作控制字段758-它的內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(gè)(例如,上舍入、下舍入、朝零舍入和舍入到最接近)。從而,舍入操作控制字段758允許在每指令基礎(chǔ)上改變舍入模式。在本發(fā)明的一個(gè)實(shí)施例(其中處理器包括用于規(guī)定舍入模式的控制寄存器)中,舍入操作控制字段750的內(nèi)容覆蓋寄存器值。
無存儲(chǔ)器訪問指令模板-數(shù)據(jù)變換型操作
在無存儲(chǔ)器訪問數(shù)據(jù)變換型操作715指令模板中,beta字段754解釋為數(shù)據(jù)變換字段754B,它的內(nèi)容區(qū)分要執(zhí)行許多數(shù)據(jù)變換中的哪一個(gè)(例如,無數(shù)據(jù)變換、攪合(swizzle)、廣播)。
在類別A的存儲(chǔ)器訪問720指令模板的情況下,alpha字段752解釋為驅(qū)逐提示字段752B,它的內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪一個(gè)(在圖7A中,暫時(shí)752B.1和非暫時(shí)752B.2分別對(duì)存儲(chǔ)器訪問的暫時(shí)725指令模板和存儲(chǔ)器訪問的非暫時(shí)730指令模板規(guī)定),而beta字段754解釋為數(shù)據(jù)操縱字段754C,它的內(nèi)容區(qū)分要執(zhí)行許多數(shù)據(jù)操縱操作(也稱為基元)中的哪一個(gè)(例如,無操縱;廣播;源的上轉(zhuǎn)換;和目的地的下轉(zhuǎn)換)。存儲(chǔ)器訪問720指令模板包括標(biāo)度字段760,并且可選地包括位移字段762A或位移標(biāo)度字段762B。
向量存儲(chǔ)器指令利用轉(zhuǎn)換支持來執(zhí)行從存儲(chǔ)器的向量加載和到存儲(chǔ)器的向量存儲(chǔ)。如與常規(guī)向量指令一樣,向量存儲(chǔ)器指令采用逐數(shù)據(jù)元素方式將數(shù)據(jù)傳輸?shù)酱鎯?chǔ)器/從存儲(chǔ)器傳輸,其中實(shí)際上傳輸?shù)脑赜蛇x為寫掩蔽的向量掩蔽的內(nèi)容指定。
存儲(chǔ)器訪問指令模板-暫時(shí)
暫時(shí)數(shù)據(jù)是可能很快被重用以足以從高速緩存獲益的數(shù)據(jù)。然而,這是提示,并且不同處理器可以采用不同方式實(shí)現(xiàn)它,包括完全忽略提示。
存儲(chǔ)器訪問指令模板-非暫時(shí)
非暫時(shí)數(shù)據(jù)是不太可能很快被重用以足以從第1級(jí)高速緩存中的高速緩存獲益的數(shù)據(jù)并且就驅(qū)逐來說應(yīng)給予優(yōu)先級(jí)。然而這是提示并且不同處理器可以采用不同方式實(shí)現(xiàn)它,包括完全忽略提示。
類別B的指令模板
在類別B的指令模板的情況下,alpha字段752解釋為寫掩蔽控制(Z)字段752C,它的內(nèi)容區(qū)分由寫掩蔽字段770控制的寫掩蔽是應(yīng)合并還是應(yīng)歸零。
在類別B的非存儲(chǔ)器訪問705指令模板的情況下,beta字段754的部分解釋為RL字段757A,它的內(nèi)容區(qū)分要執(zhí)行不同增廣操作類型中的哪一個(gè)(例如,舍入757A.1和向量長度(VSIZE)757A.2分別對(duì)無存儲(chǔ)器訪問的寫掩蔽控制的部分舍入控制型操作712指令模板和無存儲(chǔ)器訪問的寫掩蔽控制的VSIZE型操作717指令模板規(guī)定),而beta字段754的余下部分區(qū)分要執(zhí)行規(guī)定類型的操作中的哪個(gè)。在無存儲(chǔ)器訪問705指令模板中,標(biāo)度字段760、位移字段762A和位移標(biāo)度字段762B不存在。
在無存儲(chǔ)器訪問的寫掩蔽控制的部分舍入控制型操作710指令模板中,beta字段754的余下部分解釋為舍入操作字段759A并且停用異常事件報(bào)告(給定指令未報(bào)告任何種類的浮點(diǎn)異常標(biāo)志并且未引發(fā)任何浮點(diǎn)異常處理程序)。
舍入操作控制字段759A-正如舍入操作控制字段758那樣,它的內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(gè)(例如,上舍入、下舍入、朝零舍入和舍入到最接近)。從而,舍入操作控制字段759A允許在每指令基礎(chǔ)上改變舍入模式。在本發(fā)明的一個(gè)實(shí)施例(其中處理器包括用于規(guī)定舍入模式的控制寄存器)中,舍入操作控制字段750的內(nèi)容覆蓋該寄存器值。
在無存儲(chǔ)器訪問的寫掩蔽控制的VSIZE型操作717指令模板中,beta字段754的余下部分解釋為向量長度字段759B,它的內(nèi)容區(qū)分要對(duì)許多數(shù)據(jù)向量長度中的哪一個(gè)(例如,128、256或512字節(jié))執(zhí)行。
在類別B的存儲(chǔ)器訪問720指令模板的情況下,beta字段754的部分解釋為廣播字段757B,它的內(nèi)容區(qū)分是否要執(zhí)行廣播型數(shù)據(jù)操縱操作,而beta字段754的余下部分解釋為向量長度字段759B。存儲(chǔ)器訪問720指令模板包括標(biāo)度字段760,并且可選地包括位移字段762A或位移標(biāo)度字段762B。
關(guān)于通用向量友好指令格式700,示出全操作碼字段774,其包括格式字段740、基本操作字段742,和數(shù)據(jù)元素寬度字段764。盡管示出其中全操作碼字段774包括這些字段中的全部的一個(gè)實(shí)施例,全操作碼字段774在不支持這些字段中的全部的實(shí)施例中包括少于全部的這些字段。全操作碼字段774提供操作代碼(操作碼)。
增廣操作字段750、數(shù)據(jù)元素寬度字段764和寫掩蔽字段770允許采用通用向量友好指令格式在每指令基礎(chǔ)上規(guī)定這些特征。
寫掩蔽字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建類型化指令,因?yàn)樗鼈冊(cè)试S基于不同數(shù)據(jù)元素寬度施加掩蔽。
在類別A和類別B內(nèi)發(fā)現(xiàn)的各種指令模板在不同情形中是有益的。在一些實(shí)施例中,不同處理器或處理器內(nèi)的不同核可以僅支持類別A、僅支持類別B或支持兩個(gè)類別。例如,預(yù)計(jì)用于通用計(jì)算的高性能通用無序核可以僅支持類別B,主要預(yù)計(jì)用于圖形和/或科學(xué)(吞吐量)計(jì)算的核可以僅支持類別A,并且預(yù)計(jì)用于兩者的核可以支持兩者(當(dāng)然,具有來自兩個(gè)類別的模板和指令某一混合但不是來自兩個(gè)類型的所有模板和指令的核在本發(fā)明的范圍內(nèi))。
單個(gè)處理器還可以包括多個(gè)核,其中的全部支持相同類別或其中不同核支持不同類別。例如,在具有單獨(dú)的圖形和通用核的處理器中,主要預(yù)計(jì)用于圖形和/或科學(xué)計(jì)算的圖形核中的一個(gè)可以僅支持類別A,而通用核中的一個(gè)或多個(gè)可以是僅支持類別B的具有預(yù)計(jì)用于通用計(jì)算的無序執(zhí)行和寄存器重命名的高性能通用核。不具有單獨(dú)圖形核的另一個(gè)處理器可以包括既支持類別A也支持類別B的一個(gè)或多個(gè)通用有序或無序核。
當(dāng)然,來自一個(gè)類別的特征在不同實(shí)施例中還可以在其他類別中實(shí)現(xiàn)。用高級(jí)語言編寫的程序?qū)⒈恢萌耄ɡ纾m時(shí)編譯或靜態(tài)編譯)多個(gè)不同可執(zhí)行形式,其包括:1)僅具有得到目標(biāo)處理器支持的類別的指令以用于執(zhí)行的形式;或2)具有使用所有類別的指令的不同組合編寫的備用例程并且具有控制流代碼的形式,該控制流代碼基于當(dāng)前執(zhí)行代碼的處理器所支持的指令來選擇例程來執(zhí)行。
示范性特定向量友好指令格式
圖8是圖示根據(jù)實(shí)施例的示范性特定向量友好指令格式的框圖。圖8示出特定向量友好指令格式800,其在它規(guī)定字段的位點(diǎn)、大小、解釋和順序以及對(duì)于那些字段中的一些的值這一意義上是特定的。特定向量友好指令格式800可以用于擴(kuò)展x86指令集,并且從而字段中的一些與在現(xiàn)有x86指令集及其擴(kuò)展(例如,AVX)中使用的那些相似或相同。該格式與具有擴(kuò)展的現(xiàn)有x86指令集的前綴編碼字段、實(shí)際操作碼字節(jié)字段、MOD R/M字段、SIB字段、位移字段和立即字段保持一致。圖示來自圖8的字段映射成的來自圖7的字段。
應(yīng)理解,盡管為了說明目的在通用向量友好指令格式700的上下文中參考特定向量友好指令格式800描述實(shí)施例,本發(fā)明不限于特定向量友好指令格式800,但要求保護(hù)的情況下除外。例如,通用向量友好指令格式700對(duì)各種字段預(yù)想多種可能大小,而特定向量友好指令格式800示出為具有特定大小的字段。通過特定示例,盡管數(shù)據(jù)元素寬度字段764圖示為采用特定向量友好指令格式800的一位字段,本發(fā)明并不受此限制(即,通用向量友好指令格式700預(yù)想數(shù)據(jù)元素寬度字段764的其他大?。?。
通用向量友好指令格式700包括在下文按圖8A中圖示的順序列出的下列字段。
EVEX前綴(字節(jié)0-3)802-采用四字節(jié)形式編碼。
格式字段740(EVEX字節(jié)0,位[7:0])-第一字節(jié)(EVEX字節(jié)0)是格式字段740并且它包含0x62(在本發(fā)明的一個(gè)實(shí)施例中用于區(qū)分向量友好指令格式的唯一值)。
第二-第四字節(jié)(EVEX字節(jié)1-3)包括提供特定能力的許多位字段。
REX字段805(EVEX字節(jié)1,位[7-5])-由EVEX.R位字段(EVEX字節(jié)1,位[7]-R)、EVEX.X位字段(EVEX字節(jié)1,位[6]-X)和757B EX字節(jié)1、位[5]-B)組成。EVEX.R、EVEX.X和EVEX.B位字段提供與對(duì)應(yīng)VEX位字段相同的功能性,并且使用1s補(bǔ)碼形式編碼,即ZMM0編碼為1111B,ZMM15編碼為0000B。如本領(lǐng)域內(nèi)眾所周知的,指令的其他字段對(duì)寄存器索引的較低三個(gè)位編碼(rrr、xxx和bbb),使得Rrrr、Xxxx和Bbbb可以通過添加EVEX.R、EVEX.X和EVEX.B而形成。
REX’字段710-這是REX’字段710的第一部分并且是用于對(duì)擴(kuò)展32寄存器集的較高16或較低16編碼的EVEX.R’位字段(EVEX字節(jié)1,位[4]-R’)。在本發(fā)明的一個(gè)實(shí)施例中,該位連同如下文指示的其他采用位反轉(zhuǎn)格式存儲(chǔ)來與BOUND指令區(qū)分開(采用眾所周知的x86 32位模式),該BOUND指令的實(shí)際操作碼字節(jié)是62,但在MOD R/M字段(下文描述)中未接受MOD字段中的值11;備選實(shí)施例未存儲(chǔ)此以及下文其他采用反轉(zhuǎn)格式的其他指示位。值1用于對(duì)較低16寄存器編碼。也就是說,R’Rrrr通過使EVEX.R’、EVEX.R和來自其他字段的其他RRR組合而形成。
操作碼映射字段815(EVEX字節(jié)1,位[3:0]-mmmm)-它的內(nèi)容對(duì)暗指的前導(dǎo)操作碼字節(jié)(0F、0F 38或0F 3)編碼。
數(shù)據(jù)元素寬度字段764(EVEX字節(jié)2,位[7]-W)由標(biāo)記EVEX.W表示。EVEX.W用于定義數(shù)據(jù)類型(32位數(shù)據(jù)元素或64位數(shù)據(jù)元素)的粒度(大?。?/p>
EVEX.vvvv 820(EVEX字節(jié)2,位[6:3]-vvvv)-EVEX.vvvv的作用可以包括以下:1)EVEX.vvvv對(duì)采用反轉(zhuǎn)(1s補(bǔ)碼)形式規(guī)定的第一源寄存器操作數(shù)編碼并且對(duì)于具有2個(gè)或以上源操作數(shù)的指令有效;2)EVEX.vvvv對(duì)目的地寄存器操作數(shù)(對(duì)于某些向量移位采用1s補(bǔ)碼形式規(guī)定)編碼;或3)EVEX.vvvv未對(duì)任何操作數(shù)編碼,字段被保留并且應(yīng)包含1111b。從而,EVEX.vvvv字段820對(duì)采用反轉(zhuǎn)(1s補(bǔ)碼)形式存儲(chǔ)的第一源寄存器說明符的4個(gè)低階位編碼。根據(jù)指令,附加的不同EVEX位字段用于將說明符大小擴(kuò)展到32個(gè)寄存器。
EVEX.U 768類別字段(EVEX字節(jié)2,位[2]-U)-如果EVEX.U=0,它指示類別A或EVEX.U0;如果EVEX.U=1,它指示類別B或EVEX.U1。
前綴編碼字段825(EVEX字節(jié)2,位[1:0]-pp)-為基本操作字段提供額外位。除對(duì)采用EVEX前綴格式的遺留SSE指令提供支持外,這還具有使SIMD前綴緊湊的益處(而不需要字節(jié)來表達(dá)SIMD前綴,EVEX前綴僅需要2個(gè)位)。在一個(gè)實(shí)施例中,為了支持使用采用遺留格式和采用EVEX前綴格式兩者的SIMD前綴(66H、F2H、F3H)的遺留SSE指令,這些遺留SIMD前綴編碼為SIMD前綴編碼字段;并且在運(yùn)行時(shí)間在提供給解碼器的PLA(因此PLA可以執(zhí)行這些遺留指令的遺留和EVEX格式兩者而沒有修改)之前擴(kuò)充成遺留SIMD前綴。盡管較新指令可以直接使用EVEX前綴編碼字段的內(nèi)容作為操作碼擴(kuò)展,某些實(shí)施例為了一致性采用相似方式擴(kuò)充但允許由這些遺留SIMD前綴規(guī)定的不同含義。備選實(shí)施例可以重新設(shè)計(jì)PLA來支持2位SIMD前綴編碼,并且從而不需要擴(kuò)充。
Alpha字段752(EVEX字節(jié)3,位[7]-EH;也稱為EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control和EVEX.N;同樣用α圖示)-如之前描述的,該字段是上下文特定的。
Beta字段754(EVEX字節(jié)3,位[6:4]-SSS,也稱為EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLB;同樣用圖示βββ)-其之前描述的,該字段是上下文特定的。
REX’字段710-這是REX’字段的剩余部分并且是可以用于對(duì)擴(kuò)展32寄存器集的較高16或較低16編碼的EVEX.V’位字段(EVEX字節(jié)3,位[3]-V’)。該位采用位反轉(zhuǎn)格式存儲(chǔ)。值1用于對(duì)較低16寄存器編碼。也就是說,V’VVVV通過使EVEX.V’、EVEX.vvvv組合而形成。
寫掩蔽字段770(EVEX字節(jié)3,位[2:0]-kkk)-它的內(nèi)容規(guī)定如之前描述的寫掩蔽寄存器中寄存器的索引。在本發(fā)明的一個(gè)實(shí)施例中,特定值EVEX.kkk=000具有暗指對(duì)于特定指令使用無寫掩蔽的特殊行為(這可以采用多種方式實(shí)現(xiàn),包括使用硬接線到所有繞過掩蔽硬件的硬件的寫掩蔽)。
實(shí)際操作碼字段830(字節(jié)4)也稱為操作碼字節(jié)。操作碼的部分在該字段中規(guī)定。
MOD R/M字段840(字節(jié)5)包括MOD字段842、Reg字段844和R/M字段846。如之前描述的,MOD字段842的內(nèi)容區(qū)分存儲(chǔ)器訪問和非存儲(chǔ)器訪問操作。Reg字段844的作用可以總結(jié)為兩個(gè)情形:對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)編碼,或被視為操作碼擴(kuò)展且未用于對(duì)任何指令操作數(shù)編碼。R/M字段846的作用可以包括以下:對(duì)引用存儲(chǔ)器地址的指令操作數(shù)編碼,或?qū)δ康牡丶拇嫫鞑僮鲾?shù)或源寄存器操作數(shù)編碼。
標(biāo)度、索引、基址(Base)(SIB)字節(jié)(字節(jié)6)-如之前描述的,標(biāo)度字段750的內(nèi)容用于存儲(chǔ)器地址生成。SIB.xxx 854和SIB.bbb 856-這些字段的內(nèi)容之前關(guān)于寄存器索引Xxxx和Bbbb而被引用。
位移字段762A(字節(jié)7-10)-在MOD字段842包含10時(shí),字節(jié)7-10是位移字段762A,并且它與遺留32位移位(disp32)相同地運(yùn)作并且以字節(jié)粒度運(yùn)作。
位移因數(shù)字段762B(字節(jié)7)-在MOD字段842包含01時(shí),字節(jié)7是位移因數(shù)字段762B。該字段的位點(diǎn)與遺留x86指令集8位位移(disp8)的相同,該遺留x86指令集8位位移(disp8)以字節(jié)粒度運(yùn)作。因?yàn)閐isp8帶符號(hào)擴(kuò)展,它可以僅在-128與127字節(jié)偏移之間尋址;從64字節(jié)高速緩存行方面來看,disp8使用8個(gè)位,其可以設(shè)置成僅僅四個(gè)實(shí)際使用值-128、-64、0和64;因?yàn)橥ǔP枰^大范圍,使用disp32;然而,disp32需要4個(gè)字節(jié)。與disp8和disp32相比之下,位移因數(shù)字段762B是disp8的重新解釋;在使用位移因數(shù)字段762B時(shí),實(shí)際位移通過位移因數(shù)字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)訪問的大?。∟)來確定。該類型的位移稱為disp8*N。這使平均指令長度減少(單個(gè)字節(jié)用于位移但具有大得多的范圍)。這樣的壓縮位移基于有效位移是存儲(chǔ)器訪問的粒度的倍數(shù)并且因此不需要對(duì)地址偏移的冗余低階位編碼這一假設(shè)。也就是說,位移因數(shù)字段762B替換遺留x86指令集8位位移。從而,采用與x86指令集8位位移相同的方式對(duì)位移因數(shù)字段862B編碼(因此在ModRM/SIB編碼規(guī)則中沒有改變),唯一例外是disp8過載成disp8*N。也就是說,在編碼規(guī)則或編碼長度方面沒有改變而僅在由硬件解釋位移值方面(這需要通過存儲(chǔ)器操作數(shù)的大小來定標(biāo)位移以獲得逐字節(jié)地址偏移)有改變。
立即字段772如之前描述的那樣操作。
全操作碼字段
圖8B是圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例構(gòu)成全操作碼字段774的特定向量友好指令格式800的字段的框圖。具體地,全操作碼字段774包括格式字段740、基本操作字段742和數(shù)據(jù)元素寬度(W)字段764?;静僮髯侄?42包括前綴編碼字段825、操作碼映射字段815和實(shí)際操作碼字段830。
寄存器索引字段
圖8C是圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例構(gòu)成寄存器索引字段744的特定向量友好指令格式800的字段的框圖。具體地,寄存器索引字段744包括REX字段805、REX’字段810、MODR/M.reg字段844、MODR/M.r/m字段846、VVVV字段820、xxx字段854和bbb字段856。
增廣操作字段
圖8D是圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例構(gòu)成增廣操作字段750的特定向量友好指令格式800的框圖。在類別(U)字段768包含0時(shí),它表示EVEX.U0(類別A 768A);在它包含1時(shí),它表示EVEX.U1(類別B 768B)。在U=0并且MOD字段842包含11(其表示無存儲(chǔ)器訪問操作)時(shí),alpha字段752(EVEX字節(jié)3,位[7]-EH)解釋為rs字段752A。在rs字段752A包含1(舍入752A.1)時(shí),beta字段754(EVEX字節(jié)3,位[6:4]-SSS)解釋為舍入控制字段754A。舍入控制字段754A包括一位SAE字段756和兩位舍入操作字段758。在rs字段752A包含0(數(shù)據(jù)變換752A.2)時(shí),beta字段754(EVEX字節(jié)3,位[6:4]-SSS)解釋為三位數(shù)據(jù)變換字段754B。在U=0并且MOD字段842包含00、01或10(其表示存儲(chǔ)器訪問操作)時(shí),alpha字段752(EVEX字節(jié)3,位[7]-EH)解釋為驅(qū)逐提示(EH)字段752B并且beta字段754(EVEX字節(jié)3,位[6:4]-SSS)解釋為三位數(shù)據(jù)操縱字段754C。
在U=1時(shí),alpha字段752(EVEX字節(jié)3,位[7]-EH)解釋為寫掩蔽控制(Z)字段752C。在U=1并且MOD字段842包含11(其表示無存儲(chǔ)器訪問操作)時(shí),beta字段754(EVEX字節(jié)3,位[4]-S0)的部分解釋為RL字段757A;在它包含1(舍入757A.1)時(shí),beta字段754的余下部分(EVEX字節(jié)3,位[6-5]-S2-1)解釋為舍入操作字段759A,而在RL字段757A包含0(VSIZE 757.A2)時(shí),beta字段754的余下部分(EVEX字節(jié)3,位[6-5]-S2-1)解釋為向量長度字段759B(EVEX字節(jié)3,位[6-5]-L1-0)。在U=1并且MOD字段842包含00、01或10(其表示存儲(chǔ)器訪問操作)時(shí),beta字段754(EVEX字節(jié)3,位[6:4]-SSS)解釋為向量長度字段759B(EVEX字節(jié)3,位[6-5]-L1-0)和廣播字段757B(EVEX字節(jié)3,位[4]-B)。
示范性寄存器架構(gòu)
圖9是根據(jù)本發(fā)明的一個(gè)實(shí)施例的寄存器架構(gòu)900的框圖。在圖示的實(shí)施例中,存在32個(gè)向量寄存器910,其是512位寬;這些寄存器引用為zmm0至zmm31。較低16個(gè)zmm寄存器的較低階356個(gè)位覆蓋在寄存器ymm0-16上。較低16個(gè)zmm寄存器的較低階128個(gè)位(ymm寄存器的較低階128個(gè)位)覆蓋在寄存器xmm0-15上。特定向量友好指令格式800對(duì)如在下文的表6中圖示的這些覆蓋寄存器堆操作。
表6-寄存器
也就是說,向量長度字段759B在最大長度與一個(gè)或多個(gè)其他較短長度之間選擇,其中每個(gè)這樣的較短長度是預(yù)編碼長度的長度的一半;并且沒有向量長度字段759B的指令模板對(duì)最大向量長度操作。此外,在一個(gè)實(shí)施例中,特定向量友好指令格式800的類別B指令模板對(duì)緊縮或標(biāo)量單/雙精度浮點(diǎn)數(shù)據(jù)和緊縮或標(biāo)量整數(shù)數(shù)據(jù)操作。標(biāo)量操作是對(duì)zmm/ymm/xmm寄存器中的最低階數(shù)據(jù)元素位置執(zhí)行的操作;較高階數(shù)據(jù)元素位置保留為與它們?cè)谥噶钪耙粯踊蛘邭w零,這取決于實(shí)施例。
寫掩蔽寄存器915-在圖示的實(shí)施例中,存在8個(gè)寫掩蔽寄存器(k0至k7),每個(gè)的大小是64個(gè)位。在備選實(shí)施例中,寫掩蔽寄存器915的大小是16個(gè)位。如之前描述的,在本發(fā)明的一個(gè)實(shí)施例中,向量掩蔽寄存器k0無法用作寫掩蔽;在通常將指示k0的編碼用于寫掩蔽時(shí),它選擇硬接線寫掩蔽0xFFFF,從而有效地對(duì)該指令停用寫掩蔽。
通用寄存器925-在圖示的實(shí)施例中,存在十六個(gè)64位通用寄存器,其連同現(xiàn)有x86尋址模式一起使用來對(duì)存儲(chǔ)器操作數(shù)尋址。這些寄存器通過它們的名稱RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8至R15來引用。
標(biāo)量浮點(diǎn)堆棧寄存器堆(x87堆棧)945,在其上混疊MMX緊縮整數(shù)平面寄存器堆950-在圖示的實(shí)施例中,x87堆棧是用于使用x87指令集擴(kuò)展對(duì)32/64/80位浮點(diǎn)數(shù)據(jù)執(zhí)行標(biāo)量浮點(diǎn)運(yùn)算的八元素堆棧;而MMX寄存器用于對(duì)64位緊縮整數(shù)數(shù)據(jù)執(zhí)行操作,以及用于對(duì)在MMX與XMM寄存器之間執(zhí)行的某些操作保持操作數(shù)。
備選實(shí)施例可以使用更寬或更窄寄存器。另外,備選實(shí)施例可以使用更多、更少或不同的寄存器堆和寄存器。
示范性核架構(gòu)、處理器和計(jì)算機(jī)架構(gòu)
處理器核可以由于不同目的采用不同方式以及在不同處理器中實(shí)現(xiàn)。例如,這樣的核的實(shí)現(xiàn)可以包括:1)預(yù)計(jì)用于通用計(jì)算的通用有序核;2)預(yù)計(jì)用于通用計(jì)算的高性能通用無序核;3)主要預(yù)計(jì)用于圖形和/或科學(xué)(吞吐量)計(jì)算的專用核。不同處理器的實(shí)現(xiàn)可以包括:1)CPU,其包括預(yù)計(jì)用于通用計(jì)算的一個(gè)或多個(gè)通用有序核和/或預(yù)計(jì)用于通用計(jì)算的一個(gè)或多個(gè)通用無序核;以及2)協(xié)處理器,其包括主要預(yù)計(jì)用于圖形和/或科學(xué)(吞吐量)的一個(gè)或多個(gè)專用核。這樣的不同處理器導(dǎo)致不同的計(jì)算機(jī)系統(tǒng)架構(gòu),其可以包括:1)與CPU在單獨(dú)芯片上的協(xié)處理器;2)與CPU在相同的封裝件中的單獨(dú)晶片上的協(xié)處理器;3)與CPU在相同晶片上的協(xié)處理器(在該情況下,這樣的協(xié)處理器有時(shí)稱為專用邏輯,例如集成圖形和/或科學(xué)(吞吐量)邏輯,或稱為專用核);以及4)芯片上系統(tǒng),其在相同晶片上可以包括描述的CPU(有時(shí)稱為應(yīng)用核或應(yīng)用處理器)、上文描述的協(xié)處理器和額外功能性。接著描述示范性核架構(gòu),后跟示范性處理器和計(jì)算機(jī)架構(gòu)的描述。
示范性核架構(gòu)
有序和無序核框圖
圖10A是圖示根據(jù)實(shí)施例的示范性有序流水線和示范性寄存器重命名、無序發(fā)出/執(zhí)行流水線兩者的框圖。圖10B是圖示有序架構(gòu)核的示范性實(shí)施例和根據(jù)實(shí)施例在處理器中要包括的示范性寄存器重命名、無序發(fā)出/執(zhí)行架構(gòu)核兩者的框圖。圖10A-B中的實(shí)線框圖示有序流水線和有序核,而虛線框的可選添加圖示寄存器重命名、無序發(fā)出/執(zhí)行流水線和核??紤]到有序方面是無序方面的子集,將描述無序方面。
在圖10A中,處理器流水線1000包括提取段1002、長度解碼段1004、解碼段1006、分配段1008、重命名段1010、調(diào)度(也稱為調(diào)派或發(fā)出)段1012、寄存器讀取/存儲(chǔ)器讀取段1014、執(zhí)行段1016、寫回/存儲(chǔ)器寫入段1018、異常處理段1022和提交段1024。
圖10B示出處理器核1090,其包括耦合于執(zhí)行引擎單元1050的前端單元1030,并且這兩者都耦合于存儲(chǔ)器單元1070。核1090可以是精簡指令集計(jì)算(RISC)核、復(fù)雜指令集計(jì)算(CISC)核、超長指令字(VLIW)核或混合或備選核類型。作為再另一個(gè)選項(xiàng),核1090可以是專用核,例如網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用計(jì)算圖形處理單元(GPGPU)核、圖形核或類似物。
前端單元1030包括分支預(yù)測單元1032,其耦合于指令高速緩存行1034,該指令高速緩存單元1034耦合于指令翻譯后備緩沖器(TLB)1036,其耦合于指令提取單元1038,該指令提取單元1038耦合于解碼單元1040。解碼單元1040(或解碼器)可以對(duì)指令解碼,并且生成一個(gè)或多個(gè)微操作、微代碼入口點(diǎn)、微指令、其他指令或其他控制信號(hào)作為輸出,其從原始指令解碼或另外反映原始指令或從原始指令得出。解碼單元1040可以使用各種不同機(jī)制實(shí)現(xiàn)。適合機(jī)制的示例包括但不限于查找表、硬件實(shí)現(xiàn)、可編程邏輯陣列(PLA)、微代碼只讀存儲(chǔ)器(ROM)等。在一個(gè)實(shí)施例中,核1090包括微代碼ROM或存儲(chǔ)對(duì)于某些宏指令(例如,在解碼單元1040中或另外在前端單元1030內(nèi))的微代碼的其他介質(zhì)。解碼單元1140耦合于執(zhí)行引擎單元1050中的重命名/分配器單元1052。
執(zhí)行引擎單元1050包括重命名/分配器單元1052,其耦合于引退單元1054和一個(gè)或多個(gè)調(diào)度器單元的集1056。調(diào)度器單元1056代表任意數(shù)量的不同調(diào)度器,其包括保留站、中央指令窗口等。調(diào)度器單元1056耦合于物理寄存器堆單元1058。物理寄存器堆單元1058中的每個(gè)代表一個(gè)或多個(gè)物理寄存器堆,其中的不同物理寄存器堆存儲(chǔ)一個(gè)或多個(gè)不同數(shù)據(jù)類型,例如標(biāo)量整數(shù)、標(biāo)量浮點(diǎn)、緊縮整數(shù)、緊縮浮點(diǎn)、向量整數(shù)、向量浮點(diǎn)、狀態(tài)(例如,指令指針,其是要執(zhí)行的下一個(gè)指令的地址)等。在一個(gè)實(shí)施例中,物理寄存器堆單元1058包括向量寄存器單元、寫掩蔽寄存器單元和標(biāo)量寄存器單元。這些寄存器單元可以提供架構(gòu)向量寄存器、向量掩蔽寄存器和通用寄存器。物理寄存器堆單元1058與引退單元1054重疊來圖示可以實(shí)現(xiàn)寄存器重命名和無序執(zhí)行所采用的各種方式(例如,使用重排序緩沖器和引退寄存器堆;使用未來文件、歷史緩沖器和引退寄存器堆;使用寄存器映射和寄存器池;等)。引退單元1054和物理寄存器堆單元1058耦合于執(zhí)行集群1060。執(zhí)行集群1060包括一個(gè)或多個(gè)執(zhí)行單元的集1062和一個(gè)或多個(gè)存儲(chǔ)器訪問單元的集1064。執(zhí)行單元1062可以對(duì)各種類型的數(shù)據(jù)(例如,標(biāo)量浮點(diǎn)、緊縮整數(shù)、緊縮浮點(diǎn)、向量整數(shù)、向量浮點(diǎn))執(zhí)行各種操作(例如,移位、加法、減法、乘法)。盡管一些實(shí)施例可以包括專用于特定功能或功能集的許多執(zhí)行單元,其他實(shí)施例可以僅包括一個(gè)執(zhí)行單元或多個(gè)執(zhí)行單元,其全部執(zhí)行所有功能。因?yàn)槟承?shí)施例對(duì)某些類型的數(shù)據(jù)/操作創(chuàng)建單獨(dú)流水線(例如,標(biāo)量整數(shù)流水線、標(biāo)量浮點(diǎn)/緊縮整數(shù)/緊縮浮點(diǎn)/向量整數(shù)/向量浮點(diǎn)流水線,和/或存儲(chǔ)器訪問流水線,每個(gè)具有它們自身的調(diào)度器單元、物理寄存器堆單元和/或執(zhí)行集群-并且在單獨(dú)存儲(chǔ)器訪問流水線的情況下,實(shí)現(xiàn)其中僅該流水線的執(zhí)行集群具有存儲(chǔ)器訪問單元1064的某些實(shí)施例),調(diào)度器單元1056、物理寄存器堆單元1058和執(zhí)行集群1060示出為可能是復(fù)數(shù)個(gè)。還應(yīng)理解,在使用單獨(dú)流水線的情況下,這些流水線中的一個(gè)或多個(gè)可以是無序發(fā)出/執(zhí)行并且余下的是有序的。
存儲(chǔ)器訪問單元集1064耦合于存儲(chǔ)器單元1070,其包括耦合于數(shù)據(jù)高速緩存單元1074的數(shù)據(jù)TLB單元1072,該數(shù)據(jù)高速緩存單元1074耦合于2級(jí)(L2)高速緩存單元1076。在一個(gè)示范性實(shí)施例中,存儲(chǔ)器訪問單元1064可以包括負(fù)載單元、存儲(chǔ)地址單元和存儲(chǔ)數(shù)據(jù)單元,其中的每個(gè)耦合于存儲(chǔ)器單元1070中的數(shù)據(jù)TLB單元1072。指令高速緩存單元1034進(jìn)一步耦合于存儲(chǔ)器單元1070中的2級(jí)(L2)高速緩存單元1076。L2高速緩存單元1076耦合于一個(gè)或多個(gè)其他級(jí)高速緩存并且最終耦合于主存儲(chǔ)器。
通過示例,示范性寄存器重命名無序發(fā)出/執(zhí)行核架構(gòu)可以如下實(shí)現(xiàn)流水線1000:1)指令提取1138執(zhí)行提取和長度解碼段1002和1004;2)解碼單元1040執(zhí)行解碼段1006;3)重命名/分配器單元1052執(zhí)行分配段1008和重命名段1010;4)調(diào)度器單元1056執(zhí)行調(diào)度段1012;5)物理寄存器堆單元1058和存儲(chǔ)器單元1070執(zhí)行寄存器讀取/存儲(chǔ)器讀取段1014;執(zhí)行集群1060執(zhí)行執(zhí)行段1016;6)存儲(chǔ)器單元1070和物理寄存器堆單元1058執(zhí)行寫回/存儲(chǔ)器寫入段1018;7)在異常處理段1022中可以牽涉各種單元;以及8)引退單元1054和物理寄存器堆單元1058執(zhí)行提交段1024。
核1090可以支持:一個(gè)或多個(gè)指令集(例如,x86指令集(具有添加有較新版本的一些擴(kuò)展);加利福尼亞州Sunnyvale市的MIPS Technologies的MIPS指令集;加利福尼亞州San Jose市的ARM Holdings的ARM指令集(具有可選的額外擴(kuò)展,例如NEON)),其包括本文描述的指令。在一個(gè)實(shí)施例中,核1090包括支持緊縮數(shù)據(jù)指令集擴(kuò)展(例如,AVX1、AVX2,和/或某一形式的通用向量友好指令格式(U=0和/或U=1))的邏輯,由此允許被許多多媒體應(yīng)用使用的操作使用緊縮數(shù)據(jù)來執(zhí)行。
應(yīng)理解,核可以支持多線程(執(zhí)行兩個(gè)或以上并行集的操作或線程),并且可以采用多種方式這樣做,包括時(shí)間分片多線程、同時(shí)多線程(其中單個(gè)物理核對(duì)線程中的每個(gè)提供邏輯核,該物理核是同時(shí)多線程的)或其組合(例如,時(shí)間分片提取和解碼以及之后的同時(shí)多線程,例如在Intel? Hyperthreading技術(shù)中)。
盡管在無序執(zhí)行的上下文中描述寄存器重命名,應(yīng)理解,寄存器重命名可以在有序架構(gòu)中使用。盡管處理器的圖示實(shí)施例還包括單獨(dú)指令和數(shù)據(jù)高速緩存單元1034/1074和共享L2高速緩存單元1076,備選實(shí)施例可以對(duì)于指令和數(shù)據(jù)兩者具有單個(gè)內(nèi)部高速緩存,例如1級(jí)(L1)內(nèi)部高速緩存,或多級(jí)內(nèi)部高速緩存。在一些實(shí)施例中,系統(tǒng)可以包括內(nèi)部高速緩存以及在核和/或處理器外部的外部高速緩存的組合。備選地,所有高速緩存可以在核和/或處理器外部。
特定示范性有序核架構(gòu)
圖11A-B圖示更特定的示范性有序核架構(gòu)的框圖,該核將是芯片中的若干邏輯塊(其包括具有相同類型和/或不同類型的其他核)中的一個(gè)。邏輯塊通過根據(jù)應(yīng)用具有某種固定功能邏輯、存儲(chǔ)器I/O接口和其他必要I/O邏輯的高帶寬互連網(wǎng)絡(luò)(例如,環(huán)型網(wǎng)絡(luò))來通信。
圖11A是根據(jù)實(shí)施例的單個(gè)處理器核連同它到晶片上互連網(wǎng)絡(luò)1102的連接以及它的2級(jí)(L2)高速緩存1104的本地子集的框圖。在一個(gè)實(shí)施例中,指令解碼器1100支持具有緊縮數(shù)據(jù)指令集擴(kuò)展的x86指令集。L1高速緩存1106允許對(duì)高速緩存存儲(chǔ)器直至標(biāo)量和向量單元的低延遲訪問。盡管在一個(gè)實(shí)施例中(為了簡化設(shè)計(jì)),標(biāo)量單元1108和向量單元1110使用單獨(dú)寄存器集(分別地,標(biāo)量寄存器1112和向量寄存器1114)并且在它們之間傳輸?shù)臄?shù)據(jù)被寫入存儲(chǔ)器并且然后從1級(jí)(L1)高速緩存1106讀回,備選實(shí)施例可以使用不同的方法(例如,使用單個(gè)寄存器集或包括通信路徑,其允許數(shù)據(jù)在兩個(gè)寄存器堆之間傳輸而不被寫回和讀回)。
L2高速緩存1104的本地子集是全局L2高速緩存的部分,其分成單獨(dú)本地子集,每個(gè)處理器核一個(gè)。每個(gè)處理器核具有到它自己的L2高速緩存1104的本地子集的直接訪問路徑。處理器核讀取的數(shù)據(jù)存儲(chǔ)在它的L2高速緩存子集1104中并且可以與其他處理器核訪問它們自己的本地L2高速緩存子集并行地被快速訪問。處理器核寫入的數(shù)據(jù)存儲(chǔ)在它自己的L2高速緩存子集1104中并且如必要的話從其他子集刷新(flush)。環(huán)型網(wǎng)絡(luò)對(duì)共享數(shù)據(jù)確保一致性。環(huán)型網(wǎng)絡(luò)是雙向的,以允許例如處理器核、L2高速緩存和其他邏輯塊等代理在芯片內(nèi)彼此通信。每個(gè)環(huán)型數(shù)據(jù)路徑每個(gè)方向是1012位寬。
圖11B是根據(jù)實(shí)施例的圖11A中的處理器核的部分的展開圖。圖11B包括L1高速緩存1104的L1數(shù)據(jù)高速緩存1106A部分,以及關(guān)于向量單元1110和向量寄存器1114的更多細(xì)節(jié)。具體地,向量單元1110是16寬向量處理單元(VPU)(參見16寬ALU 1228),其執(zhí)行整數(shù)、單精度浮點(diǎn)和雙精度浮點(diǎn)指令中的一個(gè)或多個(gè)。VPU支持用攪和單元1120攪合寄存器輸入、利用數(shù)值轉(zhuǎn)換單元1122A-B的數(shù)值轉(zhuǎn)換以及對(duì)存儲(chǔ)器輸入用復(fù)制單元1124復(fù)制。寫掩蔽寄存器1126允許預(yù)測所得的向量寫入。
具有集成存儲(chǔ)器控制器和專用邏輯的處理器
圖12是根據(jù)實(shí)施例可以具有超過一個(gè)核、可以具有集成存儲(chǔ)器控制器并且可以具有集成圖形的處理器1200的框圖。圖12中的實(shí)線框圖示處理器1200,其具有單核1202A、系統(tǒng)代理1210、一個(gè)或多個(gè)總線控制器單元的集1216,而虛線框的可選添加圖示備選處理器1200,其具有多個(gè)核1202A-N、系統(tǒng)代理單元1210中的一個(gè)或多個(gè)集成存儲(chǔ)器控制器單元的集1214和專用邏輯1208。
從而,處理器1200的不同實(shí)現(xiàn)可以包括:1)CPU,其中專用邏輯1208是集成圖形和/或科學(xué)(吞吐量)邏輯(其可以包括一個(gè)或多個(gè)核),并且核1202A-N是一個(gè)或多個(gè)通用核(例如,通用有序核、通用無序核、兩者的組合);2)協(xié)處理器,其中核1202A-N是主要預(yù)計(jì)用于圖形和/或科學(xué)(吞吐量)的大量專用核;以及3)協(xié)處理器,其中核1202A-N是大量通用有序核。從而,處理器1200可以是通用處理器、協(xié)處理器或?qū)S锰幚砥鳎缇W(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高吞吐量的許多集成核(MIC)協(xié)處理器(其包括30個(gè)或以上的核)、嵌入式處理器或類似物。處理器可以在一個(gè)或多個(gè)芯片上實(shí)現(xiàn)。處理器1200可以是一個(gè)或多個(gè)襯底的一部分和/或可以在一個(gè)或多個(gè)襯底上使用許多工藝技術(shù)中的任一個(gè)來實(shí)現(xiàn),例如BiCMOS、CMOS或NMOS。
存儲(chǔ)器層級(jí)包括在核內(nèi)的一個(gè)或多個(gè)級(jí)別的高速緩存、一個(gè)或多個(gè)共享高速緩存單元的集1206和耦合于集成存儲(chǔ)器控制器單元集1214的外部存儲(chǔ)器(未示出)。共享高速緩存單元集1206可以包括一個(gè)或多個(gè)中間級(jí)別的高速緩存,例如2級(jí)(L2)、3級(jí)(L3)、4級(jí)(L4)或其他級(jí)別的高速緩存、最后級(jí)別的高速緩存(LLC)和/或其組合。盡管在一個(gè)實(shí)施例中基于環(huán)的互連單元1212使集成圖形邏輯1208、共享高速緩存單元集1206和系統(tǒng)代理單元1210/集成存儲(chǔ)器控制器單元1214互連,備選實(shí)施例可以使用任意數(shù)量的眾所周知的技術(shù)用于互連這樣的單元。在一個(gè)實(shí)施例中,維持一個(gè)或多個(gè)高速緩存單元1206與核1202-A-N之間的一致性。
在一些實(shí)施例中,核1202A-N中的一個(gè)或多個(gè)能夠多線程。系統(tǒng)代理1210包括協(xié)調(diào)并且操作核1202A-N的那些部件。系統(tǒng)代理單元1210可包括例如功率控制單元(PCU)和顯示單元。PCU可以是或包括用于調(diào)節(jié)核1202A-N和集成圖形邏輯1208的功率狀態(tài)所需要的邏輯和部件。顯示單元用于驅(qū)動(dòng)一個(gè)或多個(gè)外部連接的顯示器。
核1202A-N從架構(gòu)指令集方面來看可以是同構(gòu)或異構(gòu)的;即,核1202A-N中的兩個(gè)或以上可以能夠執(zhí)行相同指令集,而其他可以僅能夠執(zhí)行該指令集的子集或不同指令集。
示范性計(jì)算機(jī)架構(gòu)
圖13-16是示范性計(jì)算機(jī)架構(gòu)的框圖。本領(lǐng)域內(nèi)已知的對(duì)于便攜式電腦、臺(tái)式機(jī)、手持PC、個(gè)人數(shù)字助理、工程化工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機(jī)、嵌入式處理器、數(shù)字信號(hào)處理器(DSP)、圖形設(shè)備、視頻游戲設(shè)備、機(jī)頂盒、微控制器、手機(jī)、便攜式媒體播放器、手持設(shè)備和各種其他電子設(shè)備的其他系統(tǒng)設(shè)計(jì)和配置也是適合的。一般,能夠包含如本文公開的處理器和/或其他執(zhí)行邏輯的很多種系統(tǒng)或電子設(shè)備一般是適合的。
現(xiàn)在參考圖13,示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)1300的框圖。該系統(tǒng)1300可以包括一個(gè)或多個(gè)處理器1310、1315,其耦合于控制器中樞1320。在一個(gè)實(shí)施例中,控制器中樞1320包括圖形存儲(chǔ)器控制器中樞(GMCH)1390和輸入/輸出中樞(IOH)1350(其可以在單獨(dú)芯片上);GMCH 1390包括存儲(chǔ)器和圖形控制器,存儲(chǔ)器1340和協(xié)處理器1345耦合于這些存儲(chǔ)器和圖形控制器;IOH 1350使輸入/輸出(I/O)設(shè)備1360耦合于GMCH 1390。備選地,存儲(chǔ)器和圖形控制器中的一個(gè)或兩個(gè)在處理器內(nèi)集成(如本文描述的),存儲(chǔ)器1340和協(xié)處理器1345直接耦合于處理器1310和在具有IOH 1350的單芯片中的控制器中樞1320。
額外處理器1315的可選性質(zhì)在圖13中用折線指示。每個(gè)處理器1310、1315可以包括本文描述的處理核中的一個(gè)或多個(gè)并且可以是某一版本的處理器1200。
存儲(chǔ)器1340可以是例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、相變存儲(chǔ)器(PCM)或兩者的組合。對(duì)于至少一個(gè)實(shí)施例,控制器中樞1320經(jīng)由多點(diǎn)總線(例如前端總線(FSB))、點(diǎn)到點(diǎn)接口(例如QuickPath互連(QPI))或相似連接1395與處理器1310、1315通信。
在一個(gè)實(shí)施例中,協(xié)處理器1345是通用處理器,例如高吞吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器或類似物。在一個(gè)實(shí)施例中,控制器中樞1320可以包括集成圖形加速器。
從品質(zhì)(包括架構(gòu)、微架構(gòu)、熱、功耗特性及類似物)的度量譜方面來看,在物理資源1310、1315之間可以存在多種差異。
在一個(gè)實(shí)施例中,處理器1310執(zhí)行指令,其控制通用類型的數(shù)據(jù)處理操作。協(xié)處理器指令可以嵌入指令內(nèi)。處理器1310將這些協(xié)處理器指令識(shí)別為應(yīng)由附連協(xié)處理器1345執(zhí)行的類型。因此,處理器1310在協(xié)處理器總線或其他互連上向協(xié)處理器1345發(fā)出這些協(xié)處理器指令(或代表協(xié)處理器指令的控制信號(hào))。協(xié)處理器1345接受并且執(zhí)行接收的協(xié)處理器指令。
現(xiàn)在參考圖14,示出根據(jù)本發(fā)明的實(shí)施例的第一更具體示范性系統(tǒng)1400的框圖。如在圖14中示出的,多處理器系統(tǒng)1400是點(diǎn)到點(diǎn)互連系統(tǒng),并且包括經(jīng)由點(diǎn)到點(diǎn)互連1450而耦合的第一處理器1470和第二處理器1480。處理器1470和1480中的每個(gè)可以是某一版本的處理器1200。在本發(fā)明的一個(gè)實(shí)施例中,處理器1470和1480分別是處理器1310和1315,而協(xié)處理器1438是協(xié)處理器1345。在另一個(gè)實(shí)施例中,處理器1470和1480分別是處理器1410和協(xié)處理器1345。
示出處理器1470和1480,其分別包括集成存儲(chǔ)器控制器(IMC)單元1472和1482。處理器1470還包括點(diǎn)到點(diǎn)(P-P)接口1476和1478作為它的總線控制器單元的部分;相似地,第二處理器1480包括P-P接口1486和1488。處理器1470、1480可經(jīng)由點(diǎn)到點(diǎn)(P-P)接口1450使用P-P接口電路1478、1488交換信息。如在圖14中示出的,IMC 1472和1482使處理器耦合于相應(yīng)的存儲(chǔ)器,即存儲(chǔ)器1432和存儲(chǔ)器1434,其可以是本地附連到相應(yīng)處理器的主存儲(chǔ)器的部分。
處理器1470、1480每個(gè)可以使用點(diǎn)到點(diǎn)接口電路1476、1494、1486、1498經(jīng)由個(gè)體P-P接口1452、1454與芯片集1490交換信息。芯片集1490可以可選地經(jīng)由高性能接口1439與協(xié)處理器1438交換信息。在一個(gè)實(shí)施例中,協(xié)處理器1438是專用處理器,例如高吞吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器或類似物。
共享高速緩存(未示出)可以包括在任一處理器中或在兩個(gè)處理器外部,然而經(jīng)由P-P互連與處理器連接,使得如果處理器被置于低功率模式則任一或兩個(gè)處理器的本地高速緩存信息可以存儲(chǔ)在共享高速緩存中。
芯片集1490可以經(jīng)由接口1496耦合于第一總線1416。在一個(gè)實(shí)施例中,第一總線1416可以是外圍部件互連(PCI)總線,或例如PCI Express總線或另一個(gè)第三代I/O互連總線等總線,但本發(fā)明的范圍不受此限制。
如在圖14中示出的,各種I/O設(shè)備1414連同總線橋1418可以耦合于第一總線1416,該總線橋1418使第一總線1416耦合于第二總線1420。在一個(gè)實(shí)施例中,例如協(xié)處理器、高吞吐量MIC處理器、GPGPU、加速器(例如,圖形加速器或數(shù)字信號(hào)處理(DSP)單元)、現(xiàn)場可編程門陣列或任何其他處理器等一個(gè)或多個(gè)額外處理器1415耦合于第一總線1416。在一個(gè)實(shí)施例中,第二總線1420可以是低引腳計(jì)數(shù)(LPC)總線。各種設(shè)備可以耦合第二總線1420,其包括例如鍵盤和/或鼠標(biāo)1422、通信設(shè)備1427和存儲(chǔ)單元1428,例如盤驅(qū)動(dòng)器或其他大容量存儲(chǔ)設(shè)備,其在一個(gè)實(shí)施例中可以包括指令/代碼和數(shù)據(jù)1430。此外,音頻I/O 1424可以耦合于第二總線1420。注意其他架構(gòu)是可能的。例如,代替圖14的點(diǎn)到點(diǎn)架構(gòu),系統(tǒng)可以實(shí)現(xiàn)多點(diǎn)總線或其他這樣的架構(gòu)。
現(xiàn)在參考圖15,示出根據(jù)本發(fā)明的實(shí)施例的第二更具體的示范性系統(tǒng)1500的框圖。圖14和圖15中的類似元件具有類似的標(biāo)號(hào),并且圖14的某些方面已經(jīng)從圖15省略以避免混淆圖15的其他方面。
圖15圖示處理器1470、1480可以分別包括集成存儲(chǔ)器和I/O控制邏輯(“CL”)1472和1482。從而,CL 1472、1482包括集成存儲(chǔ)器控制器單元并且包括I/O控制邏輯。圖15圖示不僅存儲(chǔ)器1432、1434耦合于CL 1472、1482,而且I/O設(shè)備1514也耦合于控制邏輯1472、1482。遺留I/O設(shè)備1515耦合于芯片集1490。
現(xiàn)在參考圖16,示出根據(jù)本發(fā)明的實(shí)施例的SoC 1600的框圖。圖12中的相似元件具有類似的標(biāo)號(hào)。虛線框也是更先進(jìn)SoC上的可選特征。在圖16中,互連單元1602耦合于:應(yīng)用處理器1610,其包括:一個(gè)或多個(gè)核的集202A-N和共享高速緩存單元1206;系統(tǒng)代理單元1210;總線控制器單元1216;集成存儲(chǔ)器控制器單元1214;一個(gè)或多個(gè)協(xié)處理器的集1620,其可以包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)單元1630;直接存儲(chǔ)器訪問(DMA)單元1632;和顯示單元1640,用于耦合于一個(gè)或多個(gè)外部顯示器。在一個(gè)實(shí)施例中,協(xié)處理器1620包括專用處理器,例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、GPGPU、高吞吐量MIC處理器、嵌入式處理器或類似物。
本文公開的機(jī)制的實(shí)施例在硬件、軟件、固件或這樣的實(shí)現(xiàn)方法的組合中實(shí)現(xiàn)。實(shí)施例實(shí)現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計(jì)算機(jī)程序或程序代碼,這些可編程系統(tǒng)包括至少一個(gè)處理器、存儲(chǔ)系統(tǒng)(其包括易失性和非易失性存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備和至少一個(gè)輸出設(shè)備。
程序代碼(例如在圖14中圖示的代碼1430)可以應(yīng)用于輸入指令來執(zhí)行本文描述的功能并且生成輸出信息。該輸出信息可以采用已知方式應(yīng)用于一個(gè)或多個(gè)輸出設(shè)備。為了該申請(qǐng),處理系統(tǒng)包括具有處理器的任何系統(tǒng),例如;數(shù)字信號(hào)處理器(DSP)、微控制器、專用集成電路(ASIC)或微處理器。
[程序代碼可以采用高級(jí)程序式或面向?qū)ο蟮木幊陶Z言實(shí)現(xiàn)來與處理系統(tǒng)通信。根據(jù)期望,程序代碼還可以采用匯編或機(jī)器語言實(shí)現(xiàn)。實(shí)際上,本文描述的機(jī)構(gòu)在范圍上不限于任何特定編程語言。在任何情況下,語言可以是編譯或解釋語言。
至少一個(gè)實(shí)施例的一個(gè)或多個(gè)方面可以由存儲(chǔ)在機(jī)器可讀介質(zhì)上的代表性指令來實(shí)現(xiàn),該機(jī)器可讀介質(zhì)代表處理器內(nèi)的各種邏輯,其在被機(jī)器讀取時(shí)促使該機(jī)器構(gòu)造邏輯來執(zhí)行本文描述的技術(shù)。這樣的表示(稱為“IP核”)可以存儲(chǔ)在有形的機(jī)器可讀介質(zhì)上并且供應(yīng)給各種客戶或制造設(shè)施來裝入實(shí)際上構(gòu)造邏輯或處理器的構(gòu)造機(jī)器。
這樣的機(jī)器可讀存儲(chǔ)介質(zhì)可以無限制地包括由機(jī)器或設(shè)備構(gòu)造或形成的物品的非暫時(shí)性有形設(shè)置,包括存儲(chǔ)介質(zhì),例如硬盤、任何其他類型的盤(包括軟盤、光盤、壓縮盤只讀存儲(chǔ)器(CD-ROM)、壓縮盤可重寫(CD-RW)和磁光盤)、半導(dǎo)體器件、例如只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)(例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM))、可擦除可編程只讀存儲(chǔ)器(EPROM)、閃速存儲(chǔ)器、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、相變存儲(chǔ)器(PCM)、磁或光卡,或適合于存儲(chǔ)電子指令的任何其他類型的介質(zhì)。
因此,本發(fā)明的實(shí)施例還包括非暫時(shí)性有形機(jī)器可讀介質(zhì),其包含指令或包含設(shè)計(jì)數(shù)據(jù),例如硬件描述語言(HDL),其定義本文描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特征。這樣的實(shí)施例還可以稱作程序產(chǎn)品。
仿真(其包括二進(jìn)制翻譯、代碼變形等)
在一些情況下,指令轉(zhuǎn)換器可以用于將來自源指令集的指令轉(zhuǎn)換成目標(biāo)指令集。例如,指令轉(zhuǎn)換器可將指令翻譯(例如,使用靜態(tài)二進(jìn)制翻譯、動(dòng)態(tài)二進(jìn)制翻譯,其包括動(dòng)態(tài)編譯)、變形、仿真或用別的方式轉(zhuǎn)換成要由核處理的一個(gè)或多個(gè)其他指令。指令轉(zhuǎn)換器可在軟件、硬件、固件或其組合中實(shí)現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、離開處理器或部分在處理器上而部分不在處理器上。
圖17是根據(jù)實(shí)施例對(duì)比軟件指令轉(zhuǎn)換器使用的框圖,軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn)制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令。在圖示的實(shí)施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但備選地,指令轉(zhuǎn)換器可在軟件、固件、硬件或其各種組合中實(shí)現(xiàn)。圖17示出采用高級(jí)語言1702的程序可使用x86編譯器1704編譯來生成x86二進(jìn)制代碼1706,其可以由具有至少一個(gè)x86指令集核1716的處理器本機(jī)執(zhí)行。
具有至少一個(gè)x86指令集核1716的處理器代表任何處理器,其可以通過以下步驟而執(zhí)行與具有至少一個(gè)x86指令集核的Intel處理器大致相同的功能以便實(shí)現(xiàn)與具有至少一個(gè)x86指令集核的Intel處理器大致相同的結(jié)果:兼容地執(zhí)行或另外處理(1)Intel x86指令集核的指令集的相當(dāng)大一部分或(2)以在具有至少一個(gè)x86指令集核的Intel處理器上運(yùn)行為目的地的應(yīng)用或其他軟件的目標(biāo)代碼版本。x86編譯器1704代表能操作成生成x86二進(jìn)制代碼1706(例如,目標(biāo)代碼)的編譯器,這些x86二進(jìn)制代碼1706可以在具有或沒有額外鏈接處理的情況下在具有至少一個(gè)x86指令集核1716的處理器上執(zhí)行。相似地,圖17示出采用高級(jí)語言1702的程序可使用備選指令集編譯器1708編譯來生成備選指令集二進(jìn)制代碼1710,其可以由沒有至少一個(gè)x86指令集核1714的處理器(例如,具有執(zhí)行加利福尼亞州Sunnyvale市的MIPS Technologies的MIPS指令集和/或執(zhí)行加利福尼亞州San Jose市的ARM Holdings的ARM指令集的核的處理器)本機(jī)執(zhí)行。
指令轉(zhuǎn)換器1712用于將x86二進(jìn)制代碼1706轉(zhuǎn)換成可以由沒有x86指令集核1714的處理器本機(jī)執(zhí)行的代碼。該轉(zhuǎn)換代碼因?yàn)橛写四芰Φ闹噶钷D(zhuǎn)換器難以制造而不太可能與備選指令集二進(jìn)制代碼1710相同;然而,轉(zhuǎn)換代碼將完成一般操作并且由來自備選指令集的指令構(gòu)成。從而,指令轉(zhuǎn)換器1712代表軟件、固件、硬件或其組合,其通過仿真、模擬或任何其他過程而允許不具有x86指令集處理器或核的處理器或其他電子設(shè)備執(zhí)行x86二進(jìn)制代碼1706。
在前面的說明中,參考本發(fā)明的特定示范性實(shí)施例來描述本發(fā)明。然而,可以對(duì)其做出各種修改和改變而不偏離如在附上的權(quán)利要求中闡述的本發(fā)明的更廣泛精神和范圍,這將是顯而易見的。說明和附圖因此要在說明性而非限制性意義上來看待。
本文描述的指令指硬件的特定配置,例如專用集成電路(ASIC),其配置成執(zhí)行某些操作或具有預(yù)定功能性。這樣的電子設(shè)備典型地包括一個(gè)或多個(gè)處理器的集,其耦合于一個(gè)或多個(gè)其他部件,例如一個(gè)或多個(gè)存儲(chǔ)設(shè)備(非暫時(shí)性機(jī)器可讀存儲(chǔ)介質(zhì))、用戶輸入/輸出設(shè)備(例如,鍵盤、觸屏和/或顯示器)和網(wǎng)絡(luò)連接。處理器集與其他部件的耦合典型地通過一個(gè)或多個(gè)總線和橋(也稱作總線控制器)。存儲(chǔ)設(shè)備和承載網(wǎng)絡(luò)業(yè)務(wù)的信號(hào)分別代表一個(gè)或多個(gè)機(jī)器可讀存儲(chǔ)介質(zhì)和機(jī)器可讀通信介質(zhì)。從而,給定電子設(shè)備的存儲(chǔ)設(shè)備典型地存儲(chǔ)代碼和/或數(shù)據(jù)以供在該電子設(shè)備的一個(gè)或多個(gè)處理器的集上執(zhí)行。
當(dāng)然,本發(fā)明的實(shí)施例的一個(gè)或多個(gè)部分可以使用軟件、固件和/或硬件的不同組合來實(shí)現(xiàn)。在該整個(gè)詳細(xì)描述中,為了解釋目的,闡述許多特定細(xì)節(jié)以便提供對(duì)本發(fā)明的全面理解。然而,本發(fā)明可以在沒有這些特定細(xì)節(jié)中的一些的情況下實(shí)踐,這對(duì)于本領(lǐng)域技術(shù)人員將是明顯的。在某些實(shí)例中,未詳盡描述眾所周知的結(jié)構(gòu)和功能以避免使本發(fā)明的主旨難以理解。因此,本發(fā)明的范圍和精神應(yīng)從附上的權(quán)利要求方面來判定。