背景
實(shí)施例總體涉及計(jì)算機(jī)處理器領(lǐng)域。更具體地,涉及包括用于計(jì)算z曲線中的下一點(diǎn)的坐標(biāo)的向量指令的裝置。
相關(guān)技術(shù)描述
z序曲線是一種填充空間的曲線,填充空間的曲線是其域?yàn)閱挝婚g隔[0,1]的連續(xù)函數(shù)。z排序(例如,莫頓排序)可以為大的數(shù)據(jù)集合提供顯著的性能改善,其中多維局部性是重要的,包括稀疏和密集矩陣操作(尤其是矩陣乘)、有限元分析、圖像分析、地震分析、光線跟蹤等等。然而,從坐標(biāo)計(jì)算z序曲線索引可能是計(jì)算密集的。
附圖說(shuō)明
結(jié)合以下附圖,從以下具體實(shí)施方式中可獲得對(duì)本實(shí)施例更好的理解,其中:
圖1a-b示出8x8矩陣的示例性z序映射;
圖2a-b示出用于沿指定維度遞增z曲線索引的示例性位操作;
圖3是示出在z曲線索引內(nèi)的被選擇的坐標(biāo)的位的框圖;
圖4是根據(jù)實(shí)施例的用于計(jì)算z曲線中的下一點(diǎn)的坐標(biāo)的向量指令的操作數(shù)和邏輯的框圖;
圖5a是示出根據(jù)實(shí)施例的用于計(jì)算z曲線中的下一點(diǎn)的向量指令的操作的框圖;
圖5b是示出用于實(shí)現(xiàn)一個(gè)或多個(gè)微操作的示例性邏輯門(mén)布置的框圖;
圖6是根據(jù)實(shí)施例的用于沿指定維度計(jì)算z曲線中的下一點(diǎn)的坐標(biāo)的向量指令的流程圖;
圖7是用于實(shí)現(xiàn)本文中所描述的向量指令的實(shí)施例的處理器的框圖;
圖8a-8b是示出根據(jù)實(shí)施例的通用向量友好指令格式及其指令模板的框圖;
圖9a-d是示出根據(jù)實(shí)施例的示例性專(zhuān)用向量友好指令格式的框圖;
圖10是根據(jù)一個(gè)實(shí)施例的寄存器架構(gòu)的框圖;
圖11a是示出示例性有序取出、解碼、引退流水線以及示例性寄存器重命名的亂序發(fā)布/執(zhí)行流水線兩者的框圖;
圖11b是示出要包括在實(shí)施例中的有序取出、解碼、引退核的示例性實(shí)施例和示例性的寄存器重命名的亂序發(fā)布/執(zhí)行架構(gòu)核的框圖;
圖12a-b示出示例性有序核架構(gòu)的框圖;
圖13是根據(jù)實(shí)施例的具有多于一個(gè)核、集成存儲(chǔ)器控制器、集成圖形器件的處理器的框圖;
圖14示出示例性計(jì)算系統(tǒng)的框圖;
圖15示出第二示例性計(jì)算系統(tǒng)的框圖;
圖16示出第三示例性計(jì)算系統(tǒng)的框圖;
圖17示出根據(jù)實(shí)施例的芯片上系統(tǒng)(soc)的框圖;以及
圖18示出對(duì)照使用軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn)制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的框圖。
具體實(shí)施方式
在下面的描述中,出于解釋目的闡述了眾多具體細(xì)節(jié)以便提供對(duì)以下描述的實(shí)施例的完全理解。然而,對(duì)本領(lǐng)域技術(shù)人員顯而易見(jiàn)的是,沒(méi)有這些具體細(xì)節(jié)中的一些細(xì)節(jié)也可實(shí)踐實(shí)施例。在其他實(shí)例中,公知的結(jié)構(gòu)和設(shè)備以框圖形式示出以避免混淆實(shí)施例的基礎(chǔ)概念。在一個(gè)實(shí)施例中,描述了擴(kuò)展英特爾架構(gòu)(ia)的架構(gòu)擴(kuò)展,但是基本原理并不限于任何特定的isa。
向量和simd指令概覽
某些類(lèi)型的應(yīng)用通常需要對(duì)大量數(shù)據(jù)項(xiàng)執(zhí)行相同的操作(被稱(chēng)為“數(shù)據(jù)并行性”)。單指令多數(shù)據(jù)(simd)是指使處理器對(duì)多個(gè)數(shù)據(jù)項(xiàng)執(zhí)行一個(gè)操作的指令類(lèi)型。simd技術(shù)尤其適用于可以將寄存器中的多個(gè)位邏輯地劃分成多個(gè)固定大小的數(shù)據(jù)元素(其中,每個(gè)數(shù)據(jù)元素表示單獨(dú)的值)的處理器。例如,可將256位寄存器中的多個(gè)位指定為將以下列形式被操作的源操作數(shù):四個(gè)單獨(dú)的64位緊縮數(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ù)類(lèi)型被稱(chēng)為“緊縮”數(shù)據(jù)類(lèi)型或“向量”數(shù)據(jù)類(lèi)型,并且該數(shù)據(jù)類(lèi)型的操作數(shù)被稱(chēng)為緊縮數(shù)據(jù)操作數(shù)或向量操作數(shù)。換言之,緊縮數(shù)據(jù)項(xiàng)或向量是指緊縮數(shù)據(jù)元素的序列,并且緊縮數(shù)據(jù)操作數(shù)或向量操作數(shù)是simd指令(也被稱(chēng)為緊縮數(shù)據(jù)指令或向量指令)的源操作數(shù)或目的地操作數(shù)。
諸如由具有包括x86、mmxtm、流式simd擴(kuò)展(sse)、sse2、sse3、sse4.1以及sse4.2指令的指令集的
z曲線索引概覽
在一個(gè)實(shí)施例中,處理器包括用于在給定當(dāng)前索引的情形下計(jì)算z序曲線的沿指定維度的下一索引的32位和64位機(jī)器級(jí)指令。z序曲線是一種填充空間的曲線,填充空間的曲線是其域?yàn)閱挝婚g隔[0,1]的連續(xù)函數(shù)。z曲線排序(例如,莫頓排序)可以為大的數(shù)據(jù)集合提供顯著的性能改善,其中多維局部性是重要的,包括稀疏和密集矩陣操作(尤其是矩陣乘)、有限元分析、圖像分析、地震分析、光線跟蹤等等。z曲線排序通過(guò)增加局部性以及為分塊或分片操作提供邏輯的基本原理來(lái)改善數(shù)據(jù)集合分析的性能。
然而,從坐標(biāo)計(jì)算沿z序曲線的索引和從索引計(jì)算坐標(biāo)是處理器密集的。因此,本文中描述了用于計(jì)算z序曲線中的下一點(diǎn)的坐標(biāo)的向量指令以用于當(dāng)分析大的數(shù)據(jù)集合時(shí)減少計(jì)算開(kāi)銷(xiāo)并且改善應(yīng)用性能。坐標(biāo)的集合的z曲線索引是指定與坐標(biāo)相關(guān)聯(lián)的沿z序曲線的點(diǎn)的索引。索引可以通過(guò)對(duì)每個(gè)坐標(biāo)的位執(zhí)行混洗操作以將坐標(biāo)的位交織為所得的z曲線索引而形成。給定沿z序曲線的具體索引(例如,z曲線索引),為了找到沿指定維度的z序曲線中的下一點(diǎn)的坐標(biāo),可以將z曲線索引的位解混洗為相應(yīng)的坐標(biāo)、可以遞增指定維度的給定的坐標(biāo)、以及可以將坐標(biāo)值的位重新混洗為新索引。在本文中所描述的一個(gè)實(shí)施例中,優(yōu)化的實(shí)現(xiàn)方式標(biāo)識(shí)經(jīng)混洗的索引中的坐標(biāo)的位并且遞增索引內(nèi)的坐標(biāo)而不執(zhí)行解混洗和重新混洗操作。
圖1a示出所示的8x8矩陣100的每個(gè)元素的z序密鑰映射。在顯示的每個(gè)元素中,較高階的位在頂部,而較低階的位在底部。z曲線排序的一個(gè)實(shí)現(xiàn)方式通過(guò)將每個(gè)維度中的原始索引中的每一個(gè)的位交織(例如,混洗)而執(zhí)行的。所示的矩陣100的每個(gè)元素中示出的z排序是通過(guò)將矩陣100中的每個(gè)元素的維度_1101和維度_2102的值按位交織而生成的。
例如,可以通過(guò)將每個(gè)維度的坐標(biāo)的位交織來(lái)確定在坐標(biāo)[2,3](例如,維度_1101中的二進(jìn)制010和維度_2102中的二進(jìn)制011)處的元素的z曲線索引,產(chǎn)生二進(jìn)制z曲線索引001101(例如,0x0d)。示例性z曲線索引值指示在坐標(biāo)[2,3]處的矩陣元素是示例性矩陣100的z序曲線中的第13個(gè)(零索引的,以10為基)索引。盡管為了示例性目的示出了簡(jiǎn)單的二維(2d)z曲線和相關(guān)聯(lián)的索引,但是本文中所描述的指令可以對(duì)具有兩個(gè)、三個(gè)或四個(gè)維度的n維z序曲線執(zhí)行。
圖1b是通過(guò)按z序順序地跟蹤元素的矩陣元素而創(chuàng)建的z曲線200的圖示。為了找到沿給定維度的下一索引,給定z曲線索引,可以將索引解構(gòu)建或解混洗為組成坐標(biāo)、可以通過(guò)遞增相關(guān)坐標(biāo)來(lái)生成新坐標(biāo)、以及可以從新坐標(biāo)計(jì)算新索引。替代地,可以使用位操縱算法來(lái)計(jì)算新索引而不對(duì)索引解構(gòu)建或解混洗。
遞增z曲線索引中的坐標(biāo)
圖2a-b示出用于沿指定維度遞增z曲線索引的示例性位操作。示出了六位二維z曲線索引202(例如,第一2dz曲線索引202a和第二2dz曲線索引202b),使用邏輯來(lái)計(jì)算該索引202以從三位第一坐標(biāo)204和三位第二坐標(biāo)(例如,經(jīng)解混洗的坐標(biāo)206a和被遞增的坐標(biāo)206b)中構(gòu)建z曲線索引。圖2a示出將z曲線索引202a解混洗為組成坐標(biāo)204、206a的解混洗操作。圖2b示出遞增坐標(biāo)(例如,被遞增的坐標(biāo)206b)和重新計(jì)算新z曲線索引202b。
如圖2a所示,實(shí)施例可以通過(guò)首先對(duì)z曲線索引的位執(zhí)行解混洗操作203而解混洗為組成坐標(biāo)值來(lái)計(jì)算沿指定維度的z序曲線中的下一點(diǎn)的索引坐標(biāo)。示例性2dz曲線索引202包括來(lái)自?xún)蓚€(gè)坐標(biāo)的位。第一坐標(biāo)206a包括位x2、x1和x0,指示坐標(biāo)x的第二、第一和零位。第二坐標(biāo)204包括位y2、y1和y0,指示坐標(biāo)y的第二、第一和零位。為了創(chuàng)建2dz曲線索引,已經(jīng)將組成位混洗為z曲線索引y2x2y1x1y0x0。逆z序曲線操作(例如,解混洗操作203)可以用于將z曲線索引解混洗為組成部分。
如圖2b所示,在索引202a被解混洗之后,實(shí)施例可以遞增被選擇的坐標(biāo),并且可以通過(guò)將坐標(biāo)重新混洗來(lái)創(chuàng)建新索引202b。圖2a的經(jīng)混洗的第一坐標(biāo)206a的位被遞增以創(chuàng)建被遞增的坐標(biāo)206b,由位x’2、x’1和x’0表示。使用z序曲線索引操作205來(lái)將被遞增的坐標(biāo)206b的位與第二坐標(biāo)204的位重新混洗以計(jì)算具有位布置υ2x’2υ1x’1υ0x’0的新2dz曲線索引202b。
應(yīng)當(dāng)理解,本文中參考使用被指定為x、y、z、t等等的維度的坐標(biāo)的操作來(lái)描述實(shí)施例。坐標(biāo)用于定義諸如2d、3d或4d空間的n維空間內(nèi)的位置。本領(lǐng)域技術(shù)人員將理解,使用的坐標(biāo)是示例性的,并且x、y、z和t坐標(biāo)一般指代用于在z曲線排序適用的任意n維空間內(nèi)定義位置、第一、第二、第三、第四維度等等的任何坐標(biāo)的集合位置的。
圖3是示出在z曲線索引內(nèi)的被選擇的坐標(biāo)的位的框圖。實(shí)施例包括32位和64位向量指令的集合,給定z曲線索引值、索引中的維度的數(shù)量和要遞增的坐標(biāo),指令找到沿z曲線的下一點(diǎn)的坐標(biāo)。指令使用向量處理操作和位操縱以遞增給定的z曲線索引內(nèi)的相關(guān)位而無(wú)須將索引解混洗為它們相應(yīng)的坐標(biāo)。圖3示出示例性2dz曲線索引302中的示例性坐標(biāo)x的位位置,其中坐標(biāo)位x0312、x1314、x2316到xn318貫穿索引被混洗。
圖4是根據(jù)實(shí)施例的用于計(jì)算z曲線中的下一點(diǎn)的坐標(biāo)的向量指令的操作數(shù)和邏輯的框圖。在一個(gè)實(shí)施例中,實(shí)現(xiàn)向量指令從而經(jīng)由src1操作數(shù)402輸入當(dāng)前z曲線索引401。立即數(shù)操作數(shù)406的位零和一(例如,[1:0])包括索引的維度的數(shù)量(例如,對(duì)于二維、三維、或四維索引的dimsel405中的“0b10”、“0b11”或“0b00”的值)。立即數(shù)操作數(shù)406的位二和三(例如,[3:2])指示要遞增坐標(biāo)中的哪些(例如,對(duì)于索引中的第一、第二、第三或第四坐標(biāo)的coordsel407中的“0b00”、“0b01”、“0b10”或“0b11”的值)。在一個(gè)實(shí)施例中,立即值是八位立即值,其中四個(gè)高位(例如,[7:4])被顛倒。還包括目的地操作數(shù)412,用于指定寫(xiě)入所得的值的位置。指令通過(guò)將指定的部分的前導(dǎo)“1”值位變成“0”并且將第一個(gè)“0”位變成“1”來(lái)操作,其有效地將指定的被按位混洗的坐標(biāo)加1。
根據(jù)實(shí)施例,在單個(gè)機(jī)器級(jí)指令內(nèi)執(zhí)行操作,在執(zhí)行期間該指令被解碼為一個(gè)或多個(gè)微操作。在微指令級(jí),在被執(zhí)行單元處理之前,可以將與操作數(shù)相關(guān)聯(lián)的坐標(biāo)存儲(chǔ)在處理器寄存器中。在一個(gè)實(shí)施例中,復(fù)用器(例如,mux408)將源寄存器耦合到處理器執(zhí)行單元中的zordernext邏輯410。示例性指令的位操作通過(guò)下表1所示的偽代碼而示出。
表1-zordernext指令偽代碼
如表1所示,實(shí)施例包括具有目的地操作數(shù)(dst)、源操作數(shù)(src1)和八位立即數(shù)操作數(shù)(imm8)的zordernext指令。src1操作數(shù)可以是64位或32位寬的數(shù)據(jù)元素,其存儲(chǔ)由imm8[2:0]中指定的維度的數(shù)量(例如,imm8的位0和1)所定義的現(xiàn)有的z曲線索引,其中“0b10”對(duì)應(yīng)于二維索引,而“0b11”對(duì)應(yīng)于三維索引。在一個(gè)實(shí)施例中,“0b00”用于指示四維索引,因?yàn)槲炊x零維z曲線索引。
被選擇的要遞增的坐標(biāo)由imm8的位3和4定義,其中“0b00”對(duì)應(yīng)于第一坐標(biāo)、“0b01”對(duì)應(yīng)于第二坐標(biāo)、“0b10”對(duì)應(yīng)于第三坐標(biāo)以及“0b11”對(duì)應(yīng)于第四坐標(biāo)。在一個(gè)實(shí)施例中,坐標(biāo)選擇對(duì)應(yīng)于z曲線索引值內(nèi)的坐標(biāo)的位置。例如,對(duì)于通過(guò)對(duì)[tzyx]的位交織計(jì)算的四維z曲線索引,其中與“t”維度相關(guān)聯(lián)的坐標(biāo)位在最高有效位中并且與“x”維度相關(guān)聯(lián)的坐標(biāo)維度在最低有效位中,與“x”維度相關(guān)聯(lián)的坐標(biāo)為第一坐標(biāo),而與“t”維度相關(guān)聯(lián)的坐標(biāo)為第四坐標(biāo)。
圖5a是示出根據(jù)實(shí)施例的用于計(jì)算z曲線中的下一點(diǎn)的向量指令的操作的框圖。圖5b是示出用于執(zhí)行圖5a中示出的操作的示例性邏輯門(mén)布置550的框圖。指令的操作示出為使用示例性索引0b01101,并且計(jì)算沿第一索引維度的z序曲線中的下一點(diǎn),第一索引維度被示為x維度,其中x維度坐標(biāo)包括位0b101,而y維度坐標(biāo)包括位0b010。
示出了三級(jí)操作,第一級(jí)z曲線索引502a、第二級(jí)z曲線索引502b和第三級(jí)z曲線索引502c。在兩級(jí)中示出示例性位掩碼504,第一級(jí)位掩碼504a和第二級(jí)位掩碼504b。在操作期間,輸入2dz曲線索引(例如,第一級(jí)z曲線索引502a)0b011001包括來(lái)自x維度坐標(biāo)的位x0、x1和x2。使用第一級(jí)z曲線索引502a和第一級(jí)位掩碼504a的第一and操作506a確定下一級(jí)的操作是否會(huì)發(fā)生。
如果and操作產(chǎn)生“1”值,則對(duì)第一級(jí)z曲線索引502a和第一級(jí)位掩碼504a執(zhí)行xor操作508以產(chǎn)生第二級(jí)z曲線索引502b0b011000。對(duì)第二級(jí)位掩碼504b執(zhí)行第二and操作506b,第二級(jí)位掩碼504b是第一級(jí)位掩碼504a左移索引(例如,0b10)內(nèi)的維度的數(shù)量的位。第二and操作506b的結(jié)果為“0”。當(dāng)and操作的結(jié)果為“0”時(shí),對(duì)z曲線索引的當(dāng)前工作值(例如,第二級(jí)z曲線索引502b)和當(dāng)前位掩碼(例如,第二級(jí)位掩碼504b)執(zhí)行or操作510。在該情形下,or操作510的結(jié)果為第三級(jí)z曲線索引502c。第三級(jí)z曲線索引502c,在該實(shí)例中為結(jié)果值0b011100,其是指令的結(jié)果值,并且2dz曲線索引的x維度坐標(biāo)具有位0b110,而y維度坐標(biāo)具有位0b010。
圖5b示出可以用于實(shí)現(xiàn)與本文中所描述的指令的實(shí)施例相關(guān)聯(lián)的一個(gè)或多個(gè)微操作的示例性邏輯門(mén)布置550。將理解省略多種電路組件以避免混淆必要元件。如圖所示,對(duì)應(yīng)于第一級(jí)z曲線索引502a的源操作數(shù)552可以與被緊縮為立即數(shù)操作數(shù)554(例如,imm8)的維度和坐標(biāo)數(shù)據(jù)一起被接收。立即數(shù)操作數(shù)的位二和三控制第一移位器電路553以選擇初始坐標(biāo)位掩碼504a。可以使用xor邏輯門(mén)558來(lái)執(zhí)行第一級(jí)z曲線索引502a和第一級(jí)位掩碼504a之間的xor操作508。第二移位器電路555可以例如將位掩碼移位位零和一中的維度選擇值的位,以將第一級(jí)位掩碼504a轉(zhuǎn)換為第二級(jí)位掩碼504b,第二級(jí)位掩碼504b可以作為掩碼輸出566從邏輯門(mén)輸出,掩碼輸出566反映在單級(jí)操作后掩碼的狀態(tài)。
在一個(gè)實(shí)施例中,nand邏輯門(mén)556可以用于對(duì)第一級(jí)z曲線索引502a執(zhí)行第一and操作506a的邏輯的必然結(jié)果。可以由xor邏輯門(mén)558執(zhí)行xor操作??梢杂蒾r邏輯門(mén)560執(zhí)行or操作510??梢圆⑿械貓?zhí)行這些操作中的每一個(gè),nand門(mén)556在xor門(mén)558和or門(mén)560的輸出之間(經(jīng)由復(fù)用器561)選擇邏輯門(mén)的輸出值562。nand門(mén)556還對(duì)有效564位置位以指示輸出值562是有效輸出還是中間輸出。當(dāng)有效564被置位時(shí),控制邏輯(未示出)可以將輸出562存儲(chǔ)到目的地操作數(shù)指示的寄存器。當(dāng)有效564未被置位時(shí),可以使用掩碼輸出566和中間輸出值562來(lái)執(zhí)行后續(xù)的級(jí)。附加的邏輯級(jí)可以使用類(lèi)似的邏輯門(mén)布置或不同的邏輯門(mén)布置,因?yàn)槭境龅倪壿嬮T(mén)布置550為示例性的。
圖6是根據(jù)實(shí)施例的用于沿指定維度計(jì)算z曲線中的下一點(diǎn)的坐標(biāo)的向量指令的流程圖。如框602處所示,當(dāng)處理器取出用于計(jì)算z曲線中的下一點(diǎn)的坐標(biāo)的向量指令時(shí),指令流水線存在,指令具有第一源操作數(shù)、立即數(shù)操作數(shù)和目的地操作數(shù)。如框604處所示,處理器將z曲線索引指令解碼為一個(gè)或多個(gè)微操作。微操作使得處理器的組件(例如執(zhí)行單元)執(zhí)行各種操作,包括取出源操作數(shù)指示的源操作數(shù)值以及立即值的操作,如框606處所示。如框608處所示,在一個(gè)實(shí)施例中,處理器內(nèi)的邏輯單元執(zhí)行附加操作以從立即數(shù)操作數(shù)中檢索(例如,解碼、解緊縮、經(jīng)掩碼、讀取、移位等等)維度值和坐標(biāo)值。維度值指定z曲線索引的維度的數(shù)量并且坐標(biāo)值指定要遞增的坐標(biāo)以找到z曲線中的下一點(diǎn)。在一個(gè)實(shí)施例中,邏輯單元包括用于自動(dòng)將源坐標(biāo)值與源操作數(shù)隔離而不需要顯式檢索的硬件。
如框610處所示,當(dāng)取出源坐標(biāo)值并且檢索到維度和坐標(biāo)值時(shí),一個(gè)或多個(gè)微操作使得一個(gè)或多個(gè)執(zhí)行單元為指定坐標(biāo)計(jì)算指定維度的z曲線中的下一點(diǎn)的坐標(biāo)。如框612處所示,處理器然后可以將z曲線索引指令的結(jié)果存儲(chǔ)在目的地操作數(shù)指示的位置中。
圖7是用于實(shí)現(xiàn)本文中所描述的向量指令的實(shí)施例的處理器755的框圖。處理器755包括具有用于執(zhí)行本文中所描述的zordernext指令的zordernext執(zhí)行邏輯741的執(zhí)行單元740。當(dāng)執(zhí)行單元740執(zhí)行指令流時(shí),寄存器集合705為操作數(shù)、控制數(shù)據(jù)和其他類(lèi)型的數(shù)據(jù)提供寄存器存儲(chǔ)。
為簡(jiǎn)單起見(jiàn),在圖7中示出單個(gè)處理器核(“核0”)的細(xì)節(jié)。然而,將會(huì)理解,圖7中所示的每個(gè)核都可具有與核0相同或相似的邏輯集合。如所示出的那樣,每個(gè)核可包括根據(jù)指定的高速緩存管理策略的用于高速緩存指令和數(shù)據(jù)的專(zhuān)用一級(jí)(l1)高速緩存712和二級(jí)(l2)高速緩存711。l1高速緩存711包括用于存儲(chǔ)指令的單獨(dú)的指令高速緩存720和用于存儲(chǔ)數(shù)據(jù)的單獨(dú)的數(shù)據(jù)高速緩存721。存儲(chǔ)在各種處理器高速緩存之內(nèi)的指令和數(shù)據(jù)以可以是固定大小(如,64字節(jié)、128字節(jié)、512字節(jié)長(zhǎng)度的)高速緩存行的粒度被管理。該示例性實(shí)施例的每個(gè)核具有:從主存儲(chǔ)器700和/或共享的三級(jí)(l3)高速緩存716取出指令的指令取出單元710;用于對(duì)指令進(jìn)行解碼(例如,將程序指令解碼成微操作或“uops”)的解碼單元720;用于執(zhí)行指令(例如,本文所描述的zordernext指令)的執(zhí)行單元740;以及用于引退指令和寫(xiě)回結(jié)果的寫(xiě)回單元750。
指令取出單元710包括各種公知的組件,包括:用于存儲(chǔ)要從存儲(chǔ)器700(或高速緩存中的一個(gè))取出的下一指令的地址的下一指令指針703;用于存儲(chǔ)最近使用的虛擬向物理指令地址的映射以改善地址轉(zhuǎn)換速度的指令轉(zhuǎn)換后備緩沖器(itlb)704;用于推測(cè)地預(yù)測(cè)指令分支地址的分支預(yù)測(cè)單元702;以及用于存儲(chǔ)分支地址和目標(biāo)地址的分支目標(biāo)緩沖器(btb)701。一旦被取出,隨后指令被流式地傳送到指令流水線的其余的級(jí),包括,解碼單元730、執(zhí)行單元740和寫(xiě)回單元750。在下文的圖11a-b中更詳細(xì)地描述這些單元中的每一個(gè)的結(jié)構(gòu)和功能。
本文中所描述的實(shí)施例在處理裝置或數(shù)據(jù)處理系統(tǒng)中實(shí)現(xiàn)。在下面的描述中,闡述了很多特定細(xì)節(jié)以提供對(duì)本文中所描述的實(shí)施例的全面理解。然而,在沒(méi)有這些特定細(xì)節(jié)中的一些的情況下可以實(shí)踐實(shí)施例,這對(duì)于本領(lǐng)域技術(shù)人員將是清楚的。所描述的架構(gòu)特征中的一些是對(duì)英特爾架構(gòu)(ia)的擴(kuò)展。然而,基本原理不限于任何特定的isa。
指令集,或指令集架構(gòu)(isa)是涉及編程的計(jì)算機(jī)架構(gòu)的一部分,并包括原生數(shù)據(jù)類(lèi)型、指令、寄存器架構(gòu)、尋址模式、存儲(chǔ)器架構(gòu)、中斷和異常處理、以及外部輸入和輸出(i/o)。應(yīng)該注意,術(shù)語(yǔ)“指令”在本文中一般是指宏指令——即,提供給處理器供執(zhí)行的指令——而不是作為由處理器的解碼器解碼宏指令產(chǎn)生的結(jié)果的微指令或微操作(例如,微操作)。微指令或微操作可以配置為指示處理器上的執(zhí)行單元執(zhí)行操作以實(shí)現(xiàn)與宏指令相關(guān)聯(lián)的邏輯。
isa與微架構(gòu)不同,微架構(gòu)是用于實(shí)現(xiàn)指令集的處理器設(shè)計(jì)技術(shù)的集合。具有不同的微架構(gòu)的處理器可共享共同的指令集。例如,
指令集包括一個(gè)或多個(gè)指令格式。給定指令格式定義各種各樣的字段(位的數(shù)量、位的位置)以指定要執(zhí)行的操作以及對(duì)其要執(zhí)行該操作的操作數(shù)等。通過(guò)指令模板(或子格式)的定義來(lái)進(jìn)一步分解一些指令格式。例如,可將給定指令格式的指令模板定義為具有指令格式的字段的不同子集(所包括的字段通常按相同的順序,但是至少一些字段具有不同的位的位置,因?yàn)橛休^少的字段被包括)和/或定義為具有以不同的方式來(lái)解釋的給定字段。使用給定的指令格式(并且如果經(jīng)定義,則以該指令格式的一個(gè)給定的指令模板)來(lái)表達(dá)給定的指令,并且該給定的指令指定操作和操作數(shù)。指令流是具體的指令序列,其中,序列中的每條指令是按照指令格式(并且如果經(jīng)定義,按照該指令格式的指令模板中的一個(gè)給定的指令模板)的指令的發(fā)生。
示例性指令格式
本文中所描述的指令的實(shí)施例可以不同的格式體現(xiàn)。另外,在下文中詳述示例性系統(tǒng)、架構(gòu)、以及流水線。指令的實(shí)施例可在這些系統(tǒng)、架構(gòu)、以及流水線上執(zhí)行,但是不限于詳述的系統(tǒng)、架構(gòu)、以及流水線。
向量友好指令格式是適于向量指令(例如,存在專(zhuān)用于向量操作的特定字段)的指令格式。盡管描述了其中通過(guò)向量友好指令格式支持向量和標(biāo)量運(yùn)算兩者的實(shí)施例,但是替代實(shí)施例僅使用通過(guò)向量友好指令格式的向量運(yùn)算。
圖8a-8b是示出根據(jù)實(shí)施例的通用向量友好指令格式及其指令模板的框圖。圖8a是示出根據(jù)實(shí)施例的通用向量友好指令格式及其a類(lèi)指令模板的框圖;而圖8b是示出根據(jù)實(shí)施例的通用向量友好指令格式及其b類(lèi)指令模板的框圖。具體而言,為通用向量友好指令格式800定義了a類(lèi)和b類(lèi)指令模板,這兩類(lèi)指令模板都包括無(wú)存儲(chǔ)器訪問(wèn)805指令模板和存儲(chǔ)器訪問(wèn)820指令模板。在向量友好指令格式的上下文中的術(shù)語(yǔ)“通用”指不束縛于任何專(zhuān)用指令集的指令格式。
將描述其中向量友好指令格式支持以下情況的實(shí)施例,即64字節(jié)向量操作數(shù)長(zhǎng)度(或大小)與32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或大小)(并且由此,64字節(jié)向量由16個(gè)雙字大小的元素或者替代地8個(gè)四字大小的元素組成)、64字節(jié)向量操作數(shù)長(zhǎng)度(或大小)與16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或大小)、32字節(jié)向量操作數(shù)長(zhǎng)度(或大小)與32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(1字節(jié))數(shù)據(jù)元素寬度(或大小)、以及16字節(jié)向量操作數(shù)長(zhǎng)度(或大小)與32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(1字節(jié))數(shù)據(jù)元素寬度(或大小)。然而,替代實(shí)施例可支持更大、更小、和/或不同的向量操作數(shù)大小(例如,256字節(jié)向量操作數(shù))與更大、更小或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)。
圖8a中的a類(lèi)指令模板包括:1)在無(wú)存儲(chǔ)器訪問(wèn)805的指令模板內(nèi),示出無(wú)存儲(chǔ)器訪問(wèn)的完全舍入控制型操作810的指令模板以及無(wú)存儲(chǔ)器訪問(wèn)的數(shù)據(jù)變換型操作815的指令模板;以及2)在存儲(chǔ)器訪問(wèn)820的指令模板內(nèi),示出存儲(chǔ)器訪問(wèn)的時(shí)間825的指令模板和存儲(chǔ)器訪問(wèn)的非時(shí)間830的指令模板。圖8b中的b類(lèi)指令模板包括:1)在無(wú)存儲(chǔ)器訪問(wèn)805的指令模板內(nèi),示出無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制的部分舍入控制型操作812的指令模板以及無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制的vsize型操作817的指令模板;以及2)在存儲(chǔ)器訪問(wèn)820的指令模板內(nèi),示出存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制827的指令模板。
通用向量友好指令格式800包括下文中按照?qǐng)D8a-8b中所示出的順序列出的下列字段。
格式字段840-該字段中的特定值(指令格式標(biāo)識(shí)符值)唯一地標(biāo)識(shí)向量友好指令格式,并且由此標(biāo)識(shí)指令在指令流中以向量友好指令格式出現(xiàn)。由此,該字段對(duì)于僅具有通用向量友好指令格式的指令集是不需要的,在這個(gè)意義上該字段是任選的。
基礎(chǔ)操作字段842-其內(nèi)容區(qū)分不同的基礎(chǔ)操作。
寄存器索引字段844-其內(nèi)容直接或者通過(guò)地址生成來(lái)指定源和目的地操作數(shù)在寄存器中或者在存儲(chǔ)器中的位置。這些字段包括足夠數(shù)量的位以從pxq(例如,32x512、16x128、32x1024、64x1024)個(gè)寄存器堆中選擇n個(gè)寄存器。盡管在一個(gè)實(shí)施例中n可高達(dá)三個(gè)源和一個(gè)目的地寄存器,但是替代實(shí)施例可支持更多或更少的源和目的地寄存器(例如,可支持高達(dá)兩個(gè)源,其中這些源中的一個(gè)源還用作目的地,可支持高達(dá)三個(gè)源,其中這些源中的一個(gè)源還用作目的地,可支持高達(dá)兩個(gè)源和一個(gè)目的地)。
修飾符(modifier)字段846-其內(nèi)容將指定存儲(chǔ)器訪問(wèn)的以通用向量指令格式出現(xiàn)的指令與不指定存儲(chǔ)器訪問(wèn)的以通用向量指令格式出現(xiàn)的指令區(qū)分開(kāi);即在無(wú)存儲(chǔ)器訪問(wèn)805的指令模板與存儲(chǔ)器訪問(wèn)820的指令模板之間進(jìn)行區(qū)分。存儲(chǔ)器訪問(wèn)操作讀取和/或?qū)懭氲酱鎯?chǔ)器層次(在一些情況下,使用寄存器中的值來(lái)指定源和/或目的地地址),而非存儲(chǔ)器訪問(wèn)操作不這樣(例如,源和/或目的地是寄存器)。盡管在一個(gè)實(shí)施例中,該字段還在三種不同的方式之間選擇以執(zhí)行存儲(chǔ)器地址計(jì)算,但是替代實(shí)施例可支持更多、更少或不同的方式來(lái)執(zhí)行存儲(chǔ)器地址計(jì)算。
擴(kuò)充操作字段850-其內(nèi)容區(qū)分除基礎(chǔ)操作以外還要執(zhí)行各種不同操作中的哪一個(gè)操作。該字段是針對(duì)上下文的。在本發(fā)明的一個(gè)實(shí)施例中,此字段被劃分為類(lèi)別字段868、α字段852以及β字段854。擴(kuò)充操作字段850允許在單條指令而非2條、3條或4條指令中執(zhí)行多組共同的操作。
比例字段860-其內(nèi)容允許用于存儲(chǔ)器地址生成(例如,用于使用2比例*索引+基址的地址生成)的索引字段的內(nèi)容的按比例縮放。
位移字段862a-其內(nèi)容用作存儲(chǔ)器地址生成的一部分(例如,用于使用2比例*索引+基址+位移的地址生成)。
位移因數(shù)字段862b(注意,位移字段862a直接在位移因數(shù)字段862b上的并置指示使用一個(gè)或另一個(gè))-其內(nèi)容用作地址生成的一部分,它指定通過(guò)存儲(chǔ)器訪問(wèn)的大小(n)按比例縮放的位移因數(shù),其中n是存儲(chǔ)器訪問(wèn)中的字節(jié)數(shù)量(例如,用于使用2比例*索引+基址+按比例縮放的位移的地址生成)。忽略冗余的低階位,并且因此將位移因數(shù)字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)總大小(n)以生成要在計(jì)算有效地址時(shí)使用的最終位移。n的值由處理器硬件在運(yùn)行時(shí)基于完整操作碼字段874(稍后在本文中描述)和數(shù)據(jù)操縱字段854c確定。位移字段862a和位移因數(shù)字段862b不用于無(wú)存儲(chǔ)器訪問(wèn)805指令模板,和/或不同的實(shí)施例可以實(shí)現(xiàn)僅一者或兩者都不實(shí)現(xiàn),從這個(gè)意義上說(shuō),位移字段862a和位移因數(shù)字段862b是任選的。
數(shù)據(jù)元素寬度字段864-其內(nèi)容區(qū)分將使用多個(gè)數(shù)據(jù)元素寬度中的哪一個(gè)(在一些實(shí)施例中用于所有指令,在其他實(shí)施例中僅用于指令中的一些)。如果支持僅一個(gè)數(shù)據(jù)元素寬度和/或使用操作碼的某一方面來(lái)支持?jǐn)?shù)據(jù)元素寬度,則該字段是不需要的,在這個(gè)意義上該字段是任選的。
寫(xiě)掩碼字段870-其內(nèi)容在每一數(shù)據(jù)元素位置的基礎(chǔ)上控制目的地向量操作數(shù)中的數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴(kuò)充操作的結(jié)果。a類(lèi)指令模板支持合并-寫(xiě)掩碼操作,而b類(lèi)指令模板支持合并寫(xiě)掩碼操作和歸零寫(xiě)掩碼操作兩者。當(dāng)合并時(shí),向量掩碼允許在執(zhí)行任何操作期間保護(hù)目的地中的任何元素集免于更新(由基礎(chǔ)操作和擴(kuò)充操作指定);在另一實(shí)施例中,保持其中對(duì)應(yīng)掩碼位具有0的目的地的每一元素的舊值。相反,當(dāng)歸零時(shí),向量掩碼允許在執(zhí)行任何操作期間使目的地中的任何元素集歸零(由基礎(chǔ)操作和擴(kuò)充操作指定);在一個(gè)實(shí)施例中,目的地的元素在對(duì)應(yīng)掩碼位具有0值時(shí)被設(shè)為0。該功能的子集是控制執(zhí)行的操作的向量長(zhǎng)度的能力(即,從第一個(gè)到最后一個(gè)要修改的元素的跨度),然而,被修改的元素不一定要是連續(xù)的。如此,寫(xiě)掩碼字段870允許部分向量操作,包括加載、存儲(chǔ)、算術(shù)、邏輯等等。盡管描述了其中寫(xiě)掩碼字段870的內(nèi)容選擇了多個(gè)寫(xiě)掩碼寄存器中的包含要使用的寫(xiě)掩碼的一個(gè)寫(xiě)掩碼寄存器(并且由此寫(xiě)掩碼字段870的內(nèi)容間接地標(biāo)識(shí)了要執(zhí)行的掩碼操作)的實(shí)施例,但是替代實(shí)施例相反或另外允許掩碼寫(xiě)字段870的內(nèi)容直接地指定要執(zhí)行的掩碼操作。
立即數(shù)字段872-其內(nèi)容允許對(duì)本文中所描述的立即數(shù)操作數(shù)的指定。在一個(gè)實(shí)施例中,立即數(shù)操作數(shù)被直接編碼為機(jī)器指令的一部分。
類(lèi)字段868-其內(nèi)容在不同類(lèi)的指令之間進(jìn)行區(qū)分。參考圖8a-b,該字段的內(nèi)容在a類(lèi)和b類(lèi)指令之間進(jìn)行選擇。在圖8a-b中,使用圓角方形來(lái)指示在字段中存在專(zhuān)用值(例如,在圖8a-b中,分別是針對(duì)類(lèi)字段868的a類(lèi)868a和b類(lèi)868b)。
a類(lèi)指令模板
在a類(lèi)非存儲(chǔ)器訪問(wèn)805的指令模板的情況下,α字段852被解釋為rs字段852a,其內(nèi)容區(qū)分將執(zhí)行不同的擴(kuò)充操作類(lèi)型中的哪一種(例如,分別為無(wú)存儲(chǔ)器訪問(wèn)的舍入型操作810以及無(wú)存儲(chǔ)器訪問(wèn)的數(shù)據(jù)變換型操作815指令模板指定的舍入852a.1和數(shù)據(jù)變換852a.2),而β字段854區(qū)別將執(zhí)行指定的類(lèi)型的操作中的哪一個(gè)。在無(wú)存儲(chǔ)器訪問(wèn)805的指令模板中,比例字段860、位移字段862a以及位移比例字段862b不存在。
無(wú)存儲(chǔ)器訪問(wèn)的指令模板-完全舍入控制型操作
在無(wú)存儲(chǔ)器訪問(wèn)的完整舍入控制型操作810指令模板中,β字段854被解釋為舍入控制字段854a,其內(nèi)容提供靜態(tài)舍入操作。盡管在所描述的實(shí)施例中,舍入控制字段854a包括抑制所有浮點(diǎn)異常(sae)字段856和舍入操作控制字段858,但是替代實(shí)施例可以支持將這兩個(gè)概念編碼為同一個(gè)字段,或僅具有這些概念/字段中的一個(gè)或另一個(gè)(例如,可以?xún)H具有舍入操作控制字段858)。
sae字段856-其內(nèi)容區(qū)分是否禁用異常事件報(bào)告;當(dāng)sae字段856的內(nèi)容指示啟用抑制時(shí),給定的指令不報(bào)告任何種類(lèi)的浮點(diǎn)異常標(biāo)志,并且不喚起任何浮點(diǎn)異常處理程序。
舍入操作控制字段858-其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(gè)(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。如此,舍入操作控制字段858允許逐指令地改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個(gè)實(shí)施例中,舍入操作控制字段850的內(nèi)容優(yōu)先于該寄存器值。無(wú)存儲(chǔ)器訪問(wèn)的指令模板-數(shù)據(jù)變換型操作
在無(wú)存儲(chǔ)器訪問(wèn)的數(shù)據(jù)變換型操作815指令模板中,β字段854被解釋為數(shù)據(jù)變換字段854b,其內(nèi)容區(qū)分將執(zhí)行數(shù)個(gè)數(shù)據(jù)變換中的哪一個(gè)(例如,無(wú)數(shù)據(jù)變換、混合、廣播)。
在a類(lèi)存儲(chǔ)器訪問(wèn)820的指令模板的情況下,α字段852被解釋為驅(qū)逐提示字段852b,其內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪一個(gè)(在圖8a中,對(duì)于存儲(chǔ)器訪問(wèn)時(shí)效性825的指令模板和存儲(chǔ)器訪問(wèn)非時(shí)效性830的指令模板分別指定時(shí)效性的852b.1和非時(shí)效性的852b.2),而β字段854被解釋為數(shù)據(jù)操縱字段854c,其內(nèi)容區(qū)分要執(zhí)行多個(gè)數(shù)據(jù)操縱操作(也稱(chēng)為基元(primitive))中的哪一個(gè)(例如,無(wú)操縱、廣播、源的向上轉(zhuǎn)換、以及目的地的向下轉(zhuǎn)換)。存儲(chǔ)器訪問(wèn)820指令模板包括比例字段860,并且任選地包括位移字段862a或位移比例字段862b。
向量存儲(chǔ)器指令使用轉(zhuǎn)換支持來(lái)執(zhí)行來(lái)自存儲(chǔ)器的向量加載并將向量存儲(chǔ)到存儲(chǔ)器。如同尋常的向量指令,向量存儲(chǔ)器指令以數(shù)據(jù)元素式的方式與存儲(chǔ)器來(lái)回傳輸數(shù)據(jù),其中實(shí)際傳輸?shù)脑赜蛇x為寫(xiě)掩碼的向量掩碼的內(nèi)容規(guī)定。
存儲(chǔ)器訪問(wèn)的指令模板-時(shí)效性的
時(shí)效性的數(shù)據(jù)是可能足夠快地重新使用以從高速緩存受益的數(shù)據(jù)。然而,這是提示,且不同的處理器可以不同的方式實(shí)現(xiàn)它,包括完全忽略該提示。
存儲(chǔ)器訪問(wèn)的指令模板-非時(shí)效性的
非時(shí)效性數(shù)據(jù)是不大可能足夠快地重復(fù)使用以從第1級(jí)高緩存中的高速緩存操作獲益且應(yīng)當(dāng)給予驅(qū)逐優(yōu)先級(jí)的數(shù)據(jù)。然而,這是提示,且不同的處理器可以不同的方式實(shí)現(xiàn)它,包括完全忽略該提示。
b類(lèi)指令模板
在b類(lèi)指令模板的情況下,α字段852被解釋為寫(xiě)掩碼控制(z)字段852c,其內(nèi)容區(qū)分由寫(xiě)掩碼字段870控制的寫(xiě)掩碼操作應(yīng)當(dāng)是合并還是歸零。
在b類(lèi)非存儲(chǔ)器訪問(wèn)805指令模板的情況下,β字段854的部分被解釋為rl字段857a,其內(nèi)容區(qū)分將執(zhí)行不同的擴(kuò)充操作類(lèi)型中的哪一種(例如,分別為無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制部分舍入控制型操作812指令模板和無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制vsize型操作817指令模板指定的舍入857a.1和向量長(zhǎng)度(vsize)857a.2),而β字段854的其余部分區(qū)別將執(zhí)行指定類(lèi)型的操作中的哪一個(gè)。在無(wú)存儲(chǔ)器訪問(wèn)805的指令模板中,比例字段860、位移字段862a以及位移比例字段862b不存在。
在無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制部分舍入控制型操作810指令模板中,β字段854的其余部分被解釋為舍入操作字段859a,并且異常事件報(bào)告被禁用(給定的指令不報(bào)告任何種類(lèi)的浮點(diǎn)異常標(biāo)志,并且不引發(fā)任何浮點(diǎn)異常處理程序)。
舍入操作控制字段859a-正如舍入操作控制字段858,其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(gè)(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段859a允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個(gè)實(shí)施例中,舍入操作控制字段850的內(nèi)容優(yōu)先于該寄存器值。
在無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制vsize型操作817指令模板中,β字段854的其余部分被解釋為向量長(zhǎng)度字段859b,其內(nèi)容區(qū)分將執(zhí)行數(shù)個(gè)數(shù)據(jù)向量長(zhǎng)度中的哪一個(gè)(例如,128、256或512字節(jié))。
在b類(lèi)存儲(chǔ)器訪問(wèn)820指令模板的情況下,β字段854的部分被解釋為廣播字段857b,其內(nèi)容區(qū)分是否將執(zhí)行廣播類(lèi)型數(shù)據(jù)操縱操作,而β字段854的其余部分被解釋為向量長(zhǎng)度字段859b。存儲(chǔ)器訪問(wèn)820指令模板包括比例字段860,并且任選地包括位移字段862a或位移比例字段862b。
就通用向量友好指令格式800而言,完整操作碼字段874示出為包括格式字段840、基礎(chǔ)操作字段842以及數(shù)據(jù)元素寬度字段864。盡管示出了其中完整操作碼字段874包括所有這些字段的一個(gè)實(shí)施例,但是,在不是支持所有這些字段的實(shí)施例中,完整操作碼字段874包括少于全部這些字段。完整操作碼字段874提供操作代碼(操作碼)。
擴(kuò)充操作字段850、數(shù)據(jù)元素寬度字段864以及寫(xiě)掩碼字段870允許以通用向量友好指令格式逐指令地指定這些特征。
寫(xiě)掩碼字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建各種類(lèi)型的指令,因?yàn)檫@些指令允許基于不同的數(shù)據(jù)元素寬度應(yīng)用該掩碼。
在a類(lèi)和b類(lèi)內(nèi)出現(xiàn)的各種指令模板在不同的情形下是有益的。在一些實(shí)施例中,不同處理器或者處理器內(nèi)的不同核可支持僅a類(lèi)、僅b類(lèi)、或者可支持兩類(lèi)。舉例而言,旨在用于通用計(jì)算的高性能通用亂序核可僅支持b類(lèi),旨在主要用于圖形和/或科學(xué)(吞吐量)計(jì)算的核可僅支持a類(lèi),并且旨在用于兩者的核可支持兩者(當(dāng)然,具有來(lái)自?xún)深?lèi)的模板和指令的一些混合、但是并非來(lái)自?xún)深?lèi)的所有模板和指令的核在本發(fā)明的范圍內(nèi))。同樣,單一處理器可包括多個(gè)核,所有核支持相同的類(lèi)或者其中不同的核支持不同的類(lèi)。舉例而言,在具有單獨(dú)的圖形和通用核的處理器中,圖形核中的旨在主要用于圖形和/或科學(xué)計(jì)算的一個(gè)核可僅支持a類(lèi),而通用核中的一個(gè)或多個(gè)可以是具有旨在用于通用計(jì)算的僅支持b類(lèi)的亂序執(zhí)行和寄存器重命名的高性能通用核。不具有單獨(dú)的圖形核的另一處理器可包括既支持a類(lèi)又支持b類(lèi)的一個(gè)或多個(gè)通用有序或亂序核。
當(dāng)然,在不同實(shí)施例中,來(lái)自一類(lèi)的特征也可在其他類(lèi)中實(shí)現(xiàn)??墒挂愿呒?jí)語(yǔ)言撰寫(xiě)的程序成為(例如,及時(shí)編譯或者靜態(tài)編譯)各種不同的可執(zhí)行形式,包括:1)僅具有用于執(zhí)行的目標(biāo)處理器支持的一類(lèi)或多類(lèi)的指令的形式;或者2)具有使用所有類(lèi)的指令的不同組合而編寫(xiě)的替代例程且具有選擇這些例程以基于由當(dāng)前正在執(zhí)行代碼的處理器支持的指令而執(zhí)行的控制流代碼的形式。
圖9a-d是示出根據(jù)實(shí)施例的示例性專(zhuān)用向量友好指令格式的框圖。圖9示出專(zhuān)用向量友好指令格式900,其指定位置、大小、解釋和字段的次序、以及那些字段中的一些字段的值,在這個(gè)意義上向量友好指令格式900是專(zhuān)用的。專(zhuān)用向量友好指令格式900可以被用來(lái)擴(kuò)展x86指令集,并且由此,這些字段中的一些與用于現(xiàn)有的x86指令集及其擴(kuò)展(例如,avx)中的那些字段類(lèi)似或相同。該格式保持與具有擴(kuò)展的現(xiàn)有x86指令集的前綴編碼字段、實(shí)操作碼字節(jié)字段、modr/m字段、sib字段、位移字段、以及立即數(shù)字段一致。示出來(lái)自圖8的字段,來(lái)自圖9的字段映射到來(lái)自圖8的字段。
應(yīng)當(dāng)理解,雖然出于說(shuō)明的目的在通用向量友好指令格式800的上下文中,實(shí)施例參考專(zhuān)用向量友好指令格式900進(jìn)行了描述,但是本發(fā)明不限于專(zhuān)用向量友好指令格式900,聲明的地方除外。例如,通用向量友好指令格式800構(gòu)想了各種字段的各種可能的大小,而專(zhuān)用向量友好指令格式900示出為具有特定大小的字段。作為具體示例,盡管數(shù)據(jù)元素寬度字段864示出為專(zhuān)用向量友好指令格式900中的一個(gè)位字段,但是本發(fā)明不限于此(也就是說(shuō),通用向量友好指令格式800構(gòu)想數(shù)據(jù)元素寬度字段864的其他大小)。
通用向量友好指令格式800包括下文中按照?qǐng)D9a中所示出的順序列出的字段。
evex前綴(字節(jié)0-3)902——以四字節(jié)形式進(jìn)行編碼。
格式字段840(evex字節(jié)0,位[7:0])——第一字節(jié)(evex字節(jié)0)是格式字段840,并且它包含0x62(在本發(fā)明的一個(gè)實(shí)施例中用于區(qū)分向量友好指令格式的唯一值)。
第二-第四字節(jié)(evex字節(jié)1-3)包括提供專(zhuān)用能力的多個(gè)位字段。
rex字段905(evex字節(jié)1,位[7-5])-由evex.r位字段(evex字節(jié)1,位[7]–r)、evex.x位字段(evex字節(jié)1,位[6]–x)以及(857bex字節(jié)1,位[5]–b)組成。evex.r、evex.x和evex.b位字段提供與對(duì)應(yīng)vex位字段相同的功能,并且使用1補(bǔ)碼的形式進(jìn)行編碼,即zmm0被編碼為1111b,zmm15被編碼為0000b。這些指令的其他字段對(duì)如在本領(lǐng)域中已知的寄存器索引的較低三個(gè)位(rrr、xxx、以及bbb)進(jìn)行編碼,由此可通過(guò)增加evex.r、evex.x以及evex.b來(lái)形成rrrr、xxxx以及bbbb。
rex’字段810-這是rex’字段810的第一部分,并且是用于對(duì)擴(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ū)分,但是在modr/m字段(在下文中描述)中不接受mod字段中的值11;替代實(shí)施例不以反轉(zhuǎn)的格式存儲(chǔ)該指示的位以及下文中其他指示的位。值1用于對(duì)較低16個(gè)寄存器進(jìn)行編碼。換言之,r'rrrr是通過(guò)組合來(lái)自其他字段的evex.r'、evex.r以及其他rrr而形成的。
操作碼映射字段915(evex字節(jié)1,位[3:0]–mmmm)–其內(nèi)容對(duì)隱含的前導(dǎo)操作碼字節(jié)(0f、0f38、或0f3)進(jìn)行編碼。
數(shù)據(jù)元素寬度字段864(evex字節(jié)2,位[7]–w)-由記號(hào)evex.w表示。evex.w用于定義數(shù)據(jù)類(lèi)型的粒度(大小)(32位數(shù)據(jù)元素或64位數(shù)據(jù)元素)。
evex.vvvv920(evex字節(jié)2,位[6:3]-vvvv)——evex.vvvv的作用可包括如下:1)evex.vvvv編碼第一源寄存器操作數(shù)且對(duì)具有兩個(gè)或兩個(gè)以上源操作數(shù)的指令有效,第一源寄存器操作數(shù)以反轉(zhuǎn)(1補(bǔ)碼)形式被指定;2)evex.vvvv編碼目的地寄存器操作數(shù),目的地寄存器操作數(shù)針對(duì)特定向量位移以1補(bǔ)碼的形式被指定;或者3)evex.vvvv不編碼任何操作數(shù),保留該字段,并且應(yīng)當(dāng)包含1111b。由此,evex.vvvv字段920對(duì)以反轉(zhuǎn)(1補(bǔ)碼)的形式存儲(chǔ)的第一源寄存器指定符的4個(gè)低階位進(jìn)行編碼。取決于該指令,額外不同的evex位字段用于將說(shuō)明符大小擴(kuò)展到32個(gè)寄存器。
evex.u868類(lèi)字段(evex字節(jié)2,位[2]-u)——如果evex.u=0,則它指示a類(lèi)或evex.u0;如果evex.u=1,則它指示b類(lèi)或evex.u1。
前綴編碼字段925(evex字節(jié)2,位[1:0]-pp)——提供了用于基礎(chǔ)操作字段的附加位。除了對(duì)以evex前綴格式的傳統(tǒng)sse指令提供支持以外,這也具有壓縮simd前綴的益處(evex前綴只需要2位,而不是需要字節(jié)來(lái)表達(dá)simd前綴)。在一個(gè)實(shí)施例中,為了支持使用以傳統(tǒng)格式和以evex前綴格式兩者的simd前綴(66h、f2h、f3h)的傳統(tǒng)sse指令,將這些傳統(tǒng)simd前綴編碼為simd前綴編碼字段;在提供給解碼器的pla之前,在運(yùn)行時(shí)可被擴(kuò)展為傳統(tǒng)simd前綴(因此,pla可執(zhí)行傳統(tǒng)和evex格式的這些傳統(tǒng)指令,而無(wú)需修改)。雖然較新的指令可以直接將evex前綴編碼字段的內(nèi)容用作操作碼擴(kuò)展,但是某些實(shí)施例為了一致性而以類(lèi)似的方式擴(kuò)展,但是允許由這些傳統(tǒng)simd前綴指定的不同含義。替代實(shí)施例可重新設(shè)計(jì)pla以支持2位simd前綴編碼,并且由此不需要擴(kuò)展。
α字段852(evex字節(jié)3,位[7]–eh;也稱(chēng)為evex.eh、evex.rs、evex.rl、evex.寫(xiě)掩碼控制、以及evex.n;也以α示出)-如先前所述,該字段是針對(duì)上下文的。
β字段854(evex字節(jié)3,位[6:4]-sss,也稱(chēng)為evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;也以βββ示出)-如先前所述,該字段是針對(duì)上下文的。
rex’字段810-這是rex’字段的其余部分,并且是可用于對(duì)擴(kuò)展的32個(gè)寄存器集合的較高16個(gè)或較低16個(gè)寄存器進(jìn)行編碼的evex.v’位字段(evex字節(jié)3,位[3]–v’)。該位以位反轉(zhuǎn)的格式存儲(chǔ)。值1用于對(duì)較低16個(gè)寄存器進(jìn)行編碼。換言之,v'vvvv是通過(guò)組合evex.v'、evex.vvvv而形成的。
寫(xiě)掩碼字段870(evex字節(jié)3,位[2:0]-kkk)-其內(nèi)容指定寫(xiě)掩碼寄存器中的寄存器索引,如先前所述。在本發(fā)明的一個(gè)實(shí)施例中,特定值evex.kkk=000具有暗示沒(méi)有寫(xiě)掩碼用于特定指令的特殊行為(這可以各種方式實(shí)現(xiàn),包括使用硬連線到所有的寫(xiě)掩碼或者旁路掩碼硬件的硬件來(lái)實(shí)現(xiàn))。
實(shí)操作碼字段930(字節(jié)4)也稱(chēng)為操作碼字節(jié)。操作碼的一部分在該字段中被指定。
modr/m字段940(字節(jié)5)包括mod字段942、reg字段944以及r/m字段946。如前所述,mod字段942的內(nèi)容在存儲(chǔ)器訪問(wèn)操作與非存儲(chǔ)器訪問(wèn)操作之間進(jìn)行區(qū)分。reg字段944的作用可被歸結(jié)為兩種情形:對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼;或者被視為操作碼擴(kuò)展且不用于對(duì)任何指令操作數(shù)進(jìn)行編碼。r/m字段946的作用可包括如下:對(duì)引用存儲(chǔ)器地址的指令操作數(shù)進(jìn)行編碼,或者對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼。
比例、索引、基址(sib)字節(jié)(字節(jié)6)-如先前所述的,比例字段850的內(nèi)容用于存儲(chǔ)器地址生成。sib.xxx954和sib.bbb956-先前已經(jīng)針對(duì)寄存器索引xxxx和bbbb提及了這些字段的內(nèi)容。
位移字段862a(字節(jié)7-10)-當(dāng)mod字段942包含10時(shí),字節(jié)7-10是位移字段862a,并且它以與傳統(tǒng)32位位移(disp32)相同的方式工作,以字節(jié)粒度工作。
位移因數(shù)字段862b(字節(jié)7)-當(dāng)mod字段942包含01時(shí),字節(jié)7是位移因數(shù)字段862b。該字段的位置與傳統(tǒng)x86指令集8位位移(disp8)的位置相同,它以字節(jié)粒度工作。由于disp8是符號(hào)擴(kuò)展的,因此它僅能在-128和127字節(jié)偏移量之間尋址;在64字節(jié)高速緩存行的方面,disp8使用可被設(shè)為僅四個(gè)真正有用的值-128、-64、0和64的8位;由于常常需要更大的范圍,所以使用disp32;然而,disp32需要4個(gè)字節(jié)。與disp8和disp32對(duì)比,位移因數(shù)字段862b是disp8的重新解釋?zhuān)划?dāng)使用位移因數(shù)字段862b時(shí),通過(guò)將位移因數(shù)字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)訪問(wèn)的大小(n)來(lái)確定實(shí)際位移。這種類(lèi)型的位移被稱(chēng)為disp8*n。這減小了平均指令長(zhǎng)度(用于位移的單個(gè)字節(jié),但是具有大得多的范圍)。這種壓縮位移基于有效位移是存儲(chǔ)器訪問(wèn)的粒度的倍數(shù)的假設(shè),并且由此地址偏移量的冗余低階位不需要被編碼。換句話說(shuō),位移因數(shù)字段862b替代傳統(tǒng)x86指令集8位位移。由此,位移因數(shù)字段862b以與x86指令集8位位移相同的方式(因此在modrm/sib編碼規(guī)則中沒(méi)有變化)進(jìn)行編碼,唯一的不同在于,將disp8超載至disp8*n。換句話說(shuō),在編碼規(guī)則或編碼長(zhǎng)度中沒(méi)有變化,而僅在通過(guò)硬件對(duì)位移值的解釋中有變化(這需要按存儲(chǔ)器操作數(shù)的大小按比例縮放位移量以獲得字節(jié)式地址偏移量)。
立即數(shù)字段872如先前所述那樣進(jìn)行操作。
完整操作碼字段
圖9b是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的構(gòu)成完整操作碼字段874的專(zhuān)用向量友好指令格式900中的字段的框圖。具體而言,完整操作碼字段874包括格式字段840、基礎(chǔ)操作字段842以及數(shù)據(jù)元素寬度(w)字段864。基礎(chǔ)操作字段842包括前綴編碼字段925、操作碼映射字段915以及實(shí)操作碼字段930。
寄存器索引字段
圖9c是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的構(gòu)成寄存器索引字段844的專(zhuān)用向量友好指令格式900中的字段的框圖。具體地,寄存器索引字段844包括rex字段905、rex’字段910、modr/m.reg字段944、modr/m.r/m字段946、vvvv字段920、xxx字段954以及bbb字段956。
擴(kuò)充操作字段
圖9d是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的構(gòu)成擴(kuò)充操作字段850的專(zhuān)用向量友好指令格式900中的字段的框圖。當(dāng)類(lèi)(u)字段868包含0時(shí),它表示evex.u0(a類(lèi)868a);當(dāng)它包含1時(shí),它表示evex.u1(b類(lèi)868b)。當(dāng)u=0并且mod字段942包含11(表示無(wú)存儲(chǔ)器訪問(wèn)操作)時(shí),α字段852(evex字節(jié)3,位[7]-eh)被解釋為rs字段852a。當(dāng)rs字段852a包含1(舍入852a.1)時(shí),β字段854(evex字節(jié)3、位[6:4]-sss)被解釋為舍入控制字段854a。舍入控制字段854a包括一位的sae字段856和兩位的舍入操作字段858。當(dāng)rs字段852a包含0(數(shù)據(jù)變換852a.2)時(shí),β字段854(evex字節(jié)3,位[6:4]-sss)被解釋為三位的數(shù)據(jù)變換字段854b。當(dāng)u=0且mod字段942包含00、01或10(表示存儲(chǔ)器訪問(wèn)操作)時(shí),α字段852(evex字節(jié)3,位[7]–eh)被解釋為驅(qū)逐提示(eh)字段852b且β字段854(evex字節(jié)3,位[6:4]-sss)被解釋為三位的數(shù)據(jù)操縱字段854c。
當(dāng)u=1時(shí),α字段852(evex字節(jié)3,位[7]–eh)被解釋為寫(xiě)掩碼控制(z)字段852c。當(dāng)u=1且mod字段942包含11(表示無(wú)存儲(chǔ)器訪問(wèn)操作)時(shí),β字段854的一部分(evex字節(jié)3,位[4]–s0)被解釋為rl字段857a;當(dāng)它包含1(舍入857a.1)時(shí),β字段854的其余部分(evex字節(jié)3,位[6-5]–s2-1)被解釋為舍入操作字段859a,而當(dāng)rl字段857a包含0(vsize857.a2)時(shí),β字段854的其余部分(evex字節(jié)3,位[6-5]–s2-1)被解釋為向量長(zhǎng)度字段859b(evex字節(jié)3,位[6-5]–l1-0)。當(dāng)u=1且mod字段942包含00、01或10(表示存儲(chǔ)器訪問(wèn)操作)時(shí),β字段854(evex字節(jié)3,位[6:4]–sss)被解釋為向量長(zhǎng)度字段859b(evex字節(jié)3,位[6-5]–l1-0)和廣播字段857b(evex字節(jié)3,位[4]–b)。
示例性寄存器架構(gòu)
圖10是根據(jù)實(shí)施例的寄存器架構(gòu)1000的框圖。在所示出的實(shí)施例中,有32個(gè)512位寬的向量寄存器1010;這些寄存器被引用為zmm0到zmm31。較低的16個(gè)zmm寄存器的較低階256個(gè)位覆蓋在寄存器ymm0-16上。較低的16個(gè)zmm寄存器的較低階128個(gè)位(ymm寄存器的較低階128個(gè)位)覆蓋在寄存器xmm0-15上。專(zhuān)用向量友好指令格式900對(duì)這些覆蓋的寄存器堆操作,如在以下表2中所示的。
表2-寄存器
換句話說(shuō),向量長(zhǎng)度字段859b在最大長(zhǎng)度與一個(gè)或多個(gè)其他較短長(zhǎng)度之間進(jìn)行選擇,其中每一這種較短長(zhǎng)度是前一長(zhǎng)度的一半,并且不具有向量長(zhǎng)度字段859b的指令模板對(duì)最大向量長(zhǎng)度操作。此外,在一個(gè)實(shí)施例中,專(zhuān)用向量友好指令格式900的b類(lèi)指令模板對(duì)緊縮或標(biāo)量單/雙精度浮點(diǎn)數(shù)據(jù)以及緊縮或標(biāo)量整數(shù)數(shù)據(jù)操作。標(biāo)量操作是對(duì)zmm/ymm/xmm寄存器中的最低階數(shù)據(jù)元素位置執(zhí)行的操作;取決于本實(shí)施例,較高階數(shù)據(jù)元素位置保持與在指令之前相同或者歸零。
寫(xiě)掩碼寄存器1015——在所示實(shí)施例中,有8個(gè)寫(xiě)掩碼寄存器(k0到k7),每一個(gè)的大小都是64位。在替代實(shí)施例中,寫(xiě)掩碼寄存器1015的大小為16位。如先前所述的,在本發(fā)明的一個(gè)實(shí)施例中,向量掩碼寄存器k0無(wú)法用作寫(xiě)掩碼;當(dāng)正常指示k0的編碼用作寫(xiě)掩碼時(shí),它選擇硬連線的寫(xiě)掩碼0xffff,從而有效地停用該指令的寫(xiě)掩碼操作。
通用寄存器1025——在所示實(shí)施例中,有十六個(gè)64位通用寄存器,這些寄存器與現(xiàn)有的x86尋址模式一起使用來(lái)對(duì)存儲(chǔ)器操作數(shù)尋址。這些寄存器通過(guò)名稱(chēng)rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8到r15來(lái)引用。
標(biāo)量浮點(diǎn)棧寄存器堆(x87棧)1045,在其上重疊了mmx緊縮整數(shù)平坦寄存器堆1050——在所示出的實(shí)施例中,x87棧是用于使用x87指令集擴(kuò)展來(lái)對(duì)32/64/80位浮點(diǎn)數(shù)據(jù)執(zhí)行標(biāo)量浮點(diǎn)操作的八元素棧;而使用mmx寄存器來(lái)對(duì)64位緊縮整數(shù)數(shù)據(jù)執(zhí)行操作,以及為在mmx和xmm寄存器之間執(zhí)行的某些操作保存操作數(shù)。
替代實(shí)施例可以使用較寬的或較窄的寄存器。另外,替代實(shí)施例可以使用更多、更少或不同的寄存器堆和寄存器。
為了提供更完整的理解,以下提供示例性處理器核架構(gòu)、處理器和計(jì)算機(jī)架構(gòu)的概覽。
示例性核架構(gòu)、處理器和計(jì)算機(jī)架構(gòu)
處理器核可以以不同方式、出于不同目的、在不同的處理器中實(shí)現(xiàn)。例如,這樣的核的實(shí)現(xiàn)可以包括:1)旨在用于通用計(jì)算的通用有序核;2)旨在用于通用計(jì)算的高性能通用亂序核;3)旨在主要用于圖形和/或科學(xué)(吞吐量)計(jì)算的專(zhuān)用核。不同處理器的實(shí)現(xiàn)可包括:1)包括旨在用于通用計(jì)算的一個(gè)或多個(gè)通用有序核和/或旨在用于通用計(jì)算的一個(gè)或多個(gè)通用亂序核的cpu;以及2)包括旨在主要用于圖形和/或科學(xué)(吞吐量)的一個(gè)或多個(gè)專(zhuān)用核的協(xié)處理器。這樣的不同處理器導(dǎo)致不同的計(jì)算機(jī)系統(tǒng)架構(gòu),其可包括:1)在與cpu分開(kāi)的芯片上的協(xié)處理器;2)在與cpu相同的封裝中但分開(kāi)的管芯上的協(xié)處理器;3)與cpu在相同管芯上的協(xié)處理器(在該情況下,這樣的協(xié)處理器有時(shí)被稱(chēng)為諸如集成圖形和/或科學(xué)(吞吐量)邏輯等的專(zhuān)用邏輯,或被稱(chēng)為專(zhuān)用核);以及4)可以將所描述的cpu(有時(shí)被稱(chēng)為應(yīng)用核或應(yīng)用處理器)、以上描述的協(xié)處理器和附加功能包括在同一管芯上的芯片上系統(tǒng)。接著描述示例性核架構(gòu),隨后描述示例性處理器和計(jì)算機(jī)架構(gòu)。
示例性核架構(gòu)
有序和亂序核框圖
圖11a是示出根據(jù)實(shí)施例的示例性有序流水線和示例性的寄存器重命名的亂序發(fā)布/執(zhí)行流水線的框圖。圖11b是示出根據(jù)實(shí)施例的要被包括在處理器中的有序架構(gòu)核的和示例性寄存器重命名的亂序發(fā)布/執(zhí)行架構(gòu)核的示例性實(shí)施例的框圖。圖11a-b中的實(shí)線框示出了有序流水線和有序核,而可選增加的虛線框示出了寄存器重命名的、亂序發(fā)布/執(zhí)行流水線和核。給定有序方面是亂序方面的子集的情況下,將描述亂序方面。
在圖11a中,處理器流水線1100包括取出級(jí)1102、長(zhǎng)度解碼級(jí)1104、解碼級(jí)1106、分配級(jí)1108、重命名級(jí)1110、調(diào)度(也稱(chēng)為分派或發(fā)布)級(jí)1112、寄存器讀取/存儲(chǔ)器讀取級(jí)1114、執(zhí)行級(jí)1116、寫(xiě)回/存儲(chǔ)器寫(xiě)入級(jí)1118、異常處理級(jí)1122以及提交級(jí)1124。
圖11b示出了包括耦合到執(zhí)行引擎單元1150的前端單元1130的處理器核1190,且執(zhí)行引擎單元和前端單元兩者都耦合到存儲(chǔ)器單元1170。核1190可以是精簡(jiǎn)指令集計(jì)算(risc)核、復(fù)雜指令集計(jì)算(cisc)核、超長(zhǎng)指令字(vliw)核或混合或替代核類(lèi)型。作為又一選項(xiàng),核1190可以是專(zhuān)用核,諸如例如網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用計(jì)算圖形處理單元(gpgpu)核、或圖形核等等。
前端單元1130包括耦合至指令高速緩存單元1134的分支預(yù)測(cè)單元1132,指令高速緩存單元1134耦合至指令轉(zhuǎn)換后備緩沖器(tlb)1136,指令轉(zhuǎn)換后備緩沖器1136耦合至指令取出單元1138,指令取出單元1138耦合至解碼單元1140。解碼單元1140(或解碼器)可解碼指令,并生成從原始指令解碼出的、或以其它方式反映原始指令的、或從原始指令導(dǎo)出的一個(gè)或多個(gè)微操作、微代碼進(jìn)入點(diǎn)、微指令、其它指令、或其它控制信號(hào)作為輸出。解碼單元1140可使用各種不同的機(jī)制來(lái)實(shí)現(xiàn)。合適的機(jī)制的示例包括但不僅限于,查找表、硬件實(shí)現(xiàn)、可編程邏輯陣列(pla)、微代碼只讀存儲(chǔ)器(rom)等等。在一個(gè)實(shí)施例中,核1190包括(例如,在解碼單元1140中或以其他方式在前端單元1130內(nèi)的)用于存儲(chǔ)某些宏指令的微代碼的微代碼rom或其他介質(zhì)。解碼單元1140耦合至執(zhí)行引擎單元1150中的重命名/分配器單元1152。
執(zhí)行引擎單元1150包括耦合至引退單元1154的重命名/分配器單元1152以及一組一個(gè)或多個(gè)調(diào)度器單元1156。調(diào)度器單元1156表示任意數(shù)量的不同調(diào)度器,包括預(yù)留站、中心指令窗等。調(diào)度器單元1156耦合到物理寄存器堆單元1158。每個(gè)物理寄存器堆單元1158表示一個(gè)或多個(gè)物理寄存器堆,其中不同的物理寄存器堆存儲(chǔ)一種或多種不同的數(shù)據(jù)類(lèi)型,諸如標(biāo)量整數(shù)、標(biāo)量浮點(diǎn)、緊縮整數(shù)、緊縮浮點(diǎn)、向量整數(shù)、向量浮點(diǎn)、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等。在一個(gè)實(shí)施例中,物理寄存器堆單元1158包括向量寄存器單元、寫(xiě)掩碼寄存器單元和標(biāo)量寄存器單元。這些寄存器單元可以提供架構(gòu)向量寄存器、向量掩碼寄存器、和通用寄存器。物理寄存器堆單元1158與引退單元1154重疊以示出可以用來(lái)實(shí)現(xiàn)寄存器重命名和亂序執(zhí)行的各種方式(例如,使用重新排序緩沖器和引退寄存器堆;使用將來(lái)的文件、歷史緩沖器和引退寄存器堆;使用寄存器映射和寄存器池等等)。引退單元1154和物理寄存器堆單元1158耦合到執(zhí)行群集1160。執(zhí)行群集1160包括一組一個(gè)或多個(gè)執(zhí)行單元1162和一組一個(gè)或多個(gè)存儲(chǔ)器訪問(wèn)單元1164。執(zhí)行單元1162可以對(duì)各種類(lèi)型的數(shù)據(jù)(例如,標(biāo)量浮點(diǎn)、緊縮整數(shù)、緊縮浮點(diǎn)、向量整型、向量浮點(diǎn))執(zhí)行各種操作(例如,移位、加法、減法、乘法)。盡管一些實(shí)施例可以包括專(zhuān)用于特定功能或功能組的數(shù)個(gè)執(zhí)行單元,但是其他實(shí)施例可以?xún)H包括一個(gè)執(zhí)行單元或全部都執(zhí)行所有功能的多個(gè)執(zhí)行單元。調(diào)度器單元1156、物理寄存器堆單元1158以及執(zhí)行群集1160示出為可能是復(fù)數(shù)個(gè),因?yàn)槟承?shí)施例為某些類(lèi)型的數(shù)據(jù)/操作創(chuàng)建單獨(dú)的流水線(例如,各自都具有其自身的調(diào)度器單元、物理寄存器堆單元和/或執(zhí)行群集的標(biāo)量整數(shù)流水線、標(biāo)量浮點(diǎn)/緊縮整數(shù)/緊縮浮點(diǎn)/向量整數(shù)/向量浮點(diǎn)流水線和/或存儲(chǔ)器訪問(wèn)流水線——并且在單獨(dú)的存儲(chǔ)器訪問(wèn)流水線的情況下,實(shí)現(xiàn)了其中僅此流水線的執(zhí)行群集具有存儲(chǔ)器訪問(wèn)單元1164的某些實(shí)施例)。還應(yīng)當(dāng)理解,在使用分開(kāi)的流水線的情況下,這些流水線中的一個(gè)或多個(gè)可以是亂序發(fā)布/執(zhí)行的,而其余的是有序的。
存儲(chǔ)器訪問(wèn)單元1164的集合耦合到存儲(chǔ)器單元1170,該存儲(chǔ)器單元包括耦合到數(shù)據(jù)高速緩存單元1174的數(shù)據(jù)tlb單元1172,其中數(shù)據(jù)高速緩存單元耦合到第2級(jí)(l2)高速緩存單元1176。在一個(gè)示例性實(shí)施例中,存儲(chǔ)器訪問(wèn)單元1164可包括加載單元、存儲(chǔ)地址單元和存儲(chǔ)數(shù)據(jù)單元,其中的每一個(gè)均耦合至存儲(chǔ)器單元1170中的數(shù)據(jù)tlb單元1172。指令高速緩存單元1134還耦合到存儲(chǔ)器單元1170中的第2級(jí)(l2)高速緩存單元1176。l2高速緩存單元1176被耦合到一個(gè)或多個(gè)其他級(jí)的高速緩存,并最終被耦合到主存儲(chǔ)器。
作為示例,示例性寄存器重命名的、亂序發(fā)布/執(zhí)行核架構(gòu)可以如下實(shí)現(xiàn)流水線1100:1)指令取出1138執(zhí)行取出和長(zhǎng)度解碼級(jí)1102和1104;2)解碼單元1140執(zhí)行解碼級(jí)1106;3)重命名/分配器單元1152執(zhí)行分配級(jí)1108和重命名級(jí)1110;4)調(diào)度器單元1156執(zhí)行調(diào)度級(jí)1112;5)物理寄存器堆單元1158和存儲(chǔ)器單元1170執(zhí)行寄存器讀取/存儲(chǔ)器讀取級(jí)1114;執(zhí)行群集1160執(zhí)行執(zhí)行級(jí)1116;6)存儲(chǔ)器單元1170和物理寄存器堆單元1158執(zhí)行寫(xiě)回/存儲(chǔ)器寫(xiě)入級(jí)1118;7)各單元可牽涉到異常處理級(jí)1122;以及8)引退單元1154和物理寄存器堆單元1158執(zhí)行提交級(jí)1124。
核1190可支持一個(gè)或多個(gè)指令集(例如,x86指令集(具有與較新版本一起添加的一些擴(kuò)展);加利福尼亞州桑尼維爾市的mips技術(shù)公司的mips指令集;英國(guó)劍橋市和加利福尼州圣何塞市的arm控股的arm指令集(具有諸如neon等可選附加擴(kuò)展)),其中包括本文中描述的各指令。在一個(gè)實(shí)施例中,核1190包括用于支持緊縮數(shù)據(jù)指令集擴(kuò)展(例如,avx1、avx2和/或先前描述的一些形式的通用向量友好指令格式(u=0和/或u=1))的邏輯,進(jìn)而允許由許多多媒體應(yīng)用使用的操作通過(guò)使用緊縮數(shù)據(jù)來(lái)執(zhí)行。
應(yīng)當(dāng)理解,核可以支持多線程操作(執(zhí)行兩個(gè)或更多個(gè)并行的操作或線程的集合),并且可以按各種方式來(lái)完成該多線程操作,各種方式包括時(shí)分多線程操作、同步多線程操作(其中,單個(gè)物理核為物理核正在同步進(jìn)行多線程操作的多個(gè)線程中的每一個(gè)線程提供邏輯核)或其組合(例如,時(shí)分取出和解碼以及此后諸如利用
盡管在亂序執(zhí)行的上下文中描述了寄存器重命名,但是,應(yīng)當(dāng)理解,寄存器重命名可以用于有序架構(gòu)中。盡管所示出的處理器的實(shí)施例還包括分開(kāi)的指令和數(shù)據(jù)高速緩存單元1134/1174以及共享l2高速緩存單元1176,但替代實(shí)施例可以具有用于指令和數(shù)據(jù)兩者的單個(gè)內(nèi)部高速緩存,諸如例如第1級(jí)(l1)內(nèi)部高速緩存或多個(gè)級(jí)別的內(nèi)部高速緩存。在一些實(shí)施例中,系統(tǒng)可以包括內(nèi)部高速緩存以及在核和/或處理器外部的外部高速緩存的組合?;蛘撸扛咚倬彺娑伎梢栽诤撕?或處理器的外部。
具體的示例性有序核架構(gòu)
圖12a-b示出更具體的示例性有序核架構(gòu)的框圖,該核將是芯片中的多個(gè)邏輯塊中的一個(gè)(包括相同類(lèi)型和/或不同類(lèi)型的其他核)。根據(jù)應(yīng)用,這些邏輯塊通過(guò)高帶寬的互連網(wǎng)絡(luò)(例如,環(huán)形網(wǎng)絡(luò))與一些固定的功能邏輯、存儲(chǔ)器i/o接口和其它必要的i/o邏輯通信。
圖12a是根據(jù)實(shí)施例的單個(gè)處理器核以及它與管芯上互連網(wǎng)絡(luò)1202的連接及其第2級(jí)(l2)高速緩存的本地子集1204的框圖。在一個(gè)實(shí)施例中,指令解碼器1200支持具有緊縮數(shù)據(jù)指令集擴(kuò)展的x86指令集。l1高速緩存1206允許對(duì)進(jìn)入標(biāo)量和向量單元中的高速緩存存儲(chǔ)器的低等待時(shí)間訪問(wèn)。盡管在一個(gè)實(shí)施例中(為了簡(jiǎn)化設(shè)計(jì)),標(biāo)量單元1208和向量單元1210使用分開(kāi)的寄存器集合(分別為標(biāo)量寄存器1212和向量寄存器1214),并且在這些寄存器之間轉(zhuǎn)移的數(shù)據(jù)被寫(xiě)入到存儲(chǔ)器并隨后從第1級(jí)(l1)高速緩存1206讀回,但是替代實(shí)施例可以使用不同的方法(例如使用單個(gè)寄存器集合或包括允許數(shù)據(jù)在這兩個(gè)寄存器堆之間傳輸而無(wú)需被寫(xiě)入和讀回的通信路徑)。
l2高速緩存的本地子集1204是全局l2高速緩存的一部分,該全局l2高速緩存被劃分成多個(gè)分開(kāi)的本地子集,即每個(gè)處理器核一個(gè)本地子集。每個(gè)處理器核具有到其自己的l2高速緩存的本地子集1204的直接訪問(wèn)路徑。被處理器核讀出的數(shù)據(jù)被存儲(chǔ)在其l2高速緩存子集1204中,并且可以與其它處理器核訪問(wèn)其自己的本地l2高速緩存子集并行地被快速訪問(wèn)。被處理器核寫(xiě)入的數(shù)據(jù)被存儲(chǔ)在其自己的l2高速緩存子集1204中,并在必要的情況下從其它子集轉(zhuǎn)儲(chǔ)清除。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的一致性。環(huán)形網(wǎng)絡(luò)是雙向的,以允許諸如處理器核、l2高速緩存和其它邏輯塊之類(lèi)的代理在芯片內(nèi)彼此通信。每個(gè)環(huán)形數(shù)據(jù)路徑為每個(gè)方向1012位寬。
圖12b是根據(jù)實(shí)施例的圖12a中的處理器核的一部分的展開(kāi)圖。圖12b包括l1高速緩存1204的l1數(shù)據(jù)高速緩存1206a部分,以及關(guān)于向量單元1210和向量寄存器1214的更多細(xì)節(jié)。具體地說(shuō),向量單元1210是16寬向量處理單元(vpu)(見(jiàn)16寬alu1228),該單元執(zhí)行整型、單精度浮點(diǎn)以及雙精度浮點(diǎn)指令中的一個(gè)或多個(gè)。該vpu通過(guò)混合單元1220支持對(duì)寄存器輸入的混合、通過(guò)數(shù)值轉(zhuǎn)換單元1222a-b支持?jǐn)?shù)值轉(zhuǎn)換、并通過(guò)復(fù)制單元1224支持對(duì)存儲(chǔ)器輸入的復(fù)制。寫(xiě)掩碼寄存器1226允許斷言所得的向量寫(xiě)入。
具有集成存儲(chǔ)器控制器和專(zhuān)用邏輯的處理器
圖13是根據(jù)實(shí)施例的可具有多于一個(gè)的核、可具有集成存儲(chǔ)器控制器、以及可具有集成圖形器件的處理器1300的框圖。圖13中的實(shí)線框示出具有單一核1302a、系統(tǒng)代理1310、一組一個(gè)或多個(gè)總線控制器單元1316的處理器1300,而任選增加的虛線框示出具有多個(gè)核1302a-n、系統(tǒng)代理單元1310中的一組一個(gè)或多個(gè)集成存儲(chǔ)器控制器單元1314、以及專(zhuān)用邏輯1308的替換處理器1300。
因此,處理器1300的不同實(shí)現(xiàn)可包括:1)cpu,其中專(zhuān)用邏輯1308是集成圖形和/或科學(xué)(吞吐量)邏輯(其可包括一個(gè)或多個(gè)核),并且核1302a-n是一個(gè)或多個(gè)通用核(例如,通用的有序核、通用的亂序核、這兩者的組合);2)協(xié)處理器,其中核1302a-n是旨在主要用于圖形和/或科學(xué)(吞吐量)的多個(gè)專(zhuān)用核;以及3)協(xié)處理器,其中核1302a-n是多個(gè)通用有序核。因此,處理器1300可以是通用處理器、協(xié)處理器或?qū)S锰幚砥鳎T如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu(通用圖形處理單元)、高吞吐量的集成眾核(mic)協(xié)處理器(包括30個(gè)或更多核)、或嵌入式處理器等。該處理器可以被實(shí)現(xiàn)在一個(gè)或多個(gè)芯片上。處理器1300可以是一個(gè)或多個(gè)襯底的一部分,和/或可以使用諸如例如bicmos、cmos或nmos等的多個(gè)工藝技術(shù)中的任何一個(gè)技術(shù)將該處理器實(shí)現(xiàn)在一個(gè)或多個(gè)襯底上。
存儲(chǔ)器層次結(jié)構(gòu)包括核內(nèi)的一個(gè)或多個(gè)層級(jí)的高速緩存、一組或一個(gè)或多個(gè)共享高速緩存單元1306以及耦合到集成存儲(chǔ)器控制器單元1314的集合的外部存儲(chǔ)器(未示出)。共享高速緩存單元1306的集合可以包括一個(gè)或多個(gè)中級(jí)高速緩存,諸如,第2級(jí)(l2)、第3級(jí)(l3)、第4級(jí)(l4),或其他層級(jí)的高速緩存,末級(jí)高速緩存(llc),和/或上述各項(xiàng)的組合。盡管在一個(gè)實(shí)施例中,基于環(huán)的互連單元1312將集成圖形邏輯1308、共享高速緩存單元1306的集合以及系統(tǒng)代理單元1310/集成存儲(chǔ)器控制器單元1314互連,但替代實(shí)施例可使用任何數(shù)量的公知技術(shù)來(lái)將這些單元互連。在一個(gè)實(shí)施例中,可以維護(hù)一個(gè)或多個(gè)高速緩存單元1306和核1302-a-n之間的一致性(coherency)。
在一些實(shí)施例中,核1302a-n中的一個(gè)或多個(gè)能夠?qū)崿F(xiàn)多線程。系統(tǒng)代理1310包括協(xié)調(diào)和操作核1302a-n的那些組件。系統(tǒng)代理單元1310可包括例如功率控制單元(pcu)和顯示單元。pcu可以是或可包括用于調(diào)節(jié)核1302a-n和集成圖形邏輯1308的功率狀態(tài)所需的邏輯和組件。顯示單元用于驅(qū)動(dòng)一個(gè)或多個(gè)從外部連接的顯示器。
核1302a-n在架構(gòu)指令集方面可以是同構(gòu)的或異構(gòu)的;即,這些核1302a-n中的兩個(gè)或更多個(gè)核可能能夠執(zhí)行相同的指令集,而其它核可能能夠執(zhí)行該指令集的僅僅子集或不同的指令集。
示例性計(jì)算機(jī)架構(gòu)
圖14-17是示例性計(jì)算機(jī)架構(gòu)的框圖。本領(lǐng)域已知的對(duì)膝上型設(shè)備、臺(tái)式機(jī)、手持pc、個(gè)人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)集線器、交換機(jī)、嵌入式處理器、數(shù)字信號(hào)處理器(dsp)、圖形設(shè)備、視頻游戲設(shè)備、機(jī)頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設(shè)備以及各種其它電子設(shè)備的其它系統(tǒng)設(shè)計(jì)和配置也是合適的。一般地,能夠包含本文中所公開(kāi)的處理器和/或其它執(zhí)行邏輯的多個(gè)系統(tǒng)或電子設(shè)備一般都是合適的。
現(xiàn)在參見(jiàn)圖14,所示是根據(jù)本發(fā)明的一個(gè)實(shí)施例的系統(tǒng)1400的框圖。系統(tǒng)1400可以包括一個(gè)或多個(gè)處理器1410、1415,這些處理器耦合到控制器中樞1420。在一個(gè)實(shí)施例中,控制器中樞1420包括圖形存儲(chǔ)器控制器中樞(gmch)1490和輸入/輸出中樞(ioh)1450(其可以在分開(kāi)的芯片上);gmch1490包括存儲(chǔ)器和圖形控制器,存儲(chǔ)器1440和協(xié)處理器1445耦合到該存儲(chǔ)器和圖形控制器;ioh1450將輸入/輸出(i/o)設(shè)備1460耦合到gmch1490??商娲?,存儲(chǔ)器和圖形控制器中的一個(gè)或兩個(gè)在處理器(如本文中所描述的)內(nèi)集成,存儲(chǔ)器1440和協(xié)處理器1445直接耦合到處理器1410、以及在單一芯片中具有ioh1450的控制器中樞1420。
在圖14中以虛線表示附加的處理器1415的可選的性質(zhì)。每一個(gè)處理器1410、1415可包括本文中描述的處理核中的一個(gè)或多個(gè),并且可以是處理器1300的某一版本。
存儲(chǔ)器1440可以是例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、相變存儲(chǔ)器(pcm)或這兩者的組合。對(duì)于至少一個(gè)實(shí)施例,控制器中樞1420經(jīng)由諸如前端總線(fsb)之類(lèi)的多分支總線、諸如快速通道互連(qpi)之類(lèi)的點(diǎn)對(duì)點(diǎn)接口、或者類(lèi)似的連接1495與處理器1410、1415進(jìn)行通信。
在一個(gè)實(shí)施例中,協(xié)處理器1445是專(zhuān)用處理器,諸如例如高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu、或嵌入式處理器等等。在一個(gè)實(shí)施例中,控制器中樞1420可以包括集成圖形加速器。
在物理資源1410、1415之間會(huì)存在包括架構(gòu)、微架構(gòu)、熱、和功耗特征等的一系列品質(zhì)度量方面的各種差異。
在一個(gè)實(shí)施例中,處理器1410執(zhí)行控制一般類(lèi)型的數(shù)據(jù)處理操作的指令。協(xié)處理器指令可嵌入在這些指令中。處理器1410將這些協(xié)處理器指令識(shí)別為應(yīng)當(dāng)由附連的協(xié)處理器1445執(zhí)行的類(lèi)型。因此,處理器1410在協(xié)處理器總線或者其它互連上將這些協(xié)處理器指令(或者表示協(xié)處理器指令的控制信號(hào))發(fā)布到協(xié)處理器1445。協(xié)處理器1445接受并執(zhí)行所接收的協(xié)處理器指令。
現(xiàn)在參見(jiàn)圖15,所示是根據(jù)本發(fā)明的實(shí)施例的第一更具體的示例性系統(tǒng)1500的框圖。如圖15所示,多處理器系統(tǒng)1500是點(diǎn)對(duì)點(diǎn)互連系統(tǒng),并且包括經(jīng)由點(diǎn)對(duì)點(diǎn)互連1550耦合的第一處理器1570和第二處理器1580。處理器1570和1580中的每一個(gè)都可以是處理器1300的某一版本。在本發(fā)明的一個(gè)實(shí)施例中,處理器1570和1580分別是處理器1410和1415,而協(xié)處理器1538是協(xié)處理器1445。在另一實(shí)施例中,處理器1570和1580分別是處理器1410和協(xié)處理器1445。
處理器1570和1580被示為分別包括集成存儲(chǔ)器控制器(imc)單元1572和1582。處理器1570還包括點(diǎn)對(duì)點(diǎn)(p-p)接口1576和1578作為其總線控制器單元的部分;類(lèi)似地,第二處理器1580包括p-p接口1586和1588。處理器1570、1580可以經(jīng)由使用點(diǎn)對(duì)點(diǎn)(p-p)接口電路1578、1588的p-p接口1550來(lái)交換信息。如圖15所示,imc1572和1582將處理器耦合至相應(yīng)的存儲(chǔ)器,即,存儲(chǔ)器1532和存儲(chǔ)器1534,它們可以是本地連接到相應(yīng)的處理器的主存儲(chǔ)器的部分。
處理器1570、1580可各自經(jīng)由使用點(diǎn)對(duì)點(diǎn)接口電路1576、1594、1586、1598的各個(gè)p-p接口1552、1554與芯片組1590交換信息。芯片組1590可任選地經(jīng)由高性能接口1539與協(xié)處理器1538交換信息。在一個(gè)實(shí)施例中,協(xié)處理器1538是專(zhuān)用處理器,諸如例如高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu、或嵌入式處理器等等。
共享高速緩存(未示出)可以被包括在任一處理器之內(nèi),或被包括在兩個(gè)處理器外部但仍經(jīng)由p-p互連與這些處理器連接,使得如果將某處理器置于低功率模式時(shí),可將任一處理器或兩個(gè)處理器的本地高速緩存信息存儲(chǔ)在該共享高速緩存中。
芯片組1590可經(jīng)由接口1596耦合至第一總線1516。在一個(gè)實(shí)施例中,第一總線1516可以是外圍組件互連(pci)總線,或諸如pciexpress總線或其它第三代i/o互連總線之類(lèi)的總線,但本發(fā)明的范圍并不受此限制。
如圖15所示,各種i/o設(shè)備1514可以連同總線橋1518被耦合至第一總線1516,總線橋1518將第一總線1516耦合至第二總線1520。在一個(gè)實(shí)施例中,諸如協(xié)處理器、高吞吐量mic處理器、gpgpu的處理器、加速器(諸如例如圖形加速器或數(shù)字信號(hào)處理(dsp)單元)、現(xiàn)場(chǎng)可編程門(mén)陣列或任何其它處理器的一個(gè)或多個(gè)附加處理器1515耦合到第一總線1516。在一個(gè)實(shí)施例中,第二總線1520可以是低引腳數(shù)(lpc)總線。在一個(gè)實(shí)施例中,各種設(shè)備可以耦合到第二總線1520,各種設(shè)備包括例如,鍵盤(pán)和/或鼠標(biāo)1522、通信設(shè)備1527以及存儲(chǔ)單元1528,存儲(chǔ)單元1528諸如,可包括指令/代碼和數(shù)據(jù)1530的磁盤(pán)驅(qū)動(dòng)器或其他大容量存儲(chǔ)設(shè)備。此外,音頻i/o1524可以被耦合至第二總線1520。注意,其他架構(gòu)是可能的。例如,系統(tǒng)可實(shí)現(xiàn)多分支總線或者其他此類(lèi)架構(gòu),而不是圖15中的點(diǎn)對(duì)點(diǎn)架構(gòu)。
現(xiàn)在參考圖16,所示為根據(jù)本發(fā)明的實(shí)施例的更具體的第二示例性系統(tǒng)1600的框圖。圖15和16中的相似元件具有相似的附圖標(biāo)記,并且圖15的特定方面已經(jīng)從圖16中省略以避免混淆圖16的其他方面。
圖16示出處理器1570、1580可以分別包括集成存儲(chǔ)器和i/o控制邏輯(“cl”)1572和1582。因此,cl1572、1582包括集成存儲(chǔ)器控制器單元并包括i/o控制邏輯。圖16示出不僅存儲(chǔ)器1532、1534耦合到cl1572、1582,而且i/o設(shè)備1614也耦合到控制邏輯1572、1582。傳統(tǒng)i/o設(shè)備1615被耦合至芯片組1590。
現(xiàn)在參照?qǐng)D17,所示出的是根據(jù)本發(fā)明一個(gè)實(shí)施例的soc1700的框圖。圖13中相似的部件具有同樣的附圖標(biāo)記。另外,虛線框是更先進(jìn)的soc的可選特征。在圖17中,互連單元1702被耦合至:應(yīng)用處理器1710,該應(yīng)用處理器包括一個(gè)或多個(gè)核202a-n的集合以及共享高速緩存單元1306;系統(tǒng)代理單元1310;總線控制器單元1316;集成存儲(chǔ)器控制器單元1314;一組或一個(gè)或多個(gè)協(xié)處理器1720,其可包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)單元1730;直接存儲(chǔ)器存取(dma)單元1732;以及用于耦合至一個(gè)或多個(gè)外部顯示器的顯示單元1740。在一個(gè)實(shí)施例中,協(xié)處理器1720包括專(zhuān)用處理器,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、gpgpu、高吞吐量mic處理器、或嵌入式處理器等等。
本文公開(kāi)的機(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è)備。
可將程序代碼(諸如圖15中示出的代碼1530)應(yīng)用于輸入指令,以執(zhí)行本文描述的各功能并生成輸出信息??梢园匆阎绞綄⑤敵鲂畔?yīng)用于一個(gè)或多個(gè)輸出設(shè)備。為了本申請(qǐng)的目的,處理系統(tǒng)包括具有諸如例如數(shù)字信號(hào)處理器(dsp)、微控制器、專(zhuān)用集成電路(asic)或微處理器之類(lèi)的處理器的任何系統(tǒng)。
程序代碼可以用高級(jí)程序化語(yǔ)言或面向?qū)ο蟮木幊陶Z(yǔ)言來(lái)實(shí)現(xiàn),以便與處理系統(tǒng)通信。在需要時(shí),也可用匯編語(yǔ)言或機(jī)器語(yǔ)言來(lái)實(shí)現(xiàn)程序代碼。事實(shí)上,本文中描述的機(jī)制不限于任何特定編程語(yǔ)言的范圍。在任一情形下,該語(yǔ)言可以是編譯語(yǔ)言或解釋語(yǔ)言。
至少一個(gè)實(shí)施例的一個(gè)或多個(gè)方面可以由存儲(chǔ)在機(jī)器可讀介質(zhì)上的表示性指令來(lái)實(shí)現(xiàn),指令表示處理器中的各種邏輯,指令在被機(jī)器讀取時(shí)使得該機(jī)器制作用于執(zhí)行本文所述的技術(shù)的邏輯。被稱(chēng)為“ip核”的這些表示可以被存儲(chǔ)在有形的機(jī)器可讀介質(zhì)上,并被提供給多個(gè)客戶或生產(chǎn)設(shè)施以加載到實(shí)際制造該邏輯或處理器的制造機(jī)器中。
這樣的機(jī)器可讀存儲(chǔ)介質(zhì)可以包括但不限于通過(guò)機(jī)器或設(shè)備制造或形成的物品的非瞬態(tài)的有形安排,其包括存儲(chǔ)介質(zhì),諸如:硬盤(pán);任何其它類(lèi)型的盤(pán),包括軟盤(pán)、光盤(pán)、緊致盤(pán)只讀存儲(chǔ)器(cd-rom)、緊致盤(pán)可重寫(xiě)(cd-rw)以及磁光盤(pán);半導(dǎo)體器件,例如只讀存儲(chǔ)器(rom)、諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)和靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)之類(lèi)的隨機(jī)存取存儲(chǔ)器(ram)、可擦除可編程只讀存儲(chǔ)器(eprom)、閃存、電可擦除可編程只讀存儲(chǔ)器(eeprom);相變存儲(chǔ)器(pcm);磁卡或光卡;或適于存儲(chǔ)電子指令的任何其它類(lèi)型的介質(zhì)。
因此,實(shí)施例還包括非暫態(tài)有形機(jī)器可讀介質(zhì),該介質(zhì)包含指令或包含設(shè)計(jì)數(shù)據(jù),諸如硬件描述語(yǔ)言(hdl),它定義本文中描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特征。這些實(shí)施例也被稱(chēng)為程序產(chǎn)品。
仿真(包括二進(jìn)制變換、代碼變形等)
在一些情況下,指令轉(zhuǎn)換器可用來(lái)將指令從源指令集轉(zhuǎn)換至目標(biāo)指令集。例如,指令轉(zhuǎn)換器可以變換(例如使用靜態(tài)二進(jìn)制變換、包括動(dòng)態(tài)編譯的動(dòng)態(tài)二進(jìn)制變換)、變形、仿真或以其它方式將指令轉(zhuǎn)換成將由核來(lái)處理的一個(gè)或多個(gè)其它指令。指令轉(zhuǎn)換器可以用軟件、硬件、固件、或其組合實(shí)現(xiàn)。指令轉(zhuǎn)換器可以在處理器上、在處理器外、或者部分在處理器上且部分在處理器外。
圖18是根據(jù)實(shí)施例的對(duì)照使用軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn)制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的框圖。在所示的實(shí)施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但作為替代,該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來(lái)實(shí)現(xiàn)。圖18示出可以使用x86編譯器1804來(lái)編譯高級(jí)語(yǔ)言1802形式的程序以生成可由具有至少一個(gè)x86指令集核的處理器1816原生地執(zhí)行的x86二進(jìn)制代碼1806。
具有至少一個(gè)x86指令集核的處理器1816表示能通過(guò)兼容地執(zhí)行或以其他方式處理以下內(nèi)容來(lái)執(zhí)行與具有至少一個(gè)x86指令集核的英特爾處理器基本相同的功能的任何處理器:(1)英特爾x86指令集核的指令集的本質(zhì)部分,或(2)目標(biāo)為在具有至少一個(gè)x86指令集核的英特爾處理器上運(yùn)行以實(shí)現(xiàn)與具有至少一個(gè)x86指令集核的英特爾處理器基本相同的結(jié)果的應(yīng)用或其他軟件的目標(biāo)代碼版本。x86編譯器1804表示可用于生成x86二進(jìn)制代碼1806(例如,目標(biāo)代碼)的編譯器,該x86二進(jìn)制代碼1806能夠通過(guò)附加的鏈接處理或無(wú)需附加的鏈接處理而在具有至少一個(gè)x86指令集核的處理器1816上被執(zhí)行。類(lèi)似地,圖18示出可以使用替代的指令集編譯器1808來(lái)編譯利用高級(jí)語(yǔ)言1802的程序,以生成可以由不具有至少一個(gè)x86指令集核的處理器1814(例如,具有執(zhí)行加利福尼亞州桑尼維爾市的mips技術(shù)公司的mips指令集、和/或執(zhí)行加利福尼亞州圣何塞市的arm控股公司的arm指令集的核的處理器)原生執(zhí)行的替代的指令集二進(jìn)制代碼1810。
指令轉(zhuǎn)換器1812用于將x86二進(jìn)制代碼1806轉(zhuǎn)換成可以由不具有x86指令集核的處理器1814原生地執(zhí)行的代碼。該轉(zhuǎn)換后的代碼不大可能與替代的指令集二進(jìn)制代碼1810相同,因?yàn)槟軌蜻@樣做的指令轉(zhuǎn)換器難以制造;然而,轉(zhuǎn)換后的代碼將完成通用操作,并且將由來(lái)自替代指令集的指令構(gòu)成。因此,指令轉(zhuǎn)換器1812表示軟件、固件、硬件或它們的組合,這些軟件、固件、硬件或它們的組合通過(guò)仿真、模擬或任何其他過(guò)程允許不具有x86指令集處理器或核的處理器或其他電子設(shè)備執(zhí)行x86二進(jìn)制代碼1806。
在上述說(shuō)明書(shū)中,已經(jīng)參考特定示例性實(shí)施例描述了本發(fā)明。然而,顯然可對(duì)這些實(shí)施例作出各種修改和改變,而不背離如所附權(quán)利要求所述的本發(fā)明的更寬泛精神和范圍。因此,說(shuō)明書(shū)和附圖應(yīng)被認(rèn)為是說(shuō)明性而非限制性意義。
本文中所描述的指令指示諸如專(zhuān)用集成電路(asic)的硬件的特定配置,被配置為執(zhí)行某些操作或具有預(yù)定的功能。此類(lèi)電子設(shè)備一般包括耦合至一個(gè)或多個(gè)其他組件的一個(gè)或多個(gè)處理器的集合,所述一個(gè)或多個(gè)其他組件例如是一個(gè)或多個(gè)存儲(chǔ)設(shè)備(非暫態(tài)機(jī)器可讀存儲(chǔ)介質(zhì))、用戶輸入/輸出設(shè)備(例如,鍵盤(pán)、觸摸屏和/或顯示器)以及網(wǎng)絡(luò)連接。該組處理器和其他組件的耦合一般是通過(guò)一個(gè)或多個(gè)總線和橋(也稱(chēng)為總線控制器)實(shí)現(xiàn)的。存儲(chǔ)設(shè)備和攜帶網(wǎng)絡(luò)話務(wù)的信號(hào)分別表示一個(gè)或多個(gè)機(jī)器可讀存儲(chǔ)介質(zhì)和機(jī)器可讀通信介質(zhì)。因此,給定電子設(shè)備的存儲(chǔ)設(shè)備通常存儲(chǔ)用于在該電子設(shè)備的一個(gè)或多個(gè)處理器的集合上執(zhí)行的代碼和/或數(shù)據(jù)。
當(dāng)然,本發(fā)明的實(shí)施例的一個(gè)或多個(gè)部分可使用軟件、固件和/或硬件的不同組合來(lái)實(shí)現(xiàn)。貫穿此具體實(shí)施方式,為了進(jìn)行解釋?zhuān)愂隽吮姸嗑唧w細(xì)節(jié)以提供對(duì)本發(fā)明的透徹理解。然而,對(duì)本領(lǐng)域技術(shù)人員顯而易見(jiàn)的是,沒(méi)有這些具體細(xì)節(jié)中的一些細(xì)節(jié)也可實(shí)施本發(fā)明。在某些實(shí)例中,并不詳細(xì)描述眾所周知的結(jié)構(gòu)和功能以免混淆本發(fā)明的主題。因此,本發(fā)明的范圍和精神應(yīng)根據(jù)所附權(quán)利要求書(shū)來(lái)判斷。