国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      掩碼置換指令的裝置和方法與流程

      文檔序號(hào):11198964閱讀:291來(lái)源:國(guó)知局
      掩碼置換指令的裝置和方法與流程

      本申請(qǐng)是pct國(guó)際申請(qǐng)?zhí)枮閜ct/us2011/067090、國(guó)際申請(qǐng)日為2011年12月23日、中國(guó)國(guó)家申請(qǐng)?zhí)枮?01180075800.4、題為“掩碼置換指令的裝置和方法”的申請(qǐng)的分案申請(qǐng)。

      本發(fā)明一般涉及計(jì)算科學(xué),且更具體地涉及改進(jìn)置換指令的裝置和方法。



      背景技術(shù):

      圖1示出了在半導(dǎo)體芯片上用邏輯電路實(shí)現(xiàn)的處理核100的高級(jí)圖。該處理核包括流水線101。該流水線由各自被設(shè)計(jì)成在完全執(zhí)行程序代碼指令所需的多步驟過(guò)程中執(zhí)行特定步驟的多個(gè)級(jí)組成。這些級(jí)通常至少包括:1)指令取出和解碼;2)數(shù)據(jù)取出;3)執(zhí)行;4)寫(xiě)回。執(zhí)行級(jí)對(duì)由在先前級(jí)(例如在上述步驟1))中所取出和解碼的指令所標(biāo)識(shí)并在另一先前級(jí)(例如在上述步驟2))中被取出的數(shù)據(jù)執(zhí)行由在先前級(jí)(例如在上述步驟1))中取出和解碼的指令所標(biāo)識(shí)的特定操作。被操作的數(shù)據(jù)通常是從(通用)寄存器存儲(chǔ)空間102中取出的。在該操作完成時(shí)所創(chuàng)建的新數(shù)據(jù)通常也被“寫(xiě)回”寄存器存儲(chǔ)空間(例如在上述級(jí)4))。

      與執(zhí)行級(jí)相關(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所支持的“指令集”相對(duì)應(yīng)。

      計(jì)算機(jī)科學(xué)領(lǐng)域中廣泛認(rèn)可兩種類(lèi)型的處理器架構(gòu):“標(biāo)量”和“向量”。標(biāo)量處理器被設(shè)計(jì)成執(zhí)行對(duì)單個(gè)數(shù)據(jù)集進(jìn)行操作的指令,而向量處理器被設(shè)計(jì)成執(zhí)行對(duì)多個(gè)數(shù)據(jù)集進(jìn)行操作的指令。圖2a和2b呈現(xiàn)了展示標(biāo)量處理器與向量處理器之間的基本差異的比較示例。

      圖2a示出標(biāo)量and(與)指令的示例,其中單個(gè)操作數(shù)集a和b一起進(jìn)行“與”運(yùn)算以產(chǎn)生奇異(或“標(biāo)量”)結(jié)果c(即,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)。根據(jù)術(shù)語(yǔ)學(xué),“向量”是具有多個(gè)“元素”的數(shù)據(jù)元素。例如,向量v=q,r,s,t,u具有五個(gè)不同的元素:q、r、s、t和u。示例性向量v的“尺寸”是5(因?yàn)樗哂?個(gè)元素)。

      圖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é)果寫(xiě)回通用寄存器存儲(chǔ)空間102)。相反,當(dāng)各執(zhí)行單元中的任一個(gè)執(zhí)行向量操作時(shí),它們標(biāo)準(zhǔn)地使用從向量寄存器空間107調(diào)用的操作數(shù)(并將結(jié)果寫(xiě)回向量寄存器空間107)。可類(lèi)似地分配存儲(chǔ)器的不同區(qū)域以存儲(chǔ)標(biāo)量值和向量值。

      還應(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è)層——不過(guò)這并非嚴(yán)格要求。對(duì)于采用掩碼的任何指令,輸入掩碼邏輯104_1到104_n和/或輸出掩碼邏輯105_1到105_n可用于控制哪些元素被該向量指令有效地操作。在此,從掩碼寄存器空間106讀取掩碼向量(例如與從向量寄存器存儲(chǔ)空間107讀取的輸入數(shù)據(jù)向量一起),并將該掩碼向量呈現(xiàn)給掩碼邏輯104、105層中的至少一層。

      在執(zhí)行向量程序代碼的過(guò)程中,每一向量指令無(wú)需要求全數(shù)據(jù)字。例如,一些指令的輸入向量可能僅僅是8個(gè)元素,其他指令的輸入向量可能是16個(gè)元素,其他指令的輸入向量可能是32個(gè)元素,等等。因此,掩碼層104/105用于標(biāo)識(shí)完整向量數(shù)據(jù)字中的應(yīng)用于特定指令的一組元素,以在多個(gè)指令之間實(shí)現(xiàn)不同的向量尺寸。通常,對(duì)于每一向量指令,掩碼寄存器空間106中所保持的特定掩碼模式被該指令調(diào)出,從掩碼寄存器空間中被取出并且被提供給掩碼層104/105中的任一者或兩者,以“啟用”針對(duì)該特定向量操作的正確元素集合。

      圖3a、3b和3c示出現(xiàn)有技術(shù)的vpermute指令的邏輯操作。具體地,圖3a、3b和3c示出三個(gè)不同的vpermute指令(vpermilps、vpermilpd、vperm2f128)的相應(yīng)邏輯操作。

      圖3a示出了vpermilps指令的邏輯操作。如圖3a中觀察到的,vpermilps指令接受對(duì)應(yīng)于256位輸入向量的輸入操作數(shù)301_c,該輸入向量具有8個(gè)32位(單精度)浮點(diǎn)值。結(jié)果也是256位向量,該256位向量具有8個(gè)32位單精度浮點(diǎn)值作為其元素302_c。第二輸入向量(未示出)針對(duì)結(jié)果的下半部中的4個(gè)元素中的每個(gè)元素唯一性地指定輸入向量301_c的下半部中的4個(gè)元素301_c_1至301_c_4中的哪個(gè)元素將向輸出元素提供其內(nèi)容。

      圖3a僅針對(duì)輸出元素302_c_1和302_c_5示出了該操作。此處,輸出元素302_c_1的內(nèi)容可用輸入元素301_c_1至301_c_4中任一者的內(nèi)容“填充”。在(未示出的)第二輸入向量中清楚表明輸入元素301_c_1至301_c_4中的哪一個(gè)被選擇以填充輸出元素302_c_1。此處,第二輸入向量包含針對(duì)輸出向量中的8個(gè)元素中的每個(gè)元素的單獨(dú)的2位控制字段。必須從輸入向量301_c的下半部中選取結(jié)果302_c的下半部中的輸出元素的源。同樣,必須從輸入向量301_c的上半部中選取結(jié)果302_c的上半部中的輸出元素的源。

      盡管未在圖3a中明確地示出,但經(jīng)由第二輸入向量中包含的信息,將輸出元素302_c_2至302_c_4中每一者的內(nèi)容唯一性地指定為輸入元素301_c_1至301_c_4中的任一者。類(lèi)似地,如圖3c中觀察到的,輸出元素302_c_5的內(nèi)容用輸入元素301_c_5至301_c_8中任一者的內(nèi)容“填充”。同樣,也在(未示出的)第二輸入向量中清楚表明輸入元素301_c_5至301_c_8中的哪一個(gè)被選擇以填充輸出元素302_c_5。經(jīng)由(未示出的)第二輸入向量,將輸出元素302_c_6至302_c_8中每一者的內(nèi)容唯一性地指定為輸入元素301_c_5至301_c_8中的任一者。

      vpermilps指令的另一版本使用立即操作數(shù)而非第二輸入向量來(lái)選取輸入向量301_c的選擇模式。此處,用于目的地的下半部的輸入元素選擇模式匹配用于目的地的上半部的輸入元素選擇模式。

      圖3b示出vpermilpd指令的邏輯操作。如圖3b中觀察到的,vpermilpd指令接受對(duì)應(yīng)于256位輸入向量的輸入操作數(shù)301_d,該輸入向量具有4個(gè)64位(雙精度)浮點(diǎn)值。結(jié)果也是256位向量302_d,該256位向量具有4個(gè)64位雙精度浮點(diǎn)值作為其元素。第二輸入向量(未示出)針對(duì)結(jié)果的下半部中的2個(gè)元素中的每個(gè)元素唯一性地指定輸入向量301_d的下半部中的2個(gè)元素301_d_1至301_d_2中的哪個(gè)元素將向輸出元素提供其內(nèi)容。

      如圖3b中觀察到的,可用輸入元素301_d_1或301_d_2中的任一者來(lái)唯一性地“填充”輸出元素302_d_1和302_d_2中的每一者。同樣,可用輸入元素301_d_3或301_c_4中的任一者來(lái)唯一性地“填充”輸出元素302_d_3和302_d_4中的每一者。在(未示出的)第二輸入向量中清楚表明哪個(gè)輸入元素被選擇以填充具體輸出元素。此處,第二輸入向量包含針對(duì)輸出向量中的4個(gè)元素中的每個(gè)元素的單獨(dú)的2位控制字段。

      vpermilpd指令的另一版本使用立即操作數(shù)而非第二輸入向量來(lái)選取輸入向量301_d的選擇模式。此處,用于目的地的下半部的輸入元素選擇模式匹配用于目的地的上半部的輸入元素選擇模式。

      對(duì)于vpermipls和vpermipld指令兩者,將結(jié)果存儲(chǔ)在該指令的指令格式中指定的向量寄存器中。在利用第二輸入向量來(lái)確定選擇模式時(shí),第一輸入向量的源在指令格式中被指定并且對(duì)應(yīng)于向量寄存器。在此情形中,第二輸入向量的源也在指令格式中被指定并且對(duì)應(yīng)于第二向量寄存器或存儲(chǔ)器位置中的任一者。相反,如果使用立即操作數(shù)來(lái)確定選擇模式,則第一輸入向量的源在指令格式中被指定并且可以是向量寄存器或存儲(chǔ)器位置。

      圖3c示出了vperm2f128指令的邏輯操作。如圖3c中觀察到的,vperm2f128指令接受2個(gè)單獨(dú)的256位向量輸入操作數(shù)301_e、302_e??捎幂斎胂蛄?01_e、302_e兩者的下半部或上半部301_e_1、301_e_2、302_e_1、302_e_2中的任一者來(lái)填充256位結(jié)果303_e的128位下半部303_e_1和128位上半部303_e_2兩者。將該結(jié)果存儲(chǔ)在該指令的指令格式中指定的向量寄存器中。兩個(gè)輸入向量301_e、302_e的源在指令格式中被指定并且可對(duì)應(yīng)于一對(duì)向量寄存器或者一個(gè)向量寄存器和一個(gè)存儲(chǔ)器位置。

      附圖說(shuō)明

      本發(fā)明是通過(guò)示例說(shuō)明的,而不僅局限于各個(gè)附圖的圖示,在附圖中,類(lèi)似的參考標(biāo)號(hào)表示類(lèi)似的元件,其中:

      圖1示出指令執(zhí)行流水線;

      圖2a和2b將標(biāo)量處理與向量處理進(jìn)行比較;

      圖3a至3c示出現(xiàn)有技術(shù)的置換指令;

      圖4a至4e示出用于掩碼向量的置換指令;

      圖5a和5b涉及用于實(shí)現(xiàn)用于掩碼向量的置換指令的執(zhí)行邏輯電路;

      圖6a例示了示例性avx指令格式;

      圖6b示出來(lái)自圖6a的哪些字段構(gòu)成完整操作碼字段和基礎(chǔ)操作字段;

      圖6c示出來(lái)自圖6a的哪些字段構(gòu)成寄存器索引字段;

      圖7a-7b是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其指令模板的框圖;

      圖8是示出根據(jù)本發(fā)明的實(shí)施例的示例性專(zhuān)用向量友好指令格式的框圖;

      圖9是根據(jù)本發(fā)明的一個(gè)實(shí)施例的寄存器架構(gòu)的框圖;

      圖10a是示出根據(jù)本發(fā)明的實(shí)施例的示例性有序流水線以及示例性寄存器重命名的無(wú)序發(fā)布/執(zhí)行流水線兩者的框圖;

      圖10b是示出根據(jù)本發(fā)明的各實(shí)施例的要包括在處理器中的有序架構(gòu)核的示例性實(shí)施例和示例性的寄存器重命名的無(wú)序發(fā)布/執(zhí)行架構(gòu)核的框圖;

      圖11a-b示出了更具體的示例性有序核架構(gòu)的框圖,該核將是芯片中的若干邏輯塊之一(包括相同類(lèi)型和/或不同類(lèi)型的其他核);

      圖12是根據(jù)本發(fā)明的實(shí)施例的可具有超過(guò)一個(gè)的核、可具有集成的存儲(chǔ)器控制器、并且可具有集成圖形的處理器的框圖;

      圖13是根據(jù)本發(fā)明的實(shí)施例的示例性系統(tǒng)的框圖;

      圖14是根據(jù)本發(fā)明的實(shí)施例的第一更具體的示例性系統(tǒng)的框圖;

      圖15是根據(jù)本發(fā)明的實(shí)施例的第二更具體的示例性系統(tǒng)的框圖;

      圖16是根據(jù)本發(fā)明的實(shí)施例的soc的框圖;

      圖17是根據(jù)本發(fā)明的實(shí)施例的對(duì)比使用軟件指令變換器將源指令集中的二進(jìn)制指令變換成目標(biāo)指令集中的二進(jìn)制指令的框圖。

      具體實(shí)施方式

      雖然在此之前已知用于向量操作數(shù)的置換指令,但尚不知曉用于掩碼向量的置換指令。用于掩碼向量的置換指令根據(jù)該指令所調(diào)出的置換模式將一個(gè)或多個(gè)輸入掩碼向量的各個(gè)位移動(dòng)至結(jié)果掩碼向量。

      圖4a至4e示出用于各種掩碼置換指令的一些示例性置換模式。

      圖4a示出掩碼向量置換指令的第一實(shí)施例。如圖4a中觀察到的,結(jié)果掩碼向量402中的每個(gè)位位置“源自”輸入掩碼向量401中的特定位位置。在圖4a的特定實(shí)施例中,結(jié)果掩碼向量402中的每個(gè)位位置可以源自輸入掩碼向量401中的任何位位置。例如,輸出位位置402_0可源自輸入掩碼向量401的位位置401_0至401_n-1中的任一個(gè)。輸出向量402_1到402_n-1的其它位位置中的每一個(gè)的源可相同。這意味著,輸入掩碼向量401中的同一位位置可用作輸出掩碼向量中的多個(gè)位位置的源。

      根據(jù)一種方法,指令格式中嵌入的立即操作數(shù)針對(duì)每個(gè)輸出掩碼向量位位置指示哪個(gè)輸入掩碼向量位位置用作它的源。根據(jù)另一方法,立即操作數(shù)指定輸入掩碼向量的多個(gè)不同位位置到輸出掩碼向量的多個(gè)不同位位置之間的源關(guān)系的特定模式。根據(jù)另一方法,還提供被稱(chēng)為“索引”向量的第二輸入向量(未示出),其針對(duì)輸出掩碼向量中的每個(gè)位位置清楚表明哪個(gè)具體的輸入元素將被用來(lái)填充輸出掩碼向量中的該元素。

      根據(jù)一個(gè)實(shí)施例,處理核的底層硬件支持至少兩個(gè)不同的向量尺寸(例如256位和512位)。此外,底層處理核支持不同的數(shù)據(jù)元素尺寸(例如16位、32位和64位)。不同的操作數(shù)向量尺寸和不同的數(shù)據(jù)元素尺寸的組合導(dǎo)致可能的不同尺寸的掩碼向量(即,各掩碼向量具有不同數(shù)量的位)。例如,針對(duì)64位、32位和16位數(shù)據(jù)值尺寸中的每個(gè)數(shù)據(jù)值尺寸,用于512位數(shù)據(jù)操作數(shù)尺寸的掩碼向量尺寸分別是8位、16位和32位。同樣地,針對(duì)64位、32位和16位數(shù)據(jù)值尺寸中的每個(gè)數(shù)據(jù)值尺寸,用于256位數(shù)據(jù)操作數(shù)尺寸的掩碼向量尺寸分別是4位、8位和16位。因此,在該示例中,可能呈現(xiàn)給執(zhí)行單元以進(jìn)行置換的掩碼向量尺寸的范圍包括4、8、16和32位。

      圖4a指示掩碼向量尺寸n。因此,本領(lǐng)域普通技術(shù)人員將理解,當(dāng)n應(yīng)用于圖4a的命名法時(shí),n可以是用于上述的示例性系統(tǒng)的4、8、16、和32中的任一個(gè)。在多個(gè)實(shí)施例中,嵌入在指令格式中、或被取出或被引用至該指令外部的數(shù)據(jù)項(xiàng)的立即操作數(shù)或其它數(shù)據(jù)結(jié)構(gòu)針對(duì)任何掩碼置換指令指定n的合適值是什么。

      此外,在實(shí)施例中,從掩碼寄存器空間取出掩碼置換指令的一個(gè)或多個(gè)輸入掩碼向量,并且將掩碼置換指令的掩碼向量結(jié)果寫(xiě)回掩碼向量寄存器空間。

      對(duì)于涉及與圖4a的特定掩碼置換指令不同的掩碼置換指令的圖4b至4e的后續(xù)討論,以上提出的關(guān)于指令如何指定掩碼向量置換模式、所支持的不同掩碼向量尺寸的存在性、以及來(lái)自/去往掩碼寄存器存儲(chǔ)空間的輸入/結(jié)果掩碼模式的讀取/寫(xiě)入的相同要點(diǎn)仍然適用,但是出于方便的目的不再重復(fù)。

      圖4b示出接受兩個(gè)n位輸入掩碼模式403、404的另一掩碼向量置換指令。在此,結(jié)果掩碼向量模式405的每個(gè)輸出位位置可源自兩個(gè)輸入掩碼模式403、404中的任一個(gè)輸入掩碼模式的任何位位置。例如,結(jié)果位位置4050可源自輸入掩碼向量403中的任何位位置或輸入掩碼向量404中的任何位位置。因此,輸入掩碼模式403、404之一中的同一位位置可作為結(jié)果掩碼向量405中的多個(gè)位位置的源。注意,針對(duì)任一輸出位位置的可能源位位置的數(shù)量是2n,而針對(duì)圖4a的向量掩碼置換指令的可能源位位置的數(shù)量是n。

      圖4c、4d、4e涉及另一類(lèi)型的掩碼向量置換指令,其中輸入和輸出掩碼向量被視為分解成m個(gè)鄰接的n位的“分塊(chunk)”。在此,結(jié)果位僅能源自輸入掩碼向量的其相應(yīng)分塊中的位位置之一。例如,參考圖4d,可觀察到8位輸入406和結(jié)果407掩碼向量。兩個(gè)向量均被視為被分解成多個(gè)4位分塊。第一4位分塊對(duì)應(yīng)于每個(gè)向量的右半部,而第二4位分塊對(duì)應(yīng)于每個(gè)向量的左半部。

      在此,結(jié)果中的每個(gè)位位置僅可源自其相應(yīng)半部中的位。例如,結(jié)果向量407的右半部中的結(jié)果位407_0至407_3中的每個(gè)位僅可源自輸入掩碼向量的右半部中的位406_0至406_3中的任一個(gè)。類(lèi)似地,結(jié)果向量407的左半部中的結(jié)果位407_4至407_7中的每個(gè)位僅可源自輸入掩碼向量的左半部中的位406_4至406_7中的任一個(gè)。在實(shí)施例中,輸入向量的特定半部中的位可作為結(jié)果掩碼向量的同一相應(yīng)半部中的多個(gè)結(jié)果位的源。

      圖4e的掩碼置換指令與圖4d的掩碼置換指令相似地操作,其中的不同在于,在掩碼中存在四個(gè)而不是兩個(gè)鄰接的分塊。

      圖5a示出支持掩碼向量置換指令的執(zhí)行單元的方法的實(shí)施例。根據(jù)圖5a的方法,從掩碼向量寄存器空間501接收一個(gè)或多個(gè)掩碼向量。置換一個(gè)或多個(gè)掩碼向量的位以創(chuàng)建結(jié)果(經(jīng)置換的)掩碼向量502。然后將經(jīng)置換的掩碼向量寫(xiě)回至掩碼向量寄存器空間503。

      圖5b示出支持至少一個(gè)掩碼向量置換指令的執(zhí)行單元的邏輯圖。在實(shí)施例中,置換邏輯510不僅支持掩碼向量置換指令,而且支持諸如圖3a、3b、3c中討論的指令之類(lèi)的(典型)數(shù)據(jù)向量置換指令。在該情況下,當(dāng)執(zhí)行單元執(zhí)行(典型)數(shù)據(jù)向量置換指令時(shí),寄存器504(以及可能的寄存器505)保持被置換的輸入數(shù)據(jù)向量。在執(zhí)行單元支持三輸入操作數(shù)指令的情況下,還描繪了三數(shù)據(jù)輸入向量寄存器506。顯然,置換邏輯510為較小部分的附加邏輯(未示出)可用于支持除置換指令之外的指令的執(zhí)行。同樣,此類(lèi)邏輯可接受來(lái)自寄存器504、505和506中的任一個(gè)的數(shù)據(jù)輸入向量。寄存器504、505、506可對(duì)應(yīng)于數(shù)據(jù)向量寄存器空間中的寄存器,并位于在指令執(zhí)行流水線的數(shù)據(jù)取出級(jí)的輸出處,或者位于執(zhí)行單元的輸入處。

      輸入掩碼寄存器507支持執(zhí)行單元在執(zhí)行數(shù)據(jù)向量指令時(shí)的寫(xiě)掩碼能力。因此,掩碼寄存器507耦合至掩碼寫(xiě)電路511。從掩碼寫(xiě)電路511將數(shù)據(jù)向量結(jié)果寫(xiě)入結(jié)果寄存器512,掩碼寫(xiě)電路511將來(lái)自掩碼寄存器507的掩碼應(yīng)用于執(zhí)行邏輯的“原始”輸出。結(jié)果寄存器512可以位于數(shù)據(jù)向量寄存器空間中,或在執(zhí)行單元的輸出處。

      顯然,掩碼寄存器507也耦合至置換邏輯的輸入,以用于支持掩碼寄存器置換指令的執(zhí)行。還示出了第二掩碼寄存器508,以指示對(duì)支持兩個(gè)輸入掩碼向量的掩碼向量置換指令的支持。掩碼寄存器507、508可以位于掩碼向量寄存器空間、指令執(zhí)行流水線的數(shù)據(jù)取出級(jí)的輸出或執(zhí)行單元的輸入之內(nèi)??蓪?lái)自掩碼向量置換指令的結(jié)果掩碼向量寫(xiě)入也耦合至掩碼向量寄存器空間的結(jié)果寄存器512,或?qū)懭胫饕?如不是僅僅)存儲(chǔ)掩碼向量的單獨(dú)的寄存器(未示出)。

      示例性指令格式

      本文中所描述的指令的實(shí)施例可以不同的格式體現(xiàn)。例如,本文描述的指令可體現(xiàn)為vex、通用向量友好或其它格式。以下討論vex和通用向量友好格式的細(xì)節(jié)。另外,在下文中詳述示例性系統(tǒng)、架構(gòu)、以及流水線。指令的實(shí)施例可在這些系統(tǒng)、架構(gòu)、以及流水線上執(zhí)行,但是不限于詳述的系統(tǒng)、架構(gòu)、以及流水線。

      vex指令格式

      vex編碼允許指令具有兩個(gè)以上操作數(shù),并且允許simd向量寄存器比128位長(zhǎng)。vex前綴的使用提供了三個(gè)操作數(shù)(或者更多)句法。例如,先前的兩操作數(shù)指令執(zhí)行改寫(xiě)源操作數(shù)的操作(諸如a=a+b)。vex前綴的使用使操作數(shù)執(zhí)行非破壞性操作,諸如a=b+c。

      圖6a示出示例性avx指令格式,包括vex前綴602、實(shí)操作碼字段630、modr/m字節(jié)640、sib字節(jié)650、位移字段662以及imm8672。圖6b示出來(lái)自圖6a的哪些字段構(gòu)成完整操作碼字段674和基礎(chǔ)操作字段642。圖6c示出來(lái)自圖6a的哪些字段構(gòu)成寄存器索引字段644。

      vex前綴(字節(jié)0-2)602以三字節(jié)形式進(jìn)行編碼。第一字節(jié)是格式字段640(vex字節(jié)0,位[7:0]),該格式字段640包含明確的c4字節(jié)值(用于區(qū)分c4指令格式的唯一值)。第二-第三字節(jié)(vex字節(jié)1-2)包括提供專(zhuān)用能力的多個(gè)位字段。具體地,rex字段605(vex字節(jié)1,位[7-5])由vex.r位字段(vex字節(jié)1,位[7]-r)、vex.x位字段(vex字節(jié)1,位[6]-x)以及vex.b位字段(vex字節(jié)1,位[5]-b)組成。這些指令的其他字段對(duì)如在本領(lǐng)域中已知的寄存器索引的較低三個(gè)位(rrr、xxx以及bbb)進(jìn)行編碼,由此可通過(guò)增加vex.r、vex.x以及vex.b來(lái)形成rrrr、xxxx以及bbbb。操作碼映射字段615(vex字節(jié)1,位[4:0]-mmmmm)包括對(duì)隱含的前導(dǎo)操作碼字節(jié)進(jìn)行編碼的內(nèi)容。w字段664(vex字節(jié)2,位[7]-w)由記號(hào)vex.w表示,并且提供取決于該指令而不同的功能。vex.vvvv620(vex字節(jié)2,位[6:3]-vvvv)的作用可包括如下:1)vex.vvvv編碼第一源寄存器操作數(shù)且對(duì)具有兩個(gè)或兩個(gè)以上源操作數(shù)的指令有效,第一源寄存器操作數(shù)以反轉(zhuǎn)(1補(bǔ)碼)形式被指定;2)vex.vvvv編碼目的地寄存器操作數(shù),目的地寄存器操作數(shù)針對(duì)特定向量位移以多個(gè)1補(bǔ)碼的形式被指定;或者3)vex.vvvv不對(duì)任何操作數(shù)進(jìn)行編碼,保留該字段,并且應(yīng)當(dāng)包含1111b。如果vex.l668尺寸字段(vex字節(jié)2,位[2]-l)=0,則它指示128位向量;如果vex.l=1,則它指示256位向量。前綴編碼字段625(vex字節(jié)2,位[1:0]-pp)提供了用于基礎(chǔ)操作字段的附加位。

      實(shí)操作碼字段630(字節(jié)3)還被稱(chēng)為操作碼字節(jié)。操作碼的一部分在該字段中指定。

      modr/m字段640(字節(jié)4)包括mod字段642(位[7-6])、reg字段644(位[5-3])、以及r/m字段646(位[2-0])。reg字段644的作用可包括如下:對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)(rrrr中的rrr)進(jìn)行編碼;或者被視為操作碼擴(kuò)展且不用于對(duì)任何指令操作數(shù)進(jìn)行編碼。r/m字段646的作用可包括如下:對(duì)引用存儲(chǔ)器地址的指令操作數(shù)進(jìn)行編碼;或者對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼。

      比例、索引、基址(sib)-比例字段650(字節(jié)5)的內(nèi)容包括用于存儲(chǔ)器地址生成的ss652(位[7-6])。先前已經(jīng)針對(duì)寄存器索引xxxx和bbbb參考了sib.xxx654(位[5-3])和sib.bbb656(位[2-0])的內(nèi)容。

      位移字段662和立即數(shù)字段(imm8)672包含地址數(shù)據(jù)。

      通用向量友好指令格式

      向量友好指令格式是適于向量指令(例如,存在專(zhuān)用于向量操作的特定字段)的指令格式。盡管描述了其中通過(guò)向量友好指令格式支持向量和標(biāo)量運(yùn)算兩者的實(shí)施例,但是替換實(shí)施例僅使用通過(guò)向量友好指令格式的向量運(yùn)算。

      圖7a-7b是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其指令模板的框圖。圖7a是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其a類(lèi)指令模板的框圖;而圖7b是示出根據(jù)本發(fā)明的實(shí)施例的通用向量友好指令格式及其b類(lèi)指令模板的框圖。具體地,針對(duì)通用向量友好指令格式700定義a類(lèi)和b類(lèi)指令模板,兩者包括無(wú)存儲(chǔ)器訪問(wèn)705的指令模板和存儲(chǔ)器訪問(wèn)720的指令模板。在向量友好指令格式的上下文中的術(shù)語(yǔ)“通用”指不束縛于任何專(zhuān)用指令集的指令格式。

      盡管將描述其中向量友好指令格式支持64字節(jié)向量操作數(shù)長(zhǎng)度(或尺寸)與32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或尺寸)(并且由此,64字節(jié)向量由16雙字尺寸的元素或者替換地8四字尺寸的元素組成)、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ù)元素寬度(或尺寸)的本發(fā)明的實(shí)施例,但是替換實(shí)施例可支持更大、更小、和/或不同的向量操作數(shù)尺寸(例如,256字節(jié)向量操作數(shù))與更大、更小或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)。

      圖7a中的a類(lèi)指令模板包括:1)在無(wú)存儲(chǔ)器訪問(wèn)705的指令模板內(nèi),示出無(wú)存儲(chǔ)器訪問(wèn)的完全舍入(round)控制型操作710的指令模板、以及無(wú)存儲(chǔ)器訪問(wèn)的數(shù)據(jù)變換型操作715的指令模板;以及2)在存儲(chǔ)器訪問(wèn)720的指令模板內(nèi),示出存儲(chǔ)器訪問(wèn)的時(shí)效性725的指令模板和存儲(chǔ)器訪問(wèn)的非時(shí)效性730的指令模板。圖7b中的b類(lèi)指令模板包括:1)在無(wú)存儲(chǔ)器訪問(wèn)705的指令模板內(nèi),示出無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制的部分舍入控制型操作712的指令模板以及無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制的vsize型操作717的指令模板;以及2)在存儲(chǔ)器訪問(wèn)720的指令模板內(nèi),示出存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制727的指令模板。

      通用向量友好指令格式700包括以下列出的按照在圖7a-7b中示出的順序的如下字段。結(jié)合以上圖4a-e和5a、b的討論,在實(shí)施例中,參考下文在圖7a-b和8中提供的格式細(xì)節(jié),可在以下描述的寄存器地址字段744中標(biāo)識(shí)讀取掩碼和目的地的地址。在另一個(gè)實(shí)施例中,在寫(xiě)掩碼字段770中指定寫(xiě)掩碼的位置。

      格式字段740-該字段中的特定值(指令格式標(biāo)識(shí)符值)唯一地標(biāo)識(shí)向量友好指令格式,并且由此標(biāo)識(shí)指令在指令流中以向量友好指令格式出現(xiàn)。由此,該字段對(duì)于僅具有通用向量友好指令格式的指令集是不需要的,在這個(gè)意義上該字段是任選的。

      基礎(chǔ)操作字段742-其內(nèi)容區(qū)分不同的基礎(chǔ)操作。

      寄存器索引字段744-其內(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)字段746-其內(nèi)容將指定存儲(chǔ)器訪問(wèn)的以通用向量指令格式出現(xiàn)的指令與不指定存儲(chǔ)器訪問(wèn)的以通用向量指令格式出現(xiàn)的指令區(qū)分開(kāi);即在無(wú)存儲(chǔ)器訪問(wèn)705的指令模板與存儲(chǔ)器訪問(wèn)720的指令模板之間進(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ò)充操作字段750-其內(nèi)容區(qū)分除基礎(chǔ)操作以外還要執(zhí)行各種不同操作中的哪一個(gè)操作。該字段是針對(duì)上下文的。在本發(fā)明的一個(gè)實(shí)施例中,該字段被分成類(lèi)字段768、α字段752、以及β字段754。擴(kuò)充操作字段750允許在單一指令而非2、3或4個(gè)指令中執(zhí)行多組共同的操作。

      比例字段760-其內(nèi)容允許用于存儲(chǔ)器地址生成(例如,用于使用2比例*索引+基址的地址生成)的索引字段的內(nèi)容的按比例縮放。

      位移字段762a-其內(nèi)容用作存儲(chǔ)器地址生成的一部分(例如,用于使用2比例*索引+基址+位移的地址生成)。

      位移因數(shù)字段762b(注意,位移字段762a直接在位移因數(shù)字段762b上的并置指示使用一個(gè)或另一個(gè))-其內(nèi)容用作地址生成的一部分,它指定通過(guò)存儲(chǔ)器訪問(wèn)的尺寸(n)按比例縮放的位移因數(shù),其中n是存儲(chǔ)器訪問(wèn)中的字節(jié)數(shù)量(例如,用于使用2倍比例*索引+基址+按比例縮放的位移的地址生成)。忽略冗余的低階位,并且因此將位移因數(shù)字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)總尺寸(n)以生成在計(jì)算有效地址中使用的最終位移。n的值由處理器硬件在運(yùn)行時(shí)基于完整操作碼字段774(稍后在本文中描述)和數(shù)據(jù)操縱字段754c確定。位移字段762a和位移因數(shù)字段762b可以不用于無(wú)存儲(chǔ)器訪問(wèn)705的指令模板和/或不同的實(shí)施例可實(shí)現(xiàn)兩者中的僅一個(gè)或不實(shí)現(xiàn)兩者中的任一個(gè),在這個(gè)意義上位移字段762a和位移因數(shù)字段762b是任選的。

      數(shù)據(jù)元素寬度字段764-其內(nèi)容區(qū)分使用多個(gè)數(shù)據(jù)元素寬度中的哪一個(gè)(在一些實(shí)施例中用于所有指令,在其他實(shí)施例中只用于一些指令)。如果支持僅一個(gè)數(shù)據(jù)元素寬度和/或使用操作碼的某一方面來(lái)支持?jǐn)?shù)據(jù)元素寬度,則該字段是不需要的,在這個(gè)意義上該字段是任選的。

      寫(xiě)掩碼字段770-其內(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ě)掩碼字段770允許部分向量操作,這包括加載、存儲(chǔ)、算術(shù)、邏輯等。盡管描述了其中寫(xiě)掩碼字段770的內(nèi)容選擇了多個(gè)寫(xiě)掩碼寄存器中的包含要使用的寫(xiě)掩碼的一個(gè)寫(xiě)掩碼寄存器(并且由此寫(xiě)掩碼字段770的內(nèi)容間接地標(biāo)識(shí)了要執(zhí)行的掩碼操作)的本發(fā)明的實(shí)施例,但是替換實(shí)施例相反或另外允許掩碼寫(xiě)字段770的內(nèi)容直接地指定要執(zhí)行的掩碼操作。

      立即數(shù)字段772-其內(nèi)容允許對(duì)立即數(shù)的指定。該字段在實(shí)現(xiàn)不支持立即數(shù)的通用向量友好格式中不存在且在不使用立即數(shù)的指令中不存在,在這個(gè)意義上該字段是任選的。

      類(lèi)字段768-其內(nèi)容在不同類(lèi)的指令之間進(jìn)行區(qū)分。參考圖7a-b,該字段的內(nèi)容在a類(lèi)和b類(lèi)指令之間進(jìn)行選擇。在圖7a-b中,圓角方形用于指示專(zhuān)用值存在于字段中(例如,在圖7a-b中分別用于類(lèi)字段768的a類(lèi)768a和b類(lèi)768b)。

      a類(lèi)指令模板

      在a類(lèi)非存儲(chǔ)器訪問(wèn)705的指令模板的情況下,α字段752被解釋為其內(nèi)容區(qū)分要執(zhí)行不同擴(kuò)充操作類(lèi)型中的哪一種(例如,針對(duì)無(wú)存儲(chǔ)器訪問(wèn)的舍入型操作710和無(wú)存儲(chǔ)器訪問(wèn)的數(shù)據(jù)變換型操作715的指令模板分別指定舍入752a.1和數(shù)據(jù)變換752a.2)的rs字段752a,而β字段754區(qū)分要執(zhí)行指定類(lèi)型的操作中的哪一種。在無(wú)存儲(chǔ)器訪問(wèn)705指令模板中,比例字段760、位移字段762a以及位移比例字段762b不存在。

      無(wú)存儲(chǔ)器訪問(wèn)的指令模板-完全舍入控制型操作

      在無(wú)存儲(chǔ)器訪問(wèn)的完全舍入控制型操作710的指令模板中,β字段754被解釋為其內(nèi)容提供靜態(tài)舍入的舍入控制字段754a。盡管在本發(fā)明的所述實(shí)施例中舍入控制字段754a包括抑制所有浮點(diǎn)異常(sae)字段756和舍入操作控制字段758,但是替換實(shí)施例可支持、可將這些概念兩者都編碼成相同的字段或者只有這些概念/字段中的一個(gè)或另一個(gè)(例如,可僅有舍入操作控制字段758)。

      sae字段756-其內(nèi)容區(qū)分是否停用異常事件報(bào)告;當(dāng)sae字段756的內(nèi)容指示啟用抑制時(shí),給定指令不報(bào)告任何種類(lèi)的浮點(diǎn)異常標(biāo)志且不喚起任何浮點(diǎn)異常處理程序。

      舍入操作控制字段758-其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(gè)(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段758允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個(gè)實(shí)施例中,舍入操作控制字段750的內(nèi)容優(yōu)先于該寄存器值。

      無(wú)存儲(chǔ)器訪問(wèn)的指令模板-數(shù)據(jù)變換型操作

      在無(wú)存儲(chǔ)器訪問(wèn)的數(shù)據(jù)變換型操作715的指令模板中,β字段754被解釋為數(shù)據(jù)變換字段754b,其內(nèi)容區(qū)分要執(zhí)行多個(gè)數(shù)據(jù)變換中的哪一個(gè)(例如,無(wú)數(shù)據(jù)變換、混合、廣播)。

      在a類(lèi)存儲(chǔ)器訪問(wèn)720的指令模板的情況下,α字段752被解釋為驅(qū)逐提示字段752b,其內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪一個(gè)(在圖7a中,對(duì)于存儲(chǔ)器訪問(wèn)時(shí)效性725的指令模板和存儲(chǔ)器訪問(wèn)非時(shí)效性730的指令模板分別指定時(shí)效性的752b.1和非時(shí)效性的752b.2),而β字段754被解釋為數(shù)據(jù)操縱字段754c,其內(nèi)容區(qū)分要執(zhí)行多個(gè)數(shù)據(jù)操縱操作(也稱(chēng)為基元(primitive))中的哪一個(gè)(例如,無(wú)操縱、廣播、源的向上轉(zhuǎn)換、以及目的地的向下轉(zhuǎn)換)。存儲(chǔ)器訪問(wèn)720的指令模板包括比例字段760、以及任選的位移字段762a或位移比例字段762b。

      向量存儲(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ù)是不可能足夠快地重新使用以從第一級(jí)高速緩存中的高速緩存受益且應(yīng)當(dāng)被給予驅(qū)逐優(yōu)先級(jí)的數(shù)據(jù)。然而,這是提示,且不同的處理器可以不同的方式實(shí)現(xiàn)它,包括完全忽略該提示。

      b類(lèi)指令模板

      在b類(lèi)指令模板的情況下,α字段752被解釋為寫(xiě)掩碼控制(z)字段752c,其內(nèi)容區(qū)分由寫(xiě)掩碼字段770控制的寫(xiě)掩碼操作應(yīng)當(dāng)是合并還是歸零。

      在b類(lèi)非存儲(chǔ)器訪問(wèn)705的指令模板的情況下,β字段754的一部分被解釋為rl字段757a,其內(nèi)容區(qū)分要執(zhí)行不同擴(kuò)充操作類(lèi)型中的哪一種(例如,針對(duì)無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制部分舍入控制類(lèi)型操作712的指令模板和無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制vsize型操作717的指令模板分別指定舍入757a.1和向量長(zhǎng)度(vsize)757a.2),而β字段754的其余部分區(qū)分要執(zhí)行指定類(lèi)型的操作中的哪一種。在無(wú)存儲(chǔ)器訪問(wèn)705指令模板中,比例字段760、位移字段762a以及位移比例字段762b不存在。

      在無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制的部分舍入控制型操作710的指令模板中,β字段754的其余部分被解釋為舍入操作字段759a,并且停用異常事件報(bào)告(給定指令不報(bào)告任何種類(lèi)的浮點(diǎn)異常標(biāo)志且不喚起任何浮點(diǎn)異常處理程序)。

      舍入操作控制字段759a-只作為舍入操作控制字段758,其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(gè)(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段759a允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個(gè)實(shí)施例中,舍入操作控制字段750的內(nèi)容優(yōu)先于該寄存器值。

      在無(wú)存儲(chǔ)器訪問(wèn)的寫(xiě)掩碼控制vsize型操作717的指令模板中,β字段754的其余部分被解釋為向量長(zhǎng)度字段759b,其內(nèi)容區(qū)分要執(zhí)行多個(gè)數(shù)據(jù)向量長(zhǎng)度中的哪一個(gè)(例如,128字節(jié)、256字節(jié)、或512字節(jié))。

      在b類(lèi)存儲(chǔ)器訪問(wèn)720的指令模板的情況下,β字段754的一部分被解釋為廣播字段757b,其內(nèi)容區(qū)分是否要執(zhí)行廣播型數(shù)據(jù)操縱操作,而β字段754的其余部分被解釋為向量長(zhǎng)度字段759b。存儲(chǔ)器訪問(wèn)720的指令模板包括比例字段760、以及任選的位移字段762a或位移比例字段762b。

      針對(duì)通用向量友好指令格式700,示出完整操作碼字段774包括格式字段740、基礎(chǔ)操作字段742以及數(shù)據(jù)元素寬度字段764。盡管示出了其中完整操作碼字段774包括所有這些字段的一個(gè)實(shí)施例,但是在不支持所有這些字段的實(shí)施例中,完整操作碼字段774包括少于所有的這些字段。完整操作碼字段774提供操作碼(opcode)。

      擴(kuò)充操作字段750、數(shù)據(jù)元素寬度字段764以及寫(xiě)掩碼字段770允許在每一指令的基礎(chǔ)上以通用向量友好指令格式指定這些特征。

      寫(xiě)掩碼字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建各種類(lèi)型的指令,因?yàn)檫@些指令允許基于不同的數(shù)據(jù)元素寬度應(yīng)用該掩碼。

      在a類(lèi)和b類(lèi)內(nèi)出現(xiàn)的各種指令模板在不同的情形下是有益的。在本發(fā)明的一些實(shí)施例中,不同處理器或者處理器內(nèi)的不同核可支持僅a類(lèi)、僅b類(lèi)、或者可支持兩類(lèi)。舉例而言,期望用于通用計(jì)算的高性能通用無(wú)序核可僅支持b類(lèi),期望主要用于圖形和/或科學(xué)(吞吐量)計(jì)算的核可僅支持a類(lèi),并且期望用于兩者的核可支持兩者(當(dāng)然,具有來(lái)自兩類(lèi)的模板和指令的一些混合、但是并非來(lái)自兩類(lèi)的所有模板和指令的核在本發(fā)明的范圍內(nèi))。同樣,單一處理器可包括多個(gè)核,所有核支持相同的類(lèi)或者其中不同的核支持不同的類(lèi)。舉例而言,在具有單獨(dú)的圖形和通用核的處理器中,圖形核中的期望主要用于圖形和/或科學(xué)計(jì)算的一個(gè)核可僅支持a類(lèi),而通用核中的一個(gè)或多個(gè)可以是具有期望用于通用計(jì)算的僅支持b類(lèi)的無(wú)序執(zhí)行和寄存器重命名的高性能通用核。不具有單獨(dú)的圖形核的另一處理器可包括既支持a類(lèi)又支持b類(lèi)的一個(gè)或多個(gè)通用有序或無(wú)序核。當(dāng)然,在本發(fā)明的不同實(shí)施例中,來(lái)自一類(lèi)的特征也可在其他類(lèi)中實(shí)現(xiàn)??墒挂愿呒?jí)語(yǔ)言撰寫(xiě)的程序成為(例如,及時(shí)編譯或者統(tǒng)計(jì)編譯)各種不同的可執(zhí)行形式,包括:1)僅具有用于執(zhí)行的目標(biāo)處理器支持的類(lèi)的指令的形式;或者2)具有使用所有類(lèi)的指令的不同組合而編寫(xiě)的替換例程且具有選擇這些例程以基于由當(dāng)前正在執(zhí)行代碼的處理器支持的指令而執(zhí)行的控制流代碼的形式。

      示例性專(zhuān)用向量友好指令格式

      圖8是示出根據(jù)本發(fā)明的實(shí)施例的示例性專(zhuān)用向量友好指令格式的框圖。圖8示出專(zhuān)用向量友好指令格式800,其指定位置、尺寸、解釋和字段的次序、以及那些字段中的一些字段的值,在這個(gè)意義上向量友好指令格式800是專(zhuān)用的。專(zhuān)用向量友好指令格式800可用于擴(kuò)展x86指令集,并且由此一些字段類(lèi)似于在現(xiàn)有x86指令集及其擴(kuò)展(例如,avx)中使用的那些字段或與之相同。該格式保持與具有擴(kuò)展的現(xiàn)有x86指令集的前綴編碼字段、實(shí)操作碼字節(jié)字段、modr/m字段、sib字段、位移字段、以及立即數(shù)字段一致。示出來(lái)自圖7的字段,來(lái)自圖8的字段映射到來(lái)自圖7的字段。

      應(yīng)當(dāng)理解,雖然出于說(shuō)明的目的在通用向量友好指令格式700的上下文中參考專(zhuān)用向量友好指令格式800描述了本發(fā)明的實(shí)施例,但是本發(fā)明不限于專(zhuān)用向量友好指令格式800,除非另有聲明。例如,通用向量友好指令格式700構(gòu)想各種字段的各種可能的尺寸,而專(zhuān)用向量友好指令格式800被示為具有特定尺寸的字段。作為具體示例,盡管在專(zhuān)用向量友好指令格式800中數(shù)據(jù)元素寬度字段764被示為一位字段,但是本發(fā)明不限于此(即,通用向量友好指令格式700構(gòu)想數(shù)據(jù)元素寬度字段764的其他尺寸)。

      通用向量友好指令格式700包括以下列出的按照?qǐng)D8a中示出的順序的如下字段。

      evex前綴(字節(jié)0-3)802-以四字節(jié)形式進(jìn)行編碼。

      格式字段740(evex字節(jié)0,位[7:0])-第一字節(jié)(evex字節(jié)0)是格式字段740,并且它包含0x62(在本發(fā)明的一個(gè)實(shí)施例中用于區(qū)分向量友好指令格式的唯一值)。

      第二-第四字節(jié)(evex字節(jié)1-3)包括提供專(zhuān)用能力的多個(gè)位字段。

      rex字段805(evex字節(jié)1,位[7-5])-由evex.r位字段(evex字節(jié)1,位[7]-r)、evex.x位字段(evex字節(jié)1,位[6]-x)以及(757bex字節(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’字段710-這是rex’字段710的第一部分,并且是用于對(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;本發(fā)明的替換實(shí)施例不以反轉(zhuǎn)的格式存儲(chǔ)該指示的位以及其他指示的位。值1用于對(duì)較低16個(gè)寄存器進(jìn)行編碼。換句話說(shuō),通過(guò)組合evex.r’、evex.r、以及來(lái)自其他字段的其他rrr來(lái)形成r’rrrr。

      操作碼映射字段815(evex字節(jié)1,位[3:0]-mmmm)-其內(nèi)容對(duì)隱含的前導(dǎo)操作碼字節(jié)(0f、0f38、或0f3)進(jìn)行編碼。

      數(shù)據(jù)元素寬度字段764(evex字節(jié)2,位[7]-w)-由記號(hào)evex.w表示。evex.w用于定義數(shù)據(jù)類(lèi)型(32位數(shù)據(jù)元素或64位數(shù)據(jù)元素)的粒度(尺寸)。

      evex.vvvv820(evex字節(jié)2,位[6:3]-vvvv)-evex.vvvv的作用可包括如下:1)evex.vvvv對(duì)以反轉(zhuǎn)(1補(bǔ)碼)的形式指定的第一源寄存器操作數(shù)進(jìn)行編碼且對(duì)具有兩個(gè)或兩個(gè)以上源操作數(shù)的指令有效;2)evex.vvvv針對(duì)特定向量位移對(duì)以1補(bǔ)碼的形式指定的目的地寄存器操作數(shù)進(jìn)行編碼;或者3)evex.vvvv不對(duì)任何操作數(shù)進(jìn)行編碼,保留該字段,并且應(yīng)當(dāng)包含1111b。由此,evex.vvvv字段820對(duì)以反轉(zhuǎn)(1補(bǔ)碼)的形式存儲(chǔ)的第一源寄存器指定符的4個(gè)低階位進(jìn)行編碼。取決于該指令,額外不同的evex位字段用于將指定符尺寸擴(kuò)展到32個(gè)寄存器。

      evex.u768類(lèi)字段(evex字節(jié)2,位[2]-u)-如果evex.u=0,則它指示a類(lèi)或evex.u0,如果evex.u=1,則它指示b類(lèi)或evex.u1。

      前綴編碼字段825(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前綴編碼字段;并且在運(yùn)行時(shí)在提供給解碼器的pla之前被擴(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ò)展。

      α字段752(evex字節(jié)3,位[7]-eh,也稱(chēng)為evex.eh、evex.rs、evex.rl、evex.寫(xiě)掩碼控制、以及evex.n;也以α示出)-如先前所述,該字段是針對(duì)上下文的。

      β字段754(evex字節(jié)3,位[6:4]-sss,也稱(chēng)為evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;也以βββ示出)一如先前所述,該字段是針對(duì)上下文的。

      rex’字段710-這是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)行編碼。換句話說(shuō),通過(guò)組合evex.v’、evex.vvvv來(lái)形成v’vvvv。

      寫(xiě)掩碼字段770(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í)操作碼字段830(字節(jié)4)還被稱(chēng)為操作碼字節(jié)。操作碼的一部分在該字段中被指定。

      modr/m字段840(字節(jié)5)包括mod字段842、reg字段844、以及r/m字段846。如先前所述的,mod字段842的內(nèi)容將存儲(chǔ)器訪問(wèn)和非存儲(chǔ)器訪問(wèn)操作區(qū)分開(kāi)。reg字段844的作用可被歸結(jié)為兩種情形:對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼;或者被視為操作碼擴(kuò)展且不用于對(duì)任何指令操作數(shù)進(jìn)行編碼。r/m字段846的作用可包括如下:對(duì)引用存儲(chǔ)器地址的指令操作數(shù)進(jìn)行編碼;或者對(duì)目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼。

      比例、索引、基址(sib)字節(jié)(字節(jié)6)-如先前所述的,比例字段750的內(nèi)容用于存儲(chǔ)器地址生成。sib.xxx854和sib.bbb856-先前已經(jīng)針對(duì)寄存器索引xxxx和bbbb提及了這些字段的內(nèi)容。

      位移字段762a(字節(jié)7-10)-當(dāng)mod字段842包含10時(shí),字節(jié)7-10是位移字段762a,并且它與傳統(tǒng)32位位移(disp32)一樣地工作,并且以字節(jié)粒度工作。

      位移因數(shù)字段762b(字節(jié)7)-當(dāng)mod字段842包含01時(shí),字節(jié)7是位移因數(shù)字段762b。該字段的位置與傳統(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ù)字段762b是disp8的重新解釋?zhuān)划?dāng)使用位移因數(shù)字段762b時(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ù)字段762b替代傳統(tǒng)x86指令集8位位移。由此,位移因數(shù)字段762b以與x86指令集8位位移相同的方式(因此在modrm/sib編碼規(guī)則中沒(méi)有變化)進(jìn)行編碼,唯一的不同在于,將disp8超載至disp8*n。換句話說(shuō),在編碼規(guī)則或編碼長(zhǎng)度中沒(méi)有變化,而僅在通過(guò)硬件對(duì)位移值的解釋中有變化(這需要按存儲(chǔ)器操作數(shù)的尺寸按比例縮放位移量以獲得字節(jié)式地址偏移量)。

      立即數(shù)字段772如先前所述地操作。

      完整操作碼字段

      圖8b是示出根據(jù)本發(fā)明的實(shí)施例的構(gòu)成完整操作碼字段774的具有專(zhuān)用向量友好指令格式800的字段的框圖。具體地,完整操作碼字段774包括格式字段740、基礎(chǔ)操作字段742、以及數(shù)據(jù)元素寬度(w)字段764?;A(chǔ)操作字段742包括前綴編碼字段825、操作碼映射字段815以及實(shí)操作碼字段830。

      寄存器索引字段

      圖8c是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的構(gòu)成寄存器索引字段744的具有專(zhuān)用向量友好指令格式800的字段的框圖。具體地,寄存器索引字段744包括rex字段805、rex’字段810、modr/m.reg字段844、modr/m.r/m字段846、vvvv字段820、xxx字段854以及bbb字段856。

      擴(kuò)充操作字段

      圖8d是示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的構(gòu)成擴(kuò)充操作字段750的具有專(zhuān)用向量友好指令格式800的字段的框圖。當(dāng)類(lèi)(u)字段768包含0時(shí),它表明evex.u0(a類(lèi)768a);當(dāng)它包含1時(shí),它表明evex.u1(b類(lèi)768b)。當(dāng)u=0且mod字段842包含11(表明無(wú)存儲(chǔ)器訪問(wèn)操作)時(shí),α字段752(evex字節(jié)3,位[7]-eh)被解釋為rs字段752a。當(dāng)rs字段752a包含1(舍入752a.1)時(shí),β字段754(evex字節(jié)3,位[6:4]-sss)被解釋為舍入控制字段754a。舍入控制字段754a包括一位sae字段756和兩位舍入操作字段758。當(dāng)rs字段752a包含0(數(shù)據(jù)變換752a.2)時(shí),β字段754(evex字節(jié)3,位[6:4]-sss)被解釋為三位數(shù)據(jù)變換字段754b。當(dāng)u=0且mod字段842包含00、01或10(表明存儲(chǔ)器訪問(wèn)操作)時(shí),α字段752(evex字節(jié)3,位[7]-eh)被解釋為驅(qū)逐提示(eh)字段752b且β字段754(evex字節(jié)3,位[6:4]-sss)被解釋為三位數(shù)據(jù)操縱字段754c。

      當(dāng)u=1時(shí),α字段752(evex字節(jié)3,位[7]-eh)被解釋為寫(xiě)掩碼控制(z)字段752c。當(dāng)u=1且mod字段842包含11(表明無(wú)存儲(chǔ)器訪問(wèn)操作)時(shí),β字段754的一部分(evex字節(jié)3,位[4]-s0)被解釋為rl字段757a;當(dāng)它包含1(舍入757a.1)時(shí),β字段754的其余部分(evex字節(jié)3,位[6-5]-s2-1)被解釋為舍入操作字段759a,而當(dāng)rl字段757a包含0(vsize757.a2)時(shí),β字段754的其余部分(evex字節(jié)3,位[6-5]-s2-1)被解釋為向量長(zhǎng)度字段759b(evex字節(jié)3,位[6-5]-l1-0)。當(dāng)u=1且mod字段842包含00、01或10(表明存儲(chǔ)器訪問(wèn)操作)時(shí),β字段754(evex字節(jié)3,位[6:4]-sss)被解釋為向量長(zhǎng)度字段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è)512位寬的向量寄存器910;這些寄存器被引用為zmm0到zmm31。較低的16zmm寄存器的較低階256個(gè)位覆蓋在寄存器ymm0-16上。較低的16zmm寄存器的較低階128個(gè)位(ymm寄存器的較低階128個(gè)位)覆蓋在寄存器xmm0-15上。專(zhuān)用向量友好指令格式800對(duì)這些覆蓋的寄存器組操作,如在以下表格中所示的。

      換句話說(shuō),向量長(zhǎng)度字段759b在最大長(zhǎng)度與一個(gè)或多個(gè)其他較短長(zhǎng)度之間進(jìn)行選擇,其中每一這種較短長(zhǎng)度是前一長(zhǎng)度的一半,并且不具有向量長(zhǎng)度字段759b的指令模板對(duì)最大向量長(zhǎng)度操作。此外,在一個(gè)實(shí)施例中,專(zhuān)用向量友好指令格式800的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ě)掩碼寄存器915-在所示的實(shí)施例中,存在8個(gè)寫(xiě)掩碼寄存器(k0至k7),每一寫(xiě)掩碼寄存器的尺寸是64位。在替換實(shí)施例中,寫(xiě)掩碼寄存器915的尺寸是16位。如先前所述的,在本發(fā)明的一個(gè)實(shí)施例中,向量掩碼寄存器k0無(wú)法用作寫(xiě)掩碼;當(dāng)正常指示k0的編碼用作寫(xiě)掩碼時(shí),它選擇硬連線的寫(xiě)掩碼0xffff,從而有效地停用該指令的寫(xiě)掩碼操作。

      通用寄存器925——在所示出的實(shí)施例中,有十六個(gè)64位通用寄存器,這些寄存器與現(xiàn)有的x86尋址模式一起使用來(lái)尋址存儲(chǔ)器操作數(shù)。這些寄存器通過(guò)名稱(chēng)rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8到r15來(lái)引用。

      標(biāo)量浮點(diǎn)堆棧寄存器組(x87堆棧)945,在其上面使用了重疊了mmx打包整數(shù)平坦寄存器組950——在所示出的實(shí)施例中,x87堆棧是用于使用x87指令集擴(kuò)展來(lái)對(duì)32/64/80位浮點(diǎn)數(shù)據(jù)執(zhí)行標(biāo)量浮點(diǎn)運(yùn)算的八元素堆棧;而使用mmx寄存器來(lái)對(duì)64位打包整數(shù)數(shù)據(jù)執(zhí)行操作,以及為在mmx和xmm寄存器之間執(zhí)行的某些操作保存操作數(shù)。

      本發(fā)明的替換實(shí)施例可以使用較寬的或較窄的寄存器。另外,本發(fā)明的替換實(shí)施例可以使用更多、更少或不同的寄存器組和寄存器。

      示例性核架構(gòu)、處理器和計(jì)算機(jī)架構(gòu)

      處理器核可以用出于不同目的的不同方式在不同的處理器中實(shí)現(xiàn)。例如,這樣的核的實(shí)現(xiàn)可以包括:1)旨在用于通用計(jì)算的通用有序核;2)預(yù)期用于通用計(jì)算的高性能通用無(wú)序核;3)旨在主要用于圖形和/或科學(xué)(吞吐量)計(jì)算的專(zhuān)用核。不同處理器的實(shí)現(xiàn)可包括:1)包括旨在用于通用計(jì)算的一個(gè)或多個(gè)通用有序核和/或旨在用于通用計(jì)算的一個(gè)或多個(gè)通用無(wú)序核的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)

      有序和無(wú)序核框圖

      圖10a是示出根據(jù)本發(fā)明的各實(shí)施例的示例性有序流水線和示例性的寄存器重命名的無(wú)序發(fā)布/執(zhí)行流水線的框圖。圖10b是示出根據(jù)本發(fā)明的各實(shí)施例的要包括在處理器中的有序架構(gòu)核的示例性實(shí)施例和示例性的寄存器重命名的無(wú)序發(fā)布/執(zhí)行架構(gòu)核的框圖。圖10a-b中的實(shí)線框示出了有序流水線和有序核,而可選增加的虛線框示出了寄存器重命名的、無(wú)序發(fā)布/執(zhí)行流水線和核。給定有序方面是無(wú)序方面的子集的情況下,將描述無(wú)序方面。

      在圖10a中,處理器流水線1000包括取出級(jí)1002、長(zhǎng)度解碼級(jí)1004、解碼級(jí)1006、分配級(jí)1008、重命名級(jí)1010、調(diào)度(也稱(chēng)為分派或發(fā)布)級(jí)1012、寄存器讀取/存儲(chǔ)器讀取級(jí)1014、執(zhí)行級(jí)1016、寫(xiě)回/存儲(chǔ)器寫(xiě)入級(jí)1018、異常處理級(jí)1022和提交級(jí)1024。

      圖10b示出了包括耦合到執(zhí)行引擎單元1050的前端單元1030的處理器核1090,且執(zhí)行引擎單元和前端單元兩者都耦合到存儲(chǔ)器單元1070。核1090可以是精簡(jiǎn)指令集計(jì)算(risc)核、復(fù)雜指令集計(jì)算(cisc)核、超長(zhǎng)指令字(vliw)核或混合或替代核類(lèi)型。作為又一選項(xiàng),核1090可以是專(zhuān)用核,諸如例如網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用計(jì)算圖形處理器單元(gpgpu)核、或圖形核等等。

      前端單元1030包括耦合到指令高速緩存單元1034的分支預(yù)測(cè)單元1032,該指令高速緩存單元1034被耦合到指令轉(zhuǎn)換后備緩沖器(tlb)1036,該指令轉(zhuǎn)換后備緩沖器1036被耦合到指令取出單元1038,指令取出單元1038被耦合到解碼單元1040。解碼單元1040(或解碼器)可解碼指令,并生成從原始指令解碼出的、或以其他方式反映原始指令的、或從原始指令導(dǎo)出的一個(gè)或多個(gè)微操作、微代碼進(jìn)入點(diǎn)、微指令、其他指令、或其他控制信號(hào)作為輸出。解碼單元1040可使用各種不同的機(jī)制來(lái)實(shí)現(xiàn)。合適的機(jī)制的示例包括但不限于查找表、硬件實(shí)現(xiàn)、可編程邏輯陣列(pla)、微代碼只讀存儲(chǔ)器(rom)等。在一個(gè)實(shí)施例中,核1090包括(例如,在解碼單元1040中或否則在前端單元1030內(nèi)的)用于存儲(chǔ)某些宏指令的微代碼的微代碼rom或其他介質(zhì)。解碼單元1040被耦合到執(zhí)行引擎單元1050中的重命名/分配單元1052。

      執(zhí)行引擎單元1050包括重命名/分配器單元1052,該重命名/分配器單元1052耦合至引退單元1054和一個(gè)或多個(gè)調(diào)度器單元1056的集合。調(diào)度器單元1056表示任何數(shù)目的不同調(diào)度器,包括預(yù)留站、中央指令窗等。調(diào)度器單元1056被耦合到物理寄存器組單元1058。每個(gè)物理寄存器組單元1058表示一個(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í)施例中,物理寄存器組單元1058包括向量寄存器單元、寫(xiě)掩碼寄存器單元和標(biāo)量寄存器單元。這些寄存器單元可以提供架構(gòu)向量寄存器、向量掩碼寄存器、和通用寄存器。物理寄存器組單元1058與引退單元1054重疊以示出可以用來(lái)實(shí)現(xiàn)寄存器重命名和無(wú)序執(zhí)行的各種方式(例如,使用重新排序緩沖器和引退寄存器組;使用將來(lái)的文件、歷史緩沖器和引退寄存器組;使用寄存器映射和寄存器池等等)。引退單元1054和物理寄存器組單元1058被耦合到執(zhí)行群集1060。執(zhí)行群集1060包括一個(gè)或多個(gè)執(zhí)行單元1062的集合和一個(gè)或多個(gè)存儲(chǔ)器訪問(wèn)單元1064的集合。執(zhí)行單元1062可以對(duì)各種類(lèi)型的數(shù)據(jù)(例如,標(biāo)量浮點(diǎn)、打包整數(shù)、打包浮點(diǎn)、向量整型、向量浮點(diǎn))執(zhí)行各種操作(例如,移位、加法、減法、乘法)。盡管某些實(shí)施例可以包括專(zhuān)用于特定功能或功能集合的多個(gè)執(zhí)行單元,但其他實(shí)施例可包括全部執(zhí)行所有功能的僅一個(gè)執(zhí)行單元或多個(gè)執(zhí)行單元。調(diào)度器單元1056、物理寄存器組單元1058和執(zhí)行群集1060被示為可能有多個(gè),因?yàn)槟承?shí)施例為某些類(lèi)型的數(shù)據(jù)/操作(例如,標(biāo)量整型流水線、標(biāo)量浮點(diǎn)/打包整型/打包浮點(diǎn)/向量整型/向量浮點(diǎn)流水線,和/或各自具有其自己的調(diào)度器單元、物理寄存器組單元和/或執(zhí)行群集的存儲(chǔ)器訪問(wèn)流水線——以及在分開(kāi)的存儲(chǔ)器訪問(wèn)流水線的情況下,實(shí)現(xiàn)其中僅該流水線的執(zhí)行群集具有存儲(chǔ)器訪問(wèn)單元1064的某些實(shí)施例)創(chuàng)建分開(kāi)的流水線。還應(yīng)當(dāng)理解,在使用分開(kāi)的流水線的情況下,這些流水線中的一個(gè)或多個(gè)可以為無(wú)序發(fā)布/執(zhí)行,并且其余流水線可以為有序發(fā)布/執(zhí)行。

      存儲(chǔ)器訪問(wèn)單元1064的集合被耦合到存儲(chǔ)器單元1070,該存儲(chǔ)器單元1070包括耦合到數(shù)據(jù)高速緩存單元1074的數(shù)據(jù)tlb單元1072,其中數(shù)據(jù)高速緩存單元1074耦合到二級(jí)(l2)高速緩存單元1076。在一個(gè)示例性實(shí)施例中,存儲(chǔ)器訪問(wèn)單元1064可以包括加載單元、存儲(chǔ)地址單元和存儲(chǔ)數(shù)據(jù)單元,這些單元中的每一個(gè)單元被耦合到存儲(chǔ)器單元1070中的數(shù)據(jù)tlb單元1072。指令高速緩存單元1034還被耦合到存儲(chǔ)器單元1070中的二級(jí)(l2)高速緩存單元1076。l2高速緩存單元1076被耦合到一個(gè)或多個(gè)其他級(jí)的高速緩存,并最終耦合到主存儲(chǔ)器。

      作為示例,示例性寄存器重命名的、無(wú)序發(fā)布/執(zhí)行核架構(gòu)可以如下實(shí)現(xiàn)流水線1000:1)指令取出1038執(zhí)行取出和長(zhǎng)度解碼級(jí)1002和1004;2)解碼單元1040執(zhí)行解碼級(jí)1006;3)重命名/分配器單元1052執(zhí)行分配級(jí)1008和重命名級(jí)1010;4)調(diào)度器單元1056執(zhí)行調(diào)度級(jí)1012;5)物理寄存器組單元1058和存儲(chǔ)器單元1070執(zhí)行寄存器讀取/存儲(chǔ)器讀取級(jí)1014;執(zhí)行群集1060執(zhí)行執(zhí)行級(jí)1016;6)存儲(chǔ)器單元1070和物理寄存器組單元1058執(zhí)行寫(xiě)回/存儲(chǔ)器寫(xiě)入級(jí)1018;7)各單元可牽涉到異常處理級(jí)1022;以及8)引退單元1054和物理寄存器組單元1058執(zhí)行提交級(jí)1024。

      核1090可支持一個(gè)或多個(gè)指令集(例如,x86指令集(具有與較新版本一起添加的某些擴(kuò)展);加利福尼亞州桑尼維爾市的mips技術(shù)公司的mips指令集;加利福尼州桑尼維爾市的arm控股的arm指令集(具有諸如neon等可選附加擴(kuò)展)),其中包括本文中描述的各指令。在一個(gè)實(shí)施例中,核1090包括用于支持打包數(shù)據(jù)指令集擴(kuò)展(例如,avx1、avx2和/或先前描述的一些形式的一般向量友好指令格式(u=0和/或u=1))的邏輯,從而允許很多多媒體應(yīng)用使用的操作能夠使用打包數(shù)據(jù)來(lái)執(zhí)行。

      應(yīng)當(dāng)理解,核可支持多線程化(執(zhí)行兩個(gè)或更多個(gè)并行的操作或線程的集合),并且可以按各種方式來(lái)完成該多線程化,此各種方式包括時(shí)分多線程化、同步多線程化(其中單個(gè)物理核為物理核正在同步多線程化的各線程中的每一個(gè)線程提供邏輯核)、或其組合(例如,時(shí)分取出和解碼以及此后諸如用超線程化技術(shù)來(lái)同步多線程化)。

      盡管在無(wú)序執(zhí)行的上下文中描述了寄存器重命名,但應(yīng)當(dāng)理解,可以在有序架構(gòu)中使用寄存器重命名。盡管所示出的處理器的實(shí)施例還包括分開(kāi)的指令和數(shù)據(jù)高速緩存單元1034/1074以及共享l2高速緩存單元1076,但替換實(shí)施例可以具有用于指令和數(shù)據(jù)兩者的單個(gè)內(nèi)部高速緩存,諸如例如一級(jí)(l1)內(nèi)部高速緩存或多個(gè)級(jí)別的內(nèi)部緩存。在某些實(shí)施例中,該系統(tǒng)可包括內(nèi)部高速緩存和在核和/或處理器外部的外部高速緩存的組合?;蛘?,所有高速緩存都可以在核和/或處理器的外部。

      具體的示例性有序核架構(gòu)

      圖11a-b示出了更具體的示例性有序核架構(gòu)的框圖,該核將是芯片中的若干邏輯塊之一(包括相同類(lèi)型和/或不同類(lèi)型的其他核)。根據(jù)應(yīng)用,這些邏輯塊通過(guò)高帶寬的互連網(wǎng)絡(luò)(例如,環(huán)形網(wǎng)絡(luò))與某些固定的功能邏輯、存儲(chǔ)器i/o接口和其它必要的i/o邏輯通信。

      圖11a是根據(jù)本發(fā)明的各實(shí)施例的單個(gè)處理器核以及它與管芯上互連網(wǎng)絡(luò)1102的連接及其二級(jí)(l2)高速緩存1104的本地子集的框圖。在一個(gè)實(shí)施例中,指令解碼器1100支持具有打包數(shù)據(jù)指令集擴(kuò)展的x86指令集。l1高速緩存1106允許對(duì)進(jìn)入標(biāo)量和向量單元中的高速緩存存儲(chǔ)器的低等待時(shí)間訪問(wèn)。盡管在一個(gè)實(shí)施例中(為了簡(jiǎn)化設(shè)計(jì)),標(biāo)量單元1108和向量單元1110使用分開(kāi)的寄存器集合(分別為標(biāo)量寄存器1112和向量寄存器1114),并且在這些寄存器之間轉(zhuǎn)移的數(shù)據(jù)被寫(xiě)入到存儲(chǔ)器并隨后從一級(jí)(l1)高速緩存1106讀回,但是本發(fā)明的替換實(shí)施例可以使用不同的方法(例如使用單個(gè)寄存器集合或包括允許數(shù)據(jù)在這兩個(gè)寄存器組之間傳輸而無(wú)需被寫(xiě)入和讀回的通信路徑)。

      l2高速緩存的本地子集1104是全局l2高速緩存的一部分,該全局l2高速緩存被劃分成多個(gè)分開(kāi)的本地子集,即每個(gè)處理器核一個(gè)本地子集。每個(gè)處理器核具有到其自己的l2高速緩存1104的本地子集的直接訪問(wèn)路徑。被處理器核讀出的數(shù)據(jù)被存儲(chǔ)在其l2高速緩存子集1104中,并且可以與其他處理器核訪問(wèn)其自己的本地l2高速緩存子集并行地被快速訪問(wèn)。被處理器核寫(xiě)入的數(shù)據(jù)被存儲(chǔ)在其自己的l2高速緩存子集1104中,并在必要的情況下從其它子集清除。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的一致性。環(huán)形網(wǎng)絡(luò)是雙向的,以允許諸如處理器核、l2高速緩存和其它邏輯塊之類(lèi)的代理在芯片內(nèi)彼此通信。每個(gè)環(huán)形數(shù)據(jù)路徑為每個(gè)方向1012位寬。

      圖11b是根據(jù)本發(fā)明的各實(shí)施例的圖11a中的處理器核的一部分的展開(kāi)圖。圖11b包括l1高速緩存1104的l1數(shù)據(jù)高速緩存1106a部分,以及關(guān)于向量單元1110和向量寄存器1114的更多細(xì)節(jié)。具體地說(shuō),向量單元1110是16寬向量處理單元(vpu)(見(jiàn)16寬alu1128),該單元執(zhí)行整型、單精度浮點(diǎn)以及雙精度浮點(diǎn)指令中的一個(gè)或多個(gè)。該vpu通過(guò)混合單元1120支持對(duì)寄存器輸入的混合、通過(guò)數(shù)值轉(zhuǎn)換單元1122a-b支持?jǐn)?shù)值轉(zhuǎn)換,并通過(guò)復(fù)制單元1124支持對(duì)存儲(chǔ)器輸入的復(fù)制。寫(xiě)掩碼寄存器1126允許斷言所得的向量寫(xiě)入。

      具有集成存儲(chǔ)器控制器和圖形器件的處理器

      圖12是根據(jù)本發(fā)明的各實(shí)施例可能具有一個(gè)以上核、可能具有集成存儲(chǔ)器控制器、以及可能具有集成圖形器件的處理器1200的框圖。圖12中的實(shí)線框示出具有單個(gè)核1202a、系統(tǒng)代理1210、一個(gè)或多個(gè)總線控制器單元1216的集合的處理器1200,而虛線框中的可選附加項(xiàng)示出具有多個(gè)核1202a-n、系統(tǒng)代理單元1210中的一個(gè)或多個(gè)集成存儲(chǔ)器控制器單元1214的集合以及專(zhuān)用邏輯1208的替代處理器1200。

      因此,處理器1200的不同實(shí)現(xiàn)可包括:1)cpu,其中專(zhuān)用邏輯1208是集成圖形和/或科學(xué)(吞吐量)邏輯(其可包括一個(gè)或多個(gè)核),并且核1202a-n是一個(gè)或多個(gè)通用核(例如,通用的有序核、通用的無(wú)序核、這兩者的組合);2)協(xié)處理器,其中核1202a-n是旨在主要用于圖形和/或科學(xué)(吞吐量)的多個(gè)專(zhuān)用核;以及3)協(xié)處理器,其中核1202a-n是多個(gè)通用有序核。因此,處理器1200可以是通用處理器、協(xié)處理器或?qū)S锰幚砥?,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu(通用圖形處理單元)、高吞吐量的集成眾核(mic)協(xié)處理器(包括30個(gè)或更多核)、或嵌入式處理器等。該處理器可以被實(shí)現(xiàn)在一個(gè)或多個(gè)芯片上。處理器1200可以是一個(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è)共享高速緩存單元1206的集合、以及耦合至集成存儲(chǔ)器控制器單元1214的集合的外部存儲(chǔ)器(未示出)。該共享高速緩存單元1206的集合可以包括一個(gè)或多個(gè)中間級(jí)高速緩存,諸如二級(jí)(l2)、三級(jí)(l3)、四級(jí)(l4)或其他級(jí)別的高速緩存、末級(jí)高速緩存(llc)、和/或其組合。盡管在一個(gè)實(shí)施例中,基于環(huán)的互連單元1212將集成圖形邏輯1208、共享高速緩存單元1206的集合以及系統(tǒng)代理單元1210/集成存儲(chǔ)器控制器單元1214互連,但替代實(shí)施例可使用任何數(shù)量的公知技術(shù)來(lái)將這些單元互連。在一個(gè)實(shí)施例中,可以維護(hù)一個(gè)或多個(gè)高速緩存單元1206和核1202a-n之間的一致性(coherency)。

      在某些實(shí)施例中,核1202a-n中的一個(gè)或多個(gè)核能夠多線程化。系統(tǒng)代理1210包括協(xié)調(diào)和操作核1202a-n的那些組件。系統(tǒng)代理單元1210可包括例如功率控制單元(pcu)和顯示單元。pcu可以是或包括用于調(diào)整核1202a-n和集成圖形邏輯1208的功率狀態(tài)所需的邏輯和組件。顯示單元用于驅(qū)動(dòng)一個(gè)或多個(gè)外部連接的顯示器。

      核1202a-n在架構(gòu)指令集方面可以是同構(gòu)的或異構(gòu)的;即,這些核1202a-n中的兩個(gè)或更多個(gè)核可能能夠執(zhí)行相同的指令集,而其他核可能能夠執(zhí)行該指令集的僅僅子集或不同的指令集。

      示例性計(jì)算機(jī)架構(gòu)

      圖13-16是示例性計(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ì)和配置也是合適的。一般來(lái)說(shuō),能夠包含本文中所公開(kāi)的處理器和/或其它執(zhí)行邏輯的多個(gè)系統(tǒng)和電子設(shè)備一般都是合適的。

      現(xiàn)在參見(jià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(其可以在分開(kāi)的芯片上);gmch1390包括存儲(chǔ)器和圖形控制器,存儲(chǔ)器1340和協(xié)處理器1345耦合到該存儲(chǔ)器和圖形控制器;ioh1350將輸入/輸出(i/o)設(shè)備1360耦合到gmch1390?;蛘?,存儲(chǔ)器和圖形控制器中的一個(gè)或兩者可以被集成在處理器內(nèi)(如本文中所描述的),存儲(chǔ)器1340和協(xié)處理器1345被直接耦合到處理器1310以及控制器中樞1320,控制器中樞1320與ioh1350處于單個(gè)芯片中。

      附加處理器1315的任選性質(zhì)用虛線表示在圖13中。每一處理器1310、1315可包括本文中描述的處理核中的一個(gè)或多個(gè),并且可以是處理器1200的某一版本。

      存儲(chǔ)器1340可以是例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、相變存儲(chǔ)器(pcm)或這兩者的組合。對(duì)于至少一個(gè)實(shí)施例,控制器中樞1320經(jīng)由諸如前端總線(fsb)之類(lèi)的多分支總線(multi-dropbus)、諸如快速通道互連(qpi)之類(lèi)的點(diǎn)對(duì)點(diǎn)接口、或者類(lèi)似的連接1395與處理器1310、1315進(jìn)行通信。

      在一個(gè)實(shí)施例中,協(xié)處理器1345是專(zhuān)用處理器,諸如例如高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu、或嵌入式處理器等等。在一個(gè)實(shí)施例中,控制器中樞1320可以包括集成圖形加速器。

      在物理資源1310、1315之間可以存在包括架構(gòu)、微架構(gòu)、熱、和功耗特征等的一連串品質(zhì)度量方面的各種差異。

      在一個(gè)實(shí)施例中,處理器1310執(zhí)行控制一般類(lèi)型的數(shù)據(jù)處理操作的指令。嵌入在這些指令中的可以是協(xié)處理器指令。處理器1310將這些協(xié)處理器指令識(shí)別為應(yīng)當(dāng)由附連的協(xié)處理器1345執(zhí)行的類(lèi)型。因此,處理器1310在協(xié)處理器總線或者其他互連上將這些協(xié)處理器指令(或者表示協(xié)處理器指令的控制信號(hào))發(fā)布到協(xié)處理器1345。協(xié)處理器1345接受并執(zhí)行所接收的協(xié)處理器指令。

      現(xiàn)在參考圖14,所示為根據(jù)本發(fā)明的一實(shí)施例的更具體的第一示例性系統(tǒng)1400的框圖。如圖14所示,多處理器系統(tǒng)1400是點(diǎn)對(duì)點(diǎn)互連系統(tǒng),并包括經(jīng)由點(diǎn)對(duì)點(diǎn)互連1450耦合的第一處理器1470和第二處理器1480。處理器1470和1480中的每一個(gè)都可以是處理器1200的某一版本。在本發(fā)明的一個(gè)實(shí)施例中,處理器1470和1480分別是處理器1310和1315,而協(xié)處理器1438是協(xié)處理器1345。在另一實(shí)施例中,處理器1470和1480分別是處理器1310和協(xié)處理器1345。

      處理器1470和1480被示為分別包括集成存儲(chǔ)器控制器(imc)單元1472和1482。處理器1470還包括作為其總線控制器單元的一部分的點(diǎn)對(duì)點(diǎn)(p-p)接口1476和1478;類(lèi)似地,第二處理器1480包括點(diǎn)對(duì)點(diǎn)接口1486和1488。處理器1470、1480可以使用點(diǎn)對(duì)點(diǎn)(p-p)電路1478、1488經(jīng)由p-p接口1450來(lái)交換信息。如圖14所示,imc1472和1482將各處理器耦合至相應(yīng)的存儲(chǔ)器,即存儲(chǔ)器1432和存儲(chǔ)器1434,這些存儲(chǔ)器可以是本地附連至相應(yīng)的處理器的主存儲(chǔ)器的部分。

      處理器1470、1480可各自經(jīng)由使用點(diǎn)對(duì)點(diǎn)接口電路1476、1494、1486、1498的各個(gè)p-p接口1452、1454與芯片組1490交換信息。芯片組1490可以可選地經(jīng)由高性能接口1439與協(xié)處理器1438交換信息。在一個(gè)實(shí)施例中,協(xié)處理器1438是專(zhuān)用處理器,諸如例如高吞吐量mic處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、gpgpu、或嵌入式處理器等等。

      共享高速緩存(未示出)可以被包括在任一處理器之內(nèi),或被包括在兩個(gè)處理器外部但仍經(jīng)由p-p互連與這些處理器連接,從而如果將某處理器置于低功率模式時(shí),可將任一處理器或兩個(gè)處理器的本地高速緩存信息存儲(chǔ)在該共享高速緩存中。

      芯片組1490可經(jīng)由接口1496耦合至第一總線1416。在一個(gè)實(shí)施例中,第一總線1416可以是外圍部件互連(pci)總線,或諸如pciexpress總線或其它第三代i/o互連總線之類(lèi)的總線,但本發(fā)明的范圍并不受此限制。

      如圖14所示,各種i/o設(shè)備1414可以連同總線橋1418耦合到第一總線1416,總線橋1418將第一總線1416耦合至第二總線1420。在一個(gè)實(shí)施例中,諸如協(xié)處理器、高吞吐量mic處理器、gpgpu的處理器、加速器(諸如例如圖形加速器或數(shù)字信號(hào)處理器(dsp)單元)、現(xiàn)場(chǎng)可編程門(mén)陣列或任何其他處理器的一個(gè)或多個(gè)附加處理器1415被耦合到第一總線1416。在一個(gè)實(shí)施例中,第二總線1420可以是低引腳計(jì)數(shù)(lpc)總線。各種設(shè)備可以被耦合至第二總線1420,在一個(gè)實(shí)施例中這些設(shè)備包括例如鍵盤(pán)/鼠標(biāo)1422、通信設(shè)備1427以及諸如可包括指令/代碼和數(shù)據(jù)1430的盤(pán)驅(qū)動(dòng)器或其它大容量存儲(chǔ)設(shè)備的存儲(chǔ)單元1428。此外,音頻i/o1424可以被耦合至第二總線1420。注意,其它架構(gòu)是可能的。例如,代替圖14的點(diǎn)對(duì)點(diǎn)架構(gòu),系統(tǒng)可以實(shí)現(xiàn)多分支總線或其它這類(lèi)架構(gòu)。

      現(xiàn)在參考圖15,所示為根據(jù)本發(fā)明的實(shí)施例的更具體的第二示例性系統(tǒng)1500的框圖。圖14和圖15中的相同部件用相同附圖標(biāo)記表示,并從圖15中省去了圖14中的某些方面,以避免使圖15的其它方面變得模糊。

      圖15示出處理器1470、1480可分別包括集成存儲(chǔ)器和i/o控制邏輯(“cl”)1472和1482。因此,cl1472、1482包括集成存儲(chǔ)器控制器單元并包括i/o控制邏輯。圖15不僅示出存儲(chǔ)器1432、1434耦合至cl1472、1482,而且還示出i/o設(shè)備1514也耦合至控制邏輯1472、1482。傳統(tǒng)i/o設(shè)備1515被耦合至芯片組1490。

      現(xiàn)在參考圖16,所示為根據(jù)本發(fā)明的一實(shí)施例的soc1600的框圖。在圖12中,相似的部件具有同樣的附圖標(biāo)記。另外,虛線框是更先進(jìn)的soc的可選特征。在圖16中,互連單元1602被耦合至:應(yīng)用處理器1610,該應(yīng)用處理器包括一個(gè)或多個(gè)核202a-n的集合以及共享高速緩存單元1206;系統(tǒng)代理單元1210;總線控制器單元1216;集成存儲(chǔ)器控制器單元1214;一組或一個(gè)或多個(gè)協(xié)處理器1620,其可包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)單元1630;直接存儲(chǔ)器存取(dma)單元1632;以及用于耦合至一個(gè)或多個(gè)外部顯示器的顯示單元1640。在一個(gè)實(shí)施例中,協(xié)處理器1620包括專(zhuān)用處理器,諸如例如網(wǎng)絡(luò)或通信處理器、壓縮引擎、gpgpu、高吞吐量mic處理器、或嵌入式處理器等等。

      本文公開(kāi)的機(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è)備。

      可將程序代碼(諸如圖14中示出的代碼1430)應(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)的隨機(jī)存取存儲(chǔ)器(ram)、可擦除可編程只讀存儲(chǔ)器(eprom)、閃存、電可擦除可編程只讀存儲(chǔ)器(eeprom);相變存儲(chǔ)器(pcm);磁卡或光卡;或適于存儲(chǔ)電子指令的任何其它類(lèi)型的介質(zhì)。

      因此,本發(fā)明的各實(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)換器可以在處理器上、在處理器外、或者部分在處理器上且部分在處理器外。

      圖17是根據(jù)本發(fā)明的各實(shí)施例的對(duì)照使用軟件指令轉(zhuǎn)換器將源指令集中的二進(jìn)制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的框圖。在所示的實(shí)施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但作為替代,該指令轉(zhuǎn)換器可以用軟件、固件、硬件或其各種組合來(lái)實(shí)現(xiàn)。圖17示出可以使用x86編譯器1704來(lái)編譯利用高級(jí)語(yǔ)言1702的程序,以生成可以由具有至少一個(gè)x86指令集核的處理器1716原生執(zhí)行的x86二進(jìn)制代碼1706。具有至少一個(gè)x86指令集核的處理器1716表示任何處理器,這些處理器能通過(guò)兼容地執(zhí)行或以其他方式處理以下內(nèi)容來(lái)執(zhí)行與具有至少一個(gè)x86指令集核的英特爾處理器基本相同的功能:1)英特爾x86指令集核的指令集的本質(zhì)部分,或2)目標(biāo)為在具有至少一個(gè)x86指令集核的英特爾處理器上運(yùn)行的應(yīng)用或其它程序的目標(biāo)代碼版本,以便取得與具有至少一個(gè)x86指令集核的英特爾處理器基本相同的結(jié)果。x86編譯器1704表示用于生成x86二進(jìn)制代碼1706(例如,目標(biāo)代碼)的編譯器,該二進(jìn)制代碼1706可通過(guò)或不通過(guò)附加的鏈接處理在具有至少一個(gè)x86指令集核的處理器1716上執(zhí)行。類(lèi)似地,圖17示出可以使用替代的指令集編譯器1708來(lái)編譯利用高級(jí)語(yǔ)言1702的程序,以生成可以由不具有至少一個(gè)x86指令集核的處理器1714(例如具有執(zhí)行加利福尼亞州桑尼維爾市的mips技術(shù)公司的mips指令集、和/或執(zhí)行加利福尼亞州桑尼維爾市的arm控股公司的arm指令集的核的處理器)原生執(zhí)行的替代指令集二進(jìn)制代碼1710。指令轉(zhuǎn)換器1712被用來(lái)將x86二進(jìn)制代碼1706轉(zhuǎn)換成可以由不具有x86指令集核的處理器1714原生執(zhí)行的代碼。該轉(zhuǎn)換后的代碼不大可能與替換性指令集二進(jìn)制代碼1710相同,因?yàn)槟軌蜻@樣做的指令轉(zhuǎn)換器難以制造;然而,轉(zhuǎn)換后的代碼將完成一般操作并由來(lái)自替代指令集的指令構(gòu)成。因此,指令轉(zhuǎn)換器1712通過(guò)仿真、模擬或任何其它過(guò)程來(lái)表示允許不具有x86指令集處理器或核的處理器或其它電子設(shè)備執(zhí)行x86二進(jìn)制代碼1706的軟件、固件、硬件或其組合。

      當(dāng)前第1頁(yè)1 2 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1