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

用于緊密耦合的異構(gòu)計(jì)算的硬件處理器和方法與流程

文檔序號(hào):12362733閱讀:401來源:國知局
用于緊密耦合的異構(gòu)計(jì)算的硬件處理器和方法與流程

本公開通常涉及電子設(shè)備,并且更具體地,本公開的實(shí)施例涉及用于緊密耦合的異構(gòu)計(jì)算的硬件處理器。



背景技術(shù):

處理器或者處理器的集合執(zhí)行來自例如指令集架構(gòu)(ISA)的指令集的指令。指令集是與編程相關(guān)的計(jì)算機(jī)架構(gòu)的一部分,并且通常包括原生數(shù)據(jù)類型、指令、寄存器架構(gòu)、尋址模式、存儲(chǔ)器架構(gòu)、中斷和異常處理、以及外部輸入和輸出(I/O)。

附圖說明

在附圖的各圖中通過示例并且非限制的方式圖示本公開,其中相同的附圖標(biāo)記指示相似的元素,并且在附圖中:

圖1圖示了根據(jù)本公開的實(shí)施例的硬件處理器。

圖2A圖示了根據(jù)本公開的實(shí)施例的通過硬件處理器的數(shù)據(jù)路徑。

圖2B圖示了根據(jù)本公開的實(shí)施例的通過圖2A中的硬件處理器的活動(dòng)數(shù)據(jù)路徑。

圖3圖示了根據(jù)本公開的實(shí)施例的通過數(shù)據(jù)路徑轉(zhuǎn)移的多個(gè)矢量。

圖4圖示了根據(jù)本公開的實(shí)施例的流程圖。

圖5A是圖示了根據(jù)本公開的實(shí)施例的通用矢量友好的指令格式及其A類指令模板的框圖。

圖5B是圖示了根據(jù)本公開的實(shí)施例的通用矢量友好的指令格式及其B類指令模板的框圖。

圖6A是圖示了根據(jù)本公開的實(shí)施例的用于圖5A和5B中的通用矢量友好的指令格式的字段的框圖。

圖6B是圖示了根據(jù)本公開的一個(gè)實(shí)施例的構(gòu)成完全操作碼字段的圖6A中的特定矢量友好的指令格式的字段的框圖。

圖6C是圖示了根據(jù)本公開的一個(gè)實(shí)施例的構(gòu)成寄存器索引字段的圖6A中的特定矢量友好的指令格式的字段的框圖。

圖6D是圖示了根據(jù)本公開的一個(gè)實(shí)施例的構(gòu)成擴(kuò)增操作字段550的圖6A中的特定矢量友好的指令格式的字段的框圖。

圖7是根據(jù)本公開的一個(gè)實(shí)施例的寄存器架構(gòu)的框圖。

圖8A是圖示了根據(jù)本公開的實(shí)施例的示例性有序流水線和示例性寄存器重命名、無序發(fā)出/執(zhí)行流水線兩者的框圖。

圖8B是圖示了根據(jù)本公開的實(shí)施例的將被包括在處理器中的有序架構(gòu)核的示例性實(shí)施例和示例性寄存器重命名、無序發(fā)出/執(zhí)行架構(gòu)核兩者的框圖。

圖9A是根據(jù)本公開的實(shí)施例的單個(gè)處理器核連同其至裸片上互連網(wǎng)絡(luò)的連接以及連同其二級(jí)(L2)高速緩存的本地子集的框圖。

圖9B是根據(jù)本公開的實(shí)施例的圖9A中的處理器核的部分的展開圖。

圖10是根據(jù)本公開的實(shí)施例的可能具有多于一個(gè)核、可能具有集成存儲(chǔ)器控制器并且可能具有集成圖形的處理器的框圖。

圖11是依據(jù)本公開的一個(gè)實(shí)施例的系統(tǒng)的框圖。

圖12是依據(jù)本公開的實(shí)施例的更具體的示例性系統(tǒng)的框圖。

圖13,示出了依據(jù)本公開的實(shí)施例的第二更具體的示例性系統(tǒng)的框圖。

圖14,示出了依據(jù)本公開的實(shí)施例的片上系統(tǒng)(SoC)的框圖。

圖15是根據(jù)本公開的實(shí)施例的對比使用軟件指令轉(zhuǎn)換器以將源指令集中的二進(jìn)制指令轉(zhuǎn)換至目標(biāo)指令集中的二進(jìn)制指令的框圖。

具體實(shí)施方式

在下面的描述中,闡述了許多具體的細(xì)節(jié)。然而,應(yīng)當(dāng)理解可能在沒有這些具體細(xì)節(jié)的情況下實(shí)踐本公開的實(shí)施例。在其他情況下,沒有詳細(xì)示出公知的電路、結(jié)構(gòu)和技術(shù)以免使本描述的理解模糊。

本說明書中對于“一個(gè)實(shí)施例”、“實(shí)施例”、“示例實(shí)施例”等的引用指示描述的實(shí)施例可以包括特定特征、結(jié)構(gòu)或特性,但是每一個(gè)實(shí)施例可以不一定包括所述特定特征、結(jié)構(gòu)或特性。此外,這樣的短語不一定指相同實(shí)施例。進(jìn)一步的,當(dāng)與實(shí)施例相關(guān)地描述特定特征、結(jié)構(gòu)或特性時(shí),認(rèn)為無論是否明確描述,影響與其他實(shí)施例相關(guān)的這樣的特征、結(jié)構(gòu)或特性在本領(lǐng)域技術(shù)人員的知識(shí)范圍內(nèi)。

(例如,硬件)處理器或處理器的集合執(zhí)行來自例如指令集架構(gòu)(ISA)的指令集的指令。該指令集是與編程相關(guān)的計(jì)算機(jī)架構(gòu)的一部分,并且通常包括原生數(shù)據(jù)類型、指令、寄存器架構(gòu)、尋址模式、存儲(chǔ)器架構(gòu)、中斷和異常處理以及外部輸入和輸出(I/O)。應(yīng)當(dāng)注意,術(shù)語指令在本文可以是指宏指令(例如,提供給處理器以供執(zhí)行的指令),或者微指令(例如,從解碼宏指令的處理器的解碼單元(解碼器)產(chǎn)生的指令)。處理器(例如,具有一個(gè)或多個(gè)核以解碼和/或執(zhí)行指令)可能例如在執(zhí)行算術(shù)、邏輯或其他功能中在數(shù)據(jù)上進(jìn)行操作。

某些功能可以包括矢量(例如,具有對應(yīng)的索引以標(biāo)識(shí)每個(gè)元素的數(shù)據(jù)元素(條目)的陣列或其他有序列表)上的操作,例如,在其他矢量上操作的矢量。矢量的元素通??梢灾副硎締蝹€(gè)值的數(shù)據(jù)的離散部分,例如,通過它自己的索引值標(biāo)識(shí)。矢量的各元素可以是數(shù)(例如,整數(shù)、浮點(diǎn)等)。在一個(gè)實(shí)施例中,矢量包括多個(gè)元素以表示單個(gè)數(shù),例如,單個(gè)浮點(diǎn)數(shù)。

處理器可以訪問(例如,加載和/或存儲(chǔ))(例如,與處理器裸片分離的)存儲(chǔ)器(例如,數(shù)據(jù)存儲(chǔ)設(shè)備)中的數(shù)據(jù)。存儲(chǔ)器可以是系統(tǒng)存儲(chǔ)器,例如,隨機(jī)存取存儲(chǔ)器(RAM)。數(shù)據(jù)存儲(chǔ)設(shè)備可以不包括處理器高速緩存和/或不包括外部儲(chǔ)存器,諸如,但不限于,硬盤驅(qū)動(dòng)(HDD)儲(chǔ)存器。

處理器可以將某個(gè)(某些)操作(或者(一個(gè)或多個(gè))操作的部分)卸載至卸載引擎。硬件卸載引擎可以與處理器分離(例如,裸片外)或者是處理器的部分,例如,核的部分或與核分離。利用卸載引擎的處理器(例如,處理器核)可以包括例如當(dāng)指令被執(zhí)行時(shí)使數(shù)據(jù)被發(fā)送至硬件卸載引擎的在其指令集中的指令(例如,具有特定操作碼)。在一個(gè)實(shí)施例中,卸載引擎包括控制其操作的有限狀態(tài)機(jī)(FSM),例如,如本文所討論的。在一個(gè)實(shí)施例中,處理器核(例如,多個(gè)(例如,矢量)執(zhí)行單元)可以以第一時(shí)鐘速度執(zhí)行并且卸載引擎可以(例如,同時(shí)地)以第二、更快(或更慢)的時(shí)鐘速度執(zhí)行。在一個(gè)實(shí)施例中,卸載引擎以大于二倍的處理器時(shí)鐘速度操作。在一個(gè)實(shí)施例中,卸載引擎以處理器時(shí)鐘速度的2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20或25等倍(或者以處理器時(shí)鐘速度的2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20或25等分之一)操作。卸載引擎可以是與利用該卸載引擎的處理器不同類型的處理器。在一個(gè)實(shí)施例中,處理器和卸載引擎使用相同的指令集,例如,ISA。

在一個(gè)實(shí)施例中,處理器包括專用卸載引擎以解決域特定的問題。與僅硬件和僅軟件的方式相比,混合處理器架構(gòu)的某些實(shí)施例可以提供軟件的靈活性(例如,運(yùn)行在處理器上的固件)和優(yōu)化的硬件的效率(例如,專用卸載引擎)二者。例如,在公共密鑰加密(PKE)的一個(gè)實(shí)施例中,電路(例如,內(nèi)容處理模塊(CPM))可以包括(例如,可編程的)矢量處理器(例如,模塊化數(shù)學(xué)處理器(MMP))和(例如,大的)整數(shù)乘法器(521bx521b)卸載引擎。該實(shí)施例可以包括卸載引擎的異步使用模型,例如,以使得獲得(sourcing)操作數(shù)和排出(draining)結(jié)果包括兩個(gè)(例如,固件)矢量指令的執(zhí)行。指令的這樣的順序執(zhí)行模型可以減少卸載引擎的利用以及因此減少系統(tǒng)的整體吞吐量。具有(例如,高度)并行數(shù)據(jù)路徑的這樣的矢量處理器和卸載引擎還可以包括數(shù)據(jù)冒險(xiǎn)(hazard)解決邏輯的利用。

在本公開的一個(gè)實(shí)施例中,用于甚長指令字(VLIW)類型的指令的矢量處理器(例如,矢量處理器架構(gòu))允許處理器自身內(nèi)部以及至和/或來自卸載引擎的(例如,高度地)并行的數(shù)據(jù)移動(dòng),例如,由處理器(例如,核)發(fā)送至卸載引擎的數(shù)據(jù)和/或由卸載引擎發(fā)送至處理器的數(shù)據(jù)。VLIW指令(例如,當(dāng)被執(zhí)行時(shí))可以引起多個(gè)(例如,有區(qū)別的或不同的)操作。例如,一個(gè)VLIW指令可以(例如,當(dāng)被執(zhí)行時(shí))使一個(gè)(例如,不同的)操作在處理器的多個(gè)執(zhí)行單元中的每一個(gè)上執(zhí)行。

本公開的某些實(shí)施例包括(一個(gè)或多個(gè))切換器和多個(gè)執(zhí)行單元以實(shí)現(xiàn)并行數(shù)據(jù)操作。切換器可以是矩陣(例如,交叉)切換器。矩陣切換器通常可以是指在多個(gè)輸入和多個(gè)輸出之間的單獨(dú)切換器的組件。切換器可以是非阻塞切換器,以使得其他并發(fā)連接并不阻止將其他輸入連接至其他輸出。單個(gè)輸入可以連接至多個(gè)輸出。

在一個(gè)實(shí)施例中,如果需要數(shù)據(jù)(例如,來自流水線中的第一指令)以在該數(shù)據(jù)上執(zhí)行操作(例如,由流水線中的第二指令),那么該數(shù)據(jù)(例如,來自第一指令)的不可用性可能引起該操作(例如,由第二指令)的執(zhí)行中的延遲。在這樣的情況下,執(zhí)行流水線的一部分可以使用特殊處理,例如被暫停(例如,停止),直到該數(shù)據(jù)可用(例如,第一指令完成執(zhí)行因此所得到的數(shù)據(jù)可由第二指令使用)。這樣的情況可能通常被稱為數(shù)據(jù)冒險(xiǎn)。

本公開的某些實(shí)施例包括數(shù)據(jù)冒險(xiǎn)解決邏輯。在一個(gè)實(shí)施例中,硬件處理器包括一個(gè)或多個(gè)(例如,整數(shù))卸載引擎、(例如,(一個(gè)或多個(gè))矢量處理器的)一個(gè)或多個(gè)執(zhí)行單元、多個(gè)存儲(chǔ)體以及具有檢測和/或防止數(shù)據(jù)冒險(xiǎn)的能力的促進(jìn)在任何或全部處理元件和存儲(chǔ)器之間的數(shù)據(jù)移動(dòng)的切換器(例如,包括數(shù)據(jù)切換邏輯和/或數(shù)據(jù)冒險(xiǎn)解決邏輯)。例如,數(shù)據(jù)冒險(xiǎn)解決邏輯可以控制支持移位(例如,向右或向左)操作(例如,矢量移位操作)的矢量處理數(shù)據(jù)路徑。

圖1圖示了根據(jù)本公開的實(shí)施例的硬件處理器100。描述的硬件處理器100包括處理器核102、卸載引擎104、對存儲(chǔ)器106的訪問以及切換器108??梢岳眠@些部件的任何組合。雖然示出為分離的部件,但是存儲(chǔ)器106可以是硬件處理器100的一部分。處理器核可以包括(例如,串行和/或并行的)一個(gè)或多個(gè)執(zhí)行單元。卸載引擎可以執(zhí)行例如針對處理器核的操作,以使得處理器核可以(例如,同時(shí))執(zhí)行其他操作。卸載引擎可以(例如,向處理器核)提供信號(hào)以指示其操作完成(例如,數(shù)據(jù)是可用的)。卸載引擎可以與處理器分離(例如,在裸片外)。卸載引擎可以具有對存儲(chǔ)器的(例如,與處理器)分離的訪問,例如,具有直接存儲(chǔ)器訪問。

存儲(chǔ)器106可以是任何數(shù)據(jù)存儲(chǔ)設(shè)備。描述的存儲(chǔ)器106包括多個(gè)存儲(chǔ)體,例如,存儲(chǔ)體A、B、F和G。存儲(chǔ)器可以包括存儲(chǔ)體A-G。存儲(chǔ)器可以包括任何多個(gè)存儲(chǔ)體。例如,存儲(chǔ)器可以包括2個(gè)或更多存儲(chǔ)體、3個(gè)或更多存儲(chǔ)體、4個(gè)或更多存儲(chǔ)體、5個(gè)或更多存儲(chǔ)體等。每個(gè)存儲(chǔ)體可能具有其自己的一個(gè)或多個(gè)訪問端口(例如,輸入和/或輸出)。每個(gè)存儲(chǔ)體可能與其他存儲(chǔ)體獨(dú)立地被訪問,例如,多個(gè)存儲(chǔ)體或每個(gè)存儲(chǔ)體可以被同時(shí)訪問。處理器還可以包括存儲(chǔ)器。處理器和/或存儲(chǔ)器可以包括緩沖器,例如,移位寄存器。

切換器可以(例如,從處理器核102)接收控制信號(hào)以將某個(gè)(某些)輸入連接至某個(gè)(某些)輸出。切換器108可以包括任何通信路徑并且不限于圖中描述的那些。切換器可以選擇性地連接(一個(gè)或多個(gè))部件。例如,切換器108可以連接處理器核、卸載引擎、存儲(chǔ)器及其任何組合。注意,本文的單頭箭頭可以不要求單向通信,例如,它可以指示雙向通信(例如,至和來自該部件)。在本文的實(shí)施例中可以利用通信路徑的任何或全部組合。切換器可以包括數(shù)據(jù)冒險(xiǎn)解決邏輯以控制哪些部件被連接在一起(例如,連接在兩個(gè)組件之間是活動(dòng)的)。切換器可以由處理器(例如,處理器核)控制,例如,通過發(fā)送至該切換器的一個(gè)或多個(gè)控制信號(hào)。在一個(gè)實(shí)施例中,切換器可以位于處理器的部件內(nèi),例如,在處理器核和/或卸載引擎內(nèi)。切換器可以控制(例如,激活)連接,以使得數(shù)據(jù)路徑不允許(例如,包括)數(shù)據(jù)冒險(xiǎn)。任何數(shù)據(jù)路徑可以路由回切換器中,例如,以使得輸出被路由回作為輸入。

圖2A圖示了根據(jù)本公開的實(shí)施例的通過硬件處理器200的數(shù)據(jù)路徑。圖2A中的數(shù)據(jù)流通常為從左至右的方式。描述的數(shù)據(jù)路徑包括處理器的指令取出單元210以取出指令。所取出的指令(例如,宏指令)然后可以引向解碼器212,例如,以被解碼以作為輸出而生成一個(gè)或多個(gè)微操作、微代碼入口點(diǎn)、微指令、其他指令或其他控制信號(hào),它們被從原始指令中解碼出,或者它們以其他方式反映原始指令,或者從原始指令得出。解碼的指令可以然后引向矢量分解單元214,例如,以將(例如,VLIW)矢量指令轉(zhuǎn)換成可以由處理器200的描述的數(shù)據(jù)路徑執(zhí)行的多個(gè)(例如,雙-四字)子指令(例如,以對于暴露的指令集架構(gòu)透明的方式)。指令取出單元210、解碼器212和矢量分解單元214的任一個(gè)或所有可以是可選的。進(jìn)一步的,雖然描述了多個(gè)流水線寄存器(例如,EC/MR寄存器216、MR/EX寄存器220、EX0/EX1寄存器222以及EX/WB寄存器224),但是可以利用任何單個(gè)或多個(gè)流水線寄存器。在一個(gè)實(shí)施例中,不利用任何流水線寄存器。

描述的數(shù)據(jù)路徑的其余部分包括相繼的處理器流水線級(jí),其被標(biāo)記為:存儲(chǔ)器讀取(MR)、執(zhí)行0(EX0)、執(zhí)行1(EX1)以及存儲(chǔ)器寫回(WB)。在一個(gè)實(shí)施例中,執(zhí)行級(jí)是例如具有描述的電路的處理器(例如,包括核)的處理器200(例如,其單個(gè)核202)的部分。處理器核202可以包括具有多個(gè)執(zhí)行級(jí)(例如,串行)的電路或者將來自單個(gè)執(zhí)行級(jí)的數(shù)據(jù)輸出作為輸入重新路由至該單個(gè)執(zhí)行級(jí)的電路,例如,(一個(gè)或多個(gè))輸出被連接回去作為(一個(gè)或多個(gè))輸入。在一個(gè)實(shí)施例中,切換器208A和切換器208B可以為相同的切換器。指令取出單元210、解碼器212以及矢量分解單元214的任何或所有可以是硬件處理器200或處理器核202的部分。雖然在某些附圖中示出了單個(gè)處理器核,但是硬件處理器可以包括多個(gè)處理器核。在一個(gè)實(shí)施例中,錯(cuò)誤校正(例如,錯(cuò)誤校正單元)可以出現(xiàn)在流水線中,例如,在存儲(chǔ)器讀取(MR)之前。

在一個(gè)實(shí)施例中,在MR級(jí)中的存儲(chǔ)(例如,RAM)體是與在寫回(WB)級(jí)中相同的物理實(shí)例。在描述的實(shí)施例中,在MR級(jí)中的(例如,先進(jìn)先出(FIFO))緩沖器A(例如,輸入緩沖器)與接收卸載引擎204的輸出的緩沖器相同。在一個(gè)實(shí)施例中,接收卸載引擎204的輸出的緩沖器是不同的緩沖器。卸載引擎204被示出將其輸出直接提供至緩沖器218的輸入。在一個(gè)實(shí)施例中,卸載引擎通過流水線(例如,通過流水線寄存器216的輸入)提供其輸出。在一個(gè)實(shí)施例中,可以存在旁路以繞過任意或某些上述電路,例如,在矩陣切換器208A和矩陣切換器208B之間的單獨(dú)的旁路,例如,用于圖2B中的路徑(2)。在一個(gè)實(shí)施例中,矩陣切換器208A和矩陣切換器208B之間的電路可以用作旁路,例如,通過ALU2、EX0/EX1寄存器222(如果存在)以及移位器2(如果存在),例如,而不對數(shù)據(jù)執(zhí)行除將其向前轉(zhuǎn)發(fā)外的任何操作。

在一個(gè)實(shí)施例中,處理器(例如,通過圖2A中描述的數(shù)據(jù)路徑)對第二(例如,F(xiàn)IFO)緩沖器或緩沖器集合(例如,緩沖器B226和緩沖器C228)進(jìn)行寫入并同時(shí)(例如,在時(shí)間上重疊)從第一緩沖器(例如,緩沖器A218)讀取。在一個(gè)實(shí)施例中,硬件處理器可以預(yù)處理和后處理至和/或來自卸載引擎204的數(shù)據(jù)。在公共密鑰計(jì)算中該使用的一個(gè)示例是卡拉楚巴(Karatsuba)乘法,其中中間乘法結(jié)果可以縫合在一起。另一示例是在橢圓曲線密碼(ECC)點(diǎn)加法(point addition)和點(diǎn)加倍(point doubling)中使用的公式。

在某些實(shí)施例中,處理器可以包括多個(gè)(例如,兩個(gè))(例如,矢量)指令單元(例如,并行和/或串行的)。在一個(gè)實(shí)施例中,(例如,矢量)算術(shù)邏輯單元(ALU)執(zhí)行單元與移位器執(zhí)行單元串連(例如,向其提供輸出)。在某些實(shí)施例中,這可以規(guī)避可能出現(xiàn)在并行操作中的數(shù)據(jù)(例如,結(jié)構(gòu)上的)冒險(xiǎn)。對于存儲(chǔ)(例如,RAM)體(例如,存儲(chǔ)體206)也可能發(fā)生數(shù)據(jù)(例如,結(jié)構(gòu)上的)冒險(xiǎn)。多個(gè)存儲(chǔ)體(例如,存儲(chǔ)體A和存儲(chǔ)體B)可以被(例如,同時(shí))利用,例如,其中卸載引擎204(例如,在一個(gè)實(shí)施例中的大整數(shù)乘法器)接受兩個(gè)輸入(例如,輸入操作數(shù))。這在無需在一個(gè)存儲(chǔ)體上同時(shí)讀取和/或?qū)懭氲那闆r下可以允許并行獲得和排出。例如,乘法的卡拉楚巴分解可以同時(shí)利用兩個(gè)存儲(chǔ)器寫入和三個(gè)存儲(chǔ)器讀取以完全開發(fā)在該算法中可用的并行度。描述的數(shù)據(jù)路徑包括另外多個(gè)存儲(chǔ)體(例如,存儲(chǔ)體F和存儲(chǔ)體G)。在一個(gè)實(shí)施例中,利用多個(gè)存儲(chǔ)體(例如,每個(gè)具有與其他存儲(chǔ)體的輸入端口和輸出端口分離的它自己的輸入端口和輸出端口)可以比添加附加端口至較少數(shù)量的存儲(chǔ)體更加(例如,面積)高效。在某些實(shí)施例(例如,MMP)中,多個(gè)(例如,少于全部的)存儲(chǔ)體(例如,存儲(chǔ)體F和存儲(chǔ)體G)可以用作背靠背(back-to-back)乘法的暫時(shí)儲(chǔ)存器和/或作為內(nèi)積的累加器。在一個(gè)實(shí)施例中,第一存儲(chǔ)體集合(例如,存儲(chǔ)體F和存儲(chǔ)體G)相對于第二存儲(chǔ)體集合(例如,存儲(chǔ)體A和存儲(chǔ)體B)在存儲(chǔ)容量方面較小。

源可以被路由至多個(gè)輸入端口。本文公開的數(shù)據(jù)路徑可以支持之前提到的使用示例,但是還實(shí)現(xiàn)在存儲(chǔ)(例如,RAM)體和緩沖器(例如,輸入和輸出(例如,F(xiàn)IFO)緩沖器)之間直接的并行數(shù)據(jù)移動(dòng)。在一個(gè)實(shí)施例中,處理器的數(shù)據(jù)路徑可以允許數(shù)據(jù)例如與其他操作并行地在暫時(shí)儲(chǔ)存器(例如,存儲(chǔ)體F和G)和主儲(chǔ)存器(例如,存儲(chǔ)體A和B)之間來回移動(dòng)。

在一個(gè)實(shí)施例中,例如,為了最大地開發(fā)與卸載引擎的同時(shí)獲得和排出相關(guān)的并行度,處理器可以包括支持下面的源-宿(sink)對的任一或兩者的(一個(gè)或多個(gè))數(shù)據(jù)路徑:

源(例如,存儲(chǔ)體A、B、F和G以及緩沖器A)的多個(gè)(例如,5個(gè))輸出端口中的任一個(gè)至多個(gè)ALU(例如,在圖2A-2B中的并行的ALU1和ALU2)的(例如,每一個(gè))輸入端口(例如,4個(gè)),以及

源(例如,存儲(chǔ)體A、B、F和G、緩沖器A以及ALU1和ALU2)的多個(gè)(例如,7個(gè))輸出端口中的任一個(gè)至多個(gè)宿(例如,存儲(chǔ)體A、B、F、和G、緩沖器B以及緩沖器C)的輸入端口(例如,6個(gè))。

在所指示的源-宿對中的并行移動(dòng)可以由切換器208A和切換器208B連接(例如,使能)。在一個(gè)實(shí)施例中,(一個(gè)或多個(gè))切換器被發(fā)送(一個(gè)或多個(gè))控制信號(hào)以選擇哪個(gè)或哪些輸入(例如,端口)應(yīng)當(dāng)與哪個(gè)或哪些輸出(例如,端口)連接。例如,指令可以包括(例如,作為其字段)控制信號(hào),例如,以控制哪些連接是活動(dòng)的。指令(例如,當(dāng)由處理器執(zhí)行時(shí))可以指示ALU將在輸入數(shù)據(jù)上執(zhí)行什么類型的操作。ALU1和ALU2可以同時(shí)執(zhí)行不同類型的操作。

例如用于以指令集架構(gòu)級(jí)支持?jǐn)?shù)據(jù)路徑中的并行性的一個(gè)實(shí)施例可以包括64位VLIW類型的指令,在此示例中稱為“dexec”并具有表1中的下述格式。

表1

現(xiàn)在轉(zhuǎn)向圖2B,將討論另一指令的示例。圖2B圖示了根據(jù)本公開的實(shí)施例的通過圖2A中的硬件處理器200的活動(dòng)數(shù)據(jù)路徑。該示例“dexec”指令201包括四個(gè)不同的字段(存儲(chǔ)器寫回、乘法器緩沖器輸入、指令的ALU1部分以及指令的ALU2部分)。不同的虛線指示該指令經(jīng)由切換器208A和208B引起(例如,來自由處理器對指令的執(zhí)行)的不同的連接。例如,在存儲(chǔ)器寫回字段的第一部分中,a3[1]=b0[3]可以指存儲(chǔ)體B中第零陣列的第四元素被寫入至存儲(chǔ)體A中第三陣列的第二元素。例如,始于體B的第四元素的矢量可以被寫入(例如,拷貝)至存儲(chǔ)體A中,其始于存儲(chǔ)體A中的第二元素?!?”可以指示在字段中沒有值,例如,在特定示例中并不利用操作字段。在一個(gè)實(shí)施例中,處理器并不包括暫停(例如,在執(zhí)行流水線中)。暫停可以是不操作(NOP)指令、氣泡(bubble)等。暫??梢允侵甘噶績?nèi)暫停,例如,當(dāng)矢量操作正在發(fā)生時(shí)的暫停,例如,在執(zhí)行級(jí)0或執(zhí)行級(jí)1中。

在圖2B中示出的指令可以是在解決指令內(nèi)和/或相繼的指令間的潛在的數(shù)據(jù)冒險(xiǎn)的同時(shí)在多個(gè)源和目的地操作數(shù)上操作的指令的示例。在高級(jí)別,描述的指令包括分別由ALU1和ALU2促進(jìn)的兩個(gè)算術(shù)操作,具有對用于硬件卸載引擎(例如,乘法器)的操作數(shù)進(jìn)行排隊(duì)的一個(gè)實(shí)例以及以四個(gè)存儲(chǔ)體A、B、F和G為目標(biāo)的數(shù)據(jù)移動(dòng)操作的三個(gè)實(shí)例。這些操作(例如,順序的)的示例可以為:

ALU1:源自存儲(chǔ)體A的矢量操作數(shù)a3[5]經(jīng)歷位旋轉(zhuǎn)并拷貝至輸出,其中輸出操作數(shù)在它的最高有效位(MSB)部分具有額外數(shù)據(jù)(例如,四字)。ALU1的輸出的目的地表達(dá)在該指令的其他部分中。

ALU2:ALU2獲得單個(gè)操作數(shù),它是源自硬件卸載引擎(例如,乘法器)的輸出的緩沖器A的輸出。該操作可以將此操作數(shù)拷貝至ALU2的輸出,例如,在MSB部分中添加附加數(shù)據(jù)(例如,四字)之后。(這最后的操作可以由“+1”指定)。該示例指令并不應(yīng)用ALU1和ALU2的二元算符能力,而代替地在一元操作數(shù)的示例中。ALU可以執(zhí)行二元和/或一元操作。

硬件乘法器卸載引擎(例如,乘法器):乘法器可以從ALU1的輸出(例如,如上文所解釋的)和源自存儲(chǔ)體F的矢量操作數(shù)f[1]獲得它的操作數(shù)(例如,從緩沖器B和緩沖器C)。

存儲(chǔ)器拷貝操作(從左至右閱讀):

(1)a2[1]=b0[3]是將(例如,矢量)操作數(shù)b0[3]拷貝至a2[1]。

(2)b3[2]=ALU2是將ALU2的輸出(例如,上文所解釋的)拷貝至存儲(chǔ)體B中的(例如,矢量)操作數(shù)b3[2]。

(3)g[0]=ALU2也是將ALU2的輸出(例如,作為第二目的地操作數(shù))拷貝至存儲(chǔ)體G中的(例如,矢量)操作數(shù)g[0]。某些實(shí)施例可以允許至存儲(chǔ)體的第四數(shù)據(jù)拷貝操作,但是該選項(xiàng)并沒有在該示例指令中使用。

作為另一示例,硬件處理器可以包括激活數(shù)據(jù)路徑以對存儲(chǔ)在存儲(chǔ)體A中大于卸載引擎(例如,乘法器)的寬度(w)的數(shù)進(jìn)行平方。例如,存儲(chǔ)在存儲(chǔ)體A中的數(shù)可以是乘法器卸載引擎的大小的兩倍的矢量。在該示例中,作為步驟1,指令可以被接收以將半矢量(half vector)從體A的地址a發(fā)送至乘法器緩沖器B和C(例如,乘法一)。作為步驟2,指令可以將半矢量從體A的地址a+寬度(w)發(fā)送至乘法器緩沖器B和C(例如,乘法二)。作為步驟3,指令可以將兩個(gè)半矢量從體A發(fā)送至乘法器卸載引擎,在過程中移位一(例如,乘法3)。作為步驟4,硬件處理器可以將乘法器卸載引擎的輸出(例如,乘法1的結(jié)果)存儲(chǔ)至存儲(chǔ)體B中在地址[b,b+2w]處。作為步驟5,硬件處理器可以將乘法器卸載引擎的輸出(例如,乘法2的結(jié)果)存儲(chǔ)至體B中在地址[b+2w,b+4w]處。作為步驟6,硬件處理器可以在地址[b+w,b+3w]之間讀取體B,發(fā)送數(shù)據(jù)通過ALU以將它加至乘法器卸載引擎的輸出(例如,乘法3的結(jié)果),并將其存儲(chǔ)在體B中在地址[b+w,b+3w]處。

在步驟5和6之間,存在寫入后讀取并且該邏輯可以防止那里的數(shù)據(jù)冒險(xiǎn)。在步驟6內(nèi),在相同指令內(nèi)可以存在讀取和寫入的(例如,完美)重疊。在一個(gè)實(shí)施例中,步驟4和步驟1被合并(merge)成單個(gè)指令并同時(shí)運(yùn)行。在一個(gè)實(shí)施例中,步驟5和步驟2被合并成單個(gè)指令并同時(shí)運(yùn)行。在一個(gè)實(shí)施例中,步驟6和步驟3被合并成單個(gè)指令并同時(shí)運(yùn)行。本文的某些實(shí)施例為流水線化的處理器提供數(shù)據(jù)冒險(xiǎn)解決邏輯。作為MMP的示例,寫入后讀取(RAW)冒險(xiǎn)可以是可應(yīng)用的,這可能在當(dāng)前導(dǎo)指令寫入至相同數(shù)據(jù)儲(chǔ)存器(例如,存儲(chǔ)體)的重疊地址(例如,地址范圍)并且滯后指令從中讀取時(shí)在兩個(gè)相繼的矢量指令之間發(fā)生。在某些實(shí)施例中,暫停(例如,NOP)并不被插入矢量內(nèi)(例如,在矢量的中間)指令執(zhí)行,例如,歸因于涉及將(一個(gè)或多個(gè))最低有效位(LSB)從EX0轉(zhuǎn)發(fā)至EX1級(jí)的數(shù)據(jù)路徑的向右移位操作。在一個(gè)實(shí)施例中,矢量操作可以從最低有效元素(例如,四字)至最高有效元素(例如,四字),例如,以使得執(zhí)行向右移位操作,該移位器從矢量中的下一元素(例如,四字)獲取LSB。在圖2A-2B中的數(shù)據(jù)路徑中,這對應(yīng)于從EX0級(jí)獲取所轉(zhuǎn)發(fā)的LSB并繞過EX0/EX1流水線。如果在某些實(shí)施例中插入暫停,例如,在執(zhí)行向右移位的矢量操作的中間插入MR/EX流水線中,則該EX1級(jí)可能由于缺乏從EX0級(jí)轉(zhuǎn)發(fā)的有效LSB而不向前進(jìn)行,例如,在冒險(xiǎn)狀況將持續(xù)的情況下導(dǎo)致死鎖。

由于上文提到的在插入暫停中的限制,RAW數(shù)據(jù)冒險(xiǎn)狀況(例如,在MMP中)的檢測可以在該指令被發(fā)出至矢量分解單元之前在解碼器中完成,例如,通過針對在數(shù)據(jù)路徑中的待決寫入的地址范圍檢查指令的地址范圍。在某些實(shí)施例中,在從多個(gè)矢量指令至多個(gè)不同的存儲(chǔ)體的數(shù)據(jù)路徑中可能存在待決寫入。本公開的某些實(shí)施例在不利用矢量內(nèi)暫停(例如,NOP中斷)的情況下防止數(shù)據(jù)路徑中的冒險(xiǎn)。在一個(gè)實(shí)施例中,在不檢查(例如,RAW)數(shù)據(jù)冒險(xiǎn)的情況下由解碼器發(fā)出矢量指令??梢栽趶拇鎯?chǔ)體讀取之前檢查數(shù)據(jù)冒險(xiǎn),例如,在EC/MR流水線級(jí)。該檢查可以在矢量的每個(gè)元素(例如,字)到達(dá)某一級(jí)(例如,EC/MR級(jí))時(shí)在其上完成(例如,通過錯(cuò)誤檢查單元)。該檢查可以檢查在該數(shù)據(jù)路徑的其余部分沒有待決寫入是將讀取的(一個(gè)或多個(gè))立即地址。如果檢測到(例如,RAW)數(shù)據(jù)冒險(xiǎn),處理器可以在那里插入矢量間暫停(例如,NOP)而并不插入矢量內(nèi)暫停(例如,NOP)。在更具侵略性的指令調(diào)度中,較早調(diào)度的尾隨指令可以檢測到先前指令的流水線并未完成并可能導(dǎo)致冒險(xiǎn)。如果該流水線最多為n個(gè)循環(huán),那么n個(gè)地址比較器可以被利用以檢測該冒險(xiǎn),例如,與執(zhí)行幾乎重疊的地址范圍的檢查形成對照,當(dāng)該范圍包括存儲(chǔ)器邊界和存儲(chǔ)器回繞時(shí)這可能需要具有副作用的實(shí)現(xiàn)。

圖3圖示了根據(jù)本公開的實(shí)施例的通過數(shù)據(jù)路徑300轉(zhuǎn)移的多個(gè)矢量,例如,作為流水線快照。數(shù)據(jù)冒險(xiǎn)解決(例如,邏輯)可以包括下面的任一個(gè)或全部。在一個(gè)實(shí)施例(a)中,數(shù)據(jù)冒險(xiǎn)解決包括使得流水線中的地址僅增加1,例如,在矢量向右移動(dòng)時(shí)。這樣,如果在將(例如,元素)x發(fā)布至流水線中時(shí),x=m-d<m,其中d是正整數(shù),那么在兩個(gè)矢量向前行進(jìn)時(shí)步幅d可以被一致地維持。具體地,來自矢量x的讀取地址可以繼續(xù)落后來自矢量m的寫入地址距離d。在一個(gè)實(shí)施例(b)中,如果,在發(fā)布x時(shí),x=m+j+d>m+j,其中d是正整數(shù),那么當(dāng)兩個(gè)矢量向前行進(jìn)時(shí)步幅d可以被一貫地維持。具體地,來自矢量x的讀取地址可以(例如,總是)在來自流水線中活動(dòng)的矢量m的寫入地址范圍之外。在一個(gè)實(shí)施例中,歸因于地址檢查,如果(例如,并且只有)上面的兩種情況(a)和(b)之一命中d≥1,則矢量x可以移動(dòng)。如果這兩種情況都不適用,則(例如,矢量間)暫停(例如,NOP)可以被插入,例如,直到最終要么(a)變得適用于d=1或者矢量M消失。在一個(gè)實(shí)施例(d)中,如果存在另一矢量,例如,拖著矢量m的矢量n,則矢量x的向前行進(jìn)可以進(jìn)一步服從:x<n或者x>n+k。如果二者都不適用,(例如,矢量間)暫停(例如,NOP)可以被插入以允許矢量m和n行進(jìn),例如,直到矢量n位于流水線的末尾。然后,(a),(b)和(c)可以遞歸地適用于矢量n。在一個(gè)實(shí)施例(e)中,如果在流水線中存在尾隨矢量n的更多的矢量,(d)可以是遞歸地適用的。在一個(gè)實(shí)施例中,地址檢查可以包括檢查是否(j+k+2)數(shù)量的比較器的任一個(gè)指示m的地址等于正被讀取的x的地址。

本公開的某些實(shí)施例可以不檢查任何范圍,例如,它可以僅對照手頭上的單個(gè)讀取地址檢查流水線中的待決寫入地址的相等性。本公開的某些實(shí)施例可以允許數(shù)據(jù)冒險(xiǎn)解決邏輯不檢查是否待決寫入屬于一個(gè)矢量指令,例如,在不適用動(dòng)態(tài)矢量追蹤邏輯的情況下。

本文的某些實(shí)施例可以實(shí)現(xiàn)對卸載引擎的100%或大約100%的利用。本文的某些實(shí)施例提供緊密耦合用于由兩個(gè)不同的處理引擎(例如,處理器核,或者,作為另外的示例,其執(zhí)行單元)通過(例如,VLIW)指令集的異構(gòu)并行處理,例如,與提供緊密耦合的統(tǒng)一處理(例如,如在單指令、多數(shù)據(jù)(SIMD)實(shí)現(xiàn)中)或者其中僅一個(gè)處理組(例如,總體)忙于同構(gòu)處理而其他在等待(例如,如在圖形處理單元(GPGPU)計(jì)算上的通用計(jì)算中)的非常寬松地耦合的執(zhí)行的并行處理架構(gòu)形成對照。相比之下,在本文的某些實(shí)施例中,兩個(gè)處理元件(例如,其中一個(gè)是以與該系統(tǒng)中的處理器不同的速度運(yùn)行的卸載引擎(或其他處理器))在指令級(jí)別合作以例如與SIMD結(jié)構(gòu)相對地用具有VLIW結(jié)構(gòu)的指令集執(zhí)行給定的任務(wù)。

圖4圖示了根據(jù)本公開的實(shí)施例的流程圖400。流程圖400包括基于控制信號(hào)用切換器將硬件處理器的并行的多個(gè)執(zhí)行單元的輸入連接至第一緩沖器以及多個(gè)存儲(chǔ)體的輸出并且將多個(gè)存儲(chǔ)體和并行的多個(gè)第二緩沖器的輸入連接至第一緩沖器、多個(gè)存儲(chǔ)體以及多個(gè)執(zhí)行單元的輸出402,并將數(shù)據(jù)從多個(gè)第二緩沖器的輸出提供至卸載引擎的輸入404。處理器可以包括根據(jù)本文的流程圖操作的邏輯,例如,有限狀態(tài)機(jī)。

在一個(gè)實(shí)施例中,硬件處理器包括并行的多個(gè)(例如,矢量)執(zhí)行單元,用于將多個(gè)執(zhí)行單元的輸入連接至第一緩沖器和多個(gè)存儲(chǔ)體的輸出并且將多個(gè)存儲(chǔ)體和并行的多個(gè)第二緩沖器的輸入連接至第一緩沖器、多個(gè)存儲(chǔ)體和多個(gè)執(zhí)行單元的輸出的切換器,以及具有連接至多個(gè)第二緩沖器的輸出的輸入的卸載引擎。卸載引擎的輸出可以連接至第一緩沖器的輸入。硬件處理器可以進(jìn)一步包括數(shù)據(jù)冒險(xiǎn)解決邏輯以同時(shí)從第一緩沖器的輸出讀取并向多個(gè)第二緩沖器的輸入寫入。數(shù)據(jù)冒險(xiǎn)解決邏輯可以不插入(例如,矢量內(nèi))暫停。多個(gè)(例如,矢量)執(zhí)行單元可以以第一時(shí)鐘速度執(zhí)行,并且卸載引擎可以以第二、更快(或更慢)的時(shí)鐘速度執(zhí)行。執(zhí)行單元可以包括移位寄存器。多個(gè)執(zhí)行單元可以均包括移位寄存器。第一緩沖器和多個(gè)第二緩沖器可以是先入先出(FIFO)緩沖器。多個(gè)存儲(chǔ)體可以是四個(gè)或更多存儲(chǔ)體,并且每個(gè)存儲(chǔ)體可以包括與其他存儲(chǔ)體的輸入端口和輸出端口分離的輸入端口和輸出端口。

在另一實(shí)施例中,一種方法包括基于控制信號(hào)用切換器將硬件處理器的并行的多個(gè)執(zhí)行單元的輸入連接至第一緩沖器以及多個(gè)存儲(chǔ)體的輸出并且將多個(gè)存儲(chǔ)體和并行的多個(gè)第二緩沖器的輸入連接至第一緩沖器、多個(gè)存儲(chǔ)體以及多個(gè)執(zhí)行單元的輸出,并將數(shù)據(jù)從多個(gè)第二緩沖器的輸出提供至卸載引擎的輸入。所述方法可以包括將數(shù)據(jù)從卸載引擎的輸出提供至第一緩沖器的輸入。所述方法可以包括同時(shí)從第一緩沖器的輸出讀取并且向多個(gè)第二緩沖器的輸入寫入。所述方法可以包括不插入暫停,例如,將由執(zhí)行單元執(zhí)行的。所述方法可以進(jìn)一步包括多個(gè)執(zhí)行單元以第一時(shí)鐘速度執(zhí)行并且卸載引擎以第二、更快(或更慢)的時(shí)鐘速度執(zhí)行。多個(gè)執(zhí)行單元可以均包括移位寄存器。多個(gè)存儲(chǔ)體是四個(gè)或更多存儲(chǔ)體并且每個(gè)存儲(chǔ)體包括與其他存儲(chǔ)體的輸入端口和輸出端口分離的輸入端口和輸出端口。第一緩沖器和多個(gè)第二緩沖器可以是先入先出(FIFO)緩沖器。

在再一實(shí)施例中,硬件處理器包括硬件解碼器以解碼指令、硬件執(zhí)行單元以執(zhí)行指令以:基于控制信號(hào)將硬件處理器的并行的多個(gè)執(zhí)行單元的輸入連接至第一緩沖器以及多個(gè)存儲(chǔ)體的輸出并且將多個(gè)存儲(chǔ)體和并行的多個(gè)第二緩沖器的輸入連接至第一緩沖器、多個(gè)存儲(chǔ)體以及多個(gè)執(zhí)行單元的輸出,并將數(shù)據(jù)從多個(gè)第二緩沖器的輸出提供至卸載引擎的輸入。卸載引擎的輸出可以連接至第一緩沖器的輸入。硬件執(zhí)行單元可以執(zhí)行指令以導(dǎo)致同時(shí)的從第一緩沖器的輸出讀取并且向多個(gè)第二緩沖器的輸入寫入。硬件執(zhí)行單元可以執(zhí)行指令而不插入暫停。多個(gè)執(zhí)行單元可以以第一時(shí)鐘速度執(zhí)行,并且卸載引擎可以以第二、更快(或更慢)的時(shí)鐘速度執(zhí)行。多個(gè)執(zhí)行單元可以均包括移位寄存器。第一緩沖器和多個(gè)第二緩沖器可以是先入先出(FIFO)緩沖器。多個(gè)存儲(chǔ)體可以是四個(gè)或更多存儲(chǔ)體,并且每個(gè)存儲(chǔ)體可以包括與其他存儲(chǔ)體的輸入端口和輸出端口分離的輸入端口和輸出端口。

在另一實(shí)施例中,一種硬件裝置包括并行的多個(gè)執(zhí)行單元,將多個(gè)執(zhí)行單元的輸入連接至第一緩沖器和多個(gè)存儲(chǔ)體的輸出并且將多個(gè)存儲(chǔ)體和并行的多個(gè)第二緩沖器的輸入連接至第一緩沖器、多個(gè)存儲(chǔ)體和多個(gè)執(zhí)行單元的輸出的部件,以及具有連接至多個(gè)第二緩沖器的輸出的輸入的卸載引擎。

在再一實(shí)施例中,一種裝置包括存儲(chǔ)代碼的數(shù)據(jù)存儲(chǔ)設(shè)備,所述代碼當(dāng)被硬件處理器執(zhí)行時(shí)使硬件處理器執(zhí)行本文公開的任何方法。

指令集可以包括一個(gè)或多個(gè)指令格式。給定指令格式可以定義各種字段(例如,位的數(shù)量,位的位置)以除了其他之外尤其指定將執(zhí)行的操作(例如,操作碼)和該操作將在其上執(zhí)行的(一個(gè)或多個(gè))操作數(shù)和/或(一個(gè)或多個(gè))其他數(shù)據(jù)字段(例如,掩碼(mask))。某些指令格式通過指令模板(或者子格式)的定義被進(jìn)一步分解。例如,給定指令格式的指令模板可以被定義為具有指令格式的字段的不同子集(所包括的字段典型地以相同的次序,但是至少某些具有不同的位的位置,因?yàn)榘ǜ俚淖侄?和/或被定義為具有不同解釋的給定字段。因此,ISA的每個(gè)指令使用給定指令格式(并且,如果被定義,在該指令格式的指令模板中的給定的一個(gè)中)來表達(dá)并包括用于指定操作和操作數(shù)的字段。例如,示例性ADD指令具有特定操作碼和指令格式,所述指令格式包括指定該操作碼的操作碼字段和選擇操作數(shù)(源1(source1)/目的地和源2(source2))的操作數(shù)字段;并且在指令流中該ADD指令的出現(xiàn)將在選擇特定操作數(shù)的操作數(shù)字段中具有特定的內(nèi)容。稱為高級(jí)矢量擴(kuò)展(AVX)(AVX1和AVX2)并使用矢量擴(kuò)展(VEX)編碼方案的SIMD擴(kuò)展的集合已經(jīng)被發(fā)布和/或出版(例如,參見和IA-32架構(gòu)軟件開發(fā)者手冊,2015年4月;并且參見架構(gòu)指令集擴(kuò)展編程參考,2014年10月)。

示例性指令格式

本文描述的(一個(gè)或多個(gè))指令的實(shí)施例可以以不同格式來體現(xiàn)。此外,下面詳述了示例性的系統(tǒng)、架構(gòu)和流水線。(一個(gè)或多個(gè))指令的實(shí)施例可以在這樣的系統(tǒng)、架構(gòu)和流水線上執(zhí)行,但并不限于所詳述的那些。

通用矢量友好的指令格式

矢量友好的指令格式是適合于矢量指令的指令格式(例如,存在對矢量操作特定的某些字段)。雖然描述了其中通過矢量友好的指令格式支持矢量和標(biāo)量操作兩者的實(shí)施例,但可替換的實(shí)施例僅使用矢量友好的指令格式的矢量操作。

圖5A-5B是圖示了根據(jù)本公開的實(shí)施例的通用矢量友好的指令格式及其指令模板的框圖。圖5A是圖示了根據(jù)本公開的實(shí)施例的通用矢量友好的指令格式及其A類指令模板的框圖;而圖5B是圖示了根據(jù)本公開的實(shí)施例的通用矢量友好的指令格式及其B類指令模板的框圖。具體地,針對通用矢量友好的指令格式500定義了A類和B類指令模板,其兩者都包括非存儲(chǔ)器訪問505指令模板和存儲(chǔ)器訪問520指令模板。在矢量友好的指令格式的上下文中的術(shù)語通用是指該指令格式不被束縛于任何特定指令集。

雖然將描述其中矢量友好的指令格式支持下述內(nèi)容的本公開的實(shí)施例:具有32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或大小)的64字節(jié)矢量操作數(shù)長度(或大小)(并且因此,包括16個(gè)雙字大小元素或可替換地8個(gè)四字大小元素的64字節(jié)矢量);具有16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或大小)的64字節(jié)矢量操作數(shù)長度(或大小);具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或大小)的32字節(jié)矢量操作數(shù)長度(或大小);以及具有32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或大小)的16字節(jié)矢量操作數(shù)長度(或大小);但可替換的實(shí)施例可以支持具有更多、更少或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)的更多、更少和/或不同的矢量操作數(shù)大小(例如,256字節(jié)矢量操作數(shù))。

硬件處理器(例如,具有乘法器卸載引擎的MMP硬件處理器)可以執(zhí)行多精度計(jì)算。硬件處理器可以使128、256、512、1024等位的矢量移位,例如,在單個(gè)(例如,VLIW)指令中執(zhí)行將(例如,非常大的)整數(shù)除以2或者將(例如,非常大的)整數(shù)乘以2。

圖5A中的A類指令模板包括:1)在非存儲(chǔ)器訪問505指令模板內(nèi)示出非存儲(chǔ)器訪問、完全舍入控制類型操作510指令模板和非存儲(chǔ)器訪問、數(shù)據(jù)變換類型操作515指令模板;以及2)在存儲(chǔ)器訪問520指令模板內(nèi)示出存儲(chǔ)器訪問、暫時(shí)525指令模板和存儲(chǔ)器訪問、非暫時(shí)530指令模板。圖5B中的B類指令模板包括:1)在非存儲(chǔ)器訪問505指令模板內(nèi)示出非存儲(chǔ)器訪問、寫入掩蔽控制、部分舍入控制類型操作512指令模板和非存儲(chǔ)器訪問、寫入掩蔽控制、vsize類型操作517指令模板;以及2)在存儲(chǔ)器訪問520指令模板內(nèi)示出存儲(chǔ)器訪問、寫入掩蔽控制527指令模板。

通用矢量友好的指令格式500包括以圖5A-5B中圖示的次序在下文列出的下述字段。

格式字段540——在該字段中的特定值(指令格式標(biāo)識(shí)符值)唯一地標(biāo)識(shí)矢量友好的指令格式,以及因此在指令流中以矢量友好的指令格式的指令的出現(xiàn)。這樣,在對于僅具有通用矢量友好的指令格式的指令集而言該字段并不是需要的意義上,該字段是可選的。

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

寄存器索引字段544——其內(nèi)容直接地或通過地址生成而指定源和目的地操作數(shù)的位置,它們在寄存器中或存儲(chǔ)器中。這些包括足夠的位數(shù)以從PxQ(例如,32x512、16x128、32x1024、64x1024)寄存器文件中選擇N個(gè)寄存器。雖然在一個(gè)實(shí)施例中N可以多達(dá)三個(gè)源和一個(gè)目的地寄存器,但可替換實(shí)施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多達(dá)兩個(gè)源,其中這些源之一還用作目的地,可以支持多達(dá)三個(gè)源,其中這些源之一還用作目的地,可以支持多達(dá)兩個(gè)源和一個(gè)目的地)。

修改器字段546——其內(nèi)容區(qū)分指定存儲(chǔ)器訪問的以通用矢量指令格式的指令的出現(xiàn)與不指定存儲(chǔ)器訪問的那些;也就是說,將非存儲(chǔ)器訪問505指令模板與存儲(chǔ)器訪問520指令模板進(jìn)行區(qū)分。存儲(chǔ)器訪問操作讀取和/或?qū)懭胫链鎯?chǔ)器層級(jí)(在某些情況下使用寄存器中的值指定源和/或目的地地址),而非存儲(chǔ)器訪問操作不這樣做(例如,源和目的地是寄存器)。雖然在一個(gè)實(shí)施例中該字段還在三個(gè)不同的方式之間進(jìn)行選擇以執(zhí)行存儲(chǔ)器地址計(jì)算,但可替換實(shí)施例可以支持更多、更少或不同的方式以執(zhí)行存儲(chǔ)器地址計(jì)算。

擴(kuò)增操作字段550——其內(nèi)容區(qū)分除了基礎(chǔ)操作之外還將執(zhí)行的各種不同操作中的哪一個(gè)。該字段是上下文特定的。在本公開的一個(gè)實(shí)施例中,該字段被劃分成類別字段568、阿爾法(alpha)字段552和貝塔(beta)字段554。擴(kuò)增操作字段550允許普通操作組將在單個(gè)指令而不是2、3或4個(gè)指令中執(zhí)行。

縮放(scale)字段560——其內(nèi)容慮及用于存儲(chǔ)器地址生成的索引字段的內(nèi)容的縮放(例如,對于使用2scale*索引+基礎(chǔ)的地址生成)。

位移字段562A——其內(nèi)容被用作存儲(chǔ)器地址生成的部分(例如,對于使用2acale*索引+基礎(chǔ)+位移的地址生成)。

位移因子字段562B(注意位移字段562A直接并置在位移因子字段562B之上指示使用一個(gè)或另一個(gè))——其內(nèi)容被用作地址生成的部分;它指定將按存儲(chǔ)器訪問的大小(N)縮放的位移因子——其中N是存儲(chǔ)器訪問中的字節(jié)數(shù)(例如,對于使用2scale*索引+基礎(chǔ)+縮放的位移的地址生成)。冗余的低階位被忽略,并因此,位移因子字段的內(nèi)容與存儲(chǔ)器操作數(shù)總大小(N)相乘以便生成將在計(jì)算有效地址中使用的最終位移。N的值由處理器硬件在運(yùn)行時(shí)基于完全操作碼字段574(本文稍后描述)和數(shù)據(jù)操縱字段554C確定。在它們并不用于非存儲(chǔ)器訪問505指令模板和/或不同的實(shí)施例可以實(shí)現(xiàn)二者中僅一個(gè)或二者都不實(shí)現(xiàn)的意義上,位移字段562A和位移因子字段562B是可選的。

數(shù)據(jù)元素寬度字段564——其內(nèi)容區(qū)分多個(gè)數(shù)據(jù)元素寬度中的哪一個(gè)將被使用(在某些實(shí)施例中,針對所有指令;在其他實(shí)施例中,僅針對部分指令)。在僅支持一個(gè)數(shù)據(jù)元素寬度和/或使用操作碼的某些方面支持多個(gè)數(shù)據(jù)元素寬度的情況下并不需要該字段的意義上,該字段是可選的。

寫入掩蔽字段570——其內(nèi)容在每個(gè)數(shù)據(jù)元素位置的基礎(chǔ)上控制在目的地矢量操作數(shù)中的該數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴(kuò)增操作的結(jié)果。A類指令模板支持合并寫入掩蔽,而B類指令模板支持合并和歸零寫入掩蔽兩者。當(dāng)合并時(shí),矢量掩蔽允許保護(hù)目的地中的任何元素集合在(由基礎(chǔ)操作和擴(kuò)增操作指定的)任何操作的執(zhí)行期間免于被更新;在另一實(shí)施例中,保留其中對應(yīng)掩蔽位具有0的目的地的每個(gè)元素的舊值。作為對照,當(dāng)歸零矢量掩蔽允許目的地中的任何元素集合在(由基礎(chǔ)操作和擴(kuò)增操作指定的)任何操作的執(zhí)行期間歸零時(shí);在一個(gè)實(shí)施例中,當(dāng)對應(yīng)掩蔽位具有0值時(shí),目的地的元素被設(shè)置成0。該功能的子集是控制正被執(zhí)行的操作的矢量長度(也就是說,正被修改的元素的跨度,從第一個(gè)至最后一個(gè))的能力;然而,被修改的元素是連續(xù)的并不是必要的。因此,寫入掩蔽字段570慮及部分矢量操作,包括加載、存儲(chǔ)、算術(shù)、邏輯等等。雖然描述了其中寫入掩蔽字段570的內(nèi)容選擇多個(gè)寫入掩蔽寄存器中的包含將使用的寫入掩蔽的一個(gè)(并且因此寫入掩蔽字段570的內(nèi)容間接標(biāo)識(shí)將執(zhí)行的掩蔽)的本公開的實(shí)施例,但可替換的實(shí)施例替換地或附加地允許掩蔽寫入字段570的內(nèi)容直接指定將執(zhí)行的掩蔽。

立即(immediate)字段572——其內(nèi)容慮及對立即的規(guī)定。在該字段在不支持立即的通用矢量友好的格式的實(shí)現(xiàn)中不存在并且在不使用立即的指令中不存在的意義上,該字段是可選的。

類別字段568——其內(nèi)容區(qū)分不同的指令類別。參考圖5A-B,該字段的內(nèi)容在A類和B類指令之間進(jìn)行選擇。在圖5A-B中,圓角方形用于指示在字段中存在特定值(例如,對于類別字段568在圖5A-B中分別為A類568A和B類568B)。

A類的指令模板

在A類的非存儲(chǔ)器訪問505指令模板的情況下,阿爾法字段552被解釋為RS字段552A,其內(nèi)容區(qū)分不同的擴(kuò)增操作類型中的哪一種將被執(zhí)行(例如,針對非存儲(chǔ)器訪問、舍入類型操作510和非存儲(chǔ)器訪問、數(shù)據(jù)變換類型操作515指令模板分別指定舍入552A.1和數(shù)據(jù)變換552A.2),而貝塔字段554區(qū)分該指定類型的操作中的哪一個(gè)將被執(zhí)行。在非存儲(chǔ)器訪問505指令模板中,不存在縮放字段560、位移字段562A以及位移縮放字段562B。

非存儲(chǔ)器訪問指令模板——完全舍入控制類型操作

在非存儲(chǔ)器訪問完全舍入控制類型操作510指令模板中,貝塔字段554被解釋為舍入控制字段554A,其(一個(gè)或多個(gè))內(nèi)容提供靜態(tài)舍入。雖然在本公開描述的實(shí)施例中舍入控制字段554A包括抑制所有浮點(diǎn)異常(SAE)字段556以及舍入操作控制字段558,但可替換的實(shí)施例可以支持可以將這些概念編碼到相同的字段中或者僅具有這些概念/字段中的一個(gè)或另一個(gè)(例如,可以僅具有舍入操作控制字段558)。

SAE字段556——其內(nèi)容區(qū)分是否禁用異常事件報(bào)告;當(dāng)SAE字段556的內(nèi)容指示抑制被啟用時(shí),給定指令并不報(bào)告任何種類的浮點(diǎn)異常標(biāo)記并且不引起任何浮點(diǎn)異常處理機(jī)(handler)。

舍入操作控制字段558——其內(nèi)容區(qū)分要執(zhí)行一組舍入操作中的哪一個(gè)(例如,向上舍入、向下舍入、向零舍入以及向最近舍入)。因此,舍入操作控制字段558慮及在每個(gè)指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本公開的一個(gè)實(shí)施例中,舍入操作控制字段550的內(nèi)容超越(override)該寄存器值。

非存儲(chǔ)器訪問指令模板——數(shù)據(jù)變換類型操作

在非存儲(chǔ)器訪問數(shù)據(jù)變換類型操作515指令模板中,貝塔字段554被解釋為數(shù)據(jù)變換字段554B,其內(nèi)容區(qū)分多個(gè)數(shù)據(jù)變換中的哪一個(gè)將被執(zhí)行(例如,無數(shù)據(jù)變換、拌和(swizzle)、廣播)。

在A類的存儲(chǔ)器訪問520指令模板的情況下,阿爾法字段552被解釋為逐出提示字段552B,其內(nèi)容區(qū)分哪一個(gè)逐出提示將被使用(在圖5A中,針對存儲(chǔ)器訪問、暫時(shí)525指令模板和存儲(chǔ)器訪問、非暫時(shí)530指令模板分別指定暫時(shí)552B.1和非暫時(shí)552B.2),而貝塔字段554被解釋為數(shù)據(jù)操縱字段554C,其內(nèi)容區(qū)分多個(gè)數(shù)據(jù)操縱操作(還稱為基元(primitive))中的哪一個(gè)將被執(zhí)行(例如,無操縱;廣播;源的上轉(zhuǎn)換;以及目的地的下轉(zhuǎn)換)。該存儲(chǔ)器訪問520指令模板包括縮放字段560以及可選地位移字段562A或位移縮放字段562B。

在轉(zhuǎn)換的支持下,矢量存儲(chǔ)器指令執(zhí)行從存儲(chǔ)器的矢量加載和向存儲(chǔ)器的矢量存儲(chǔ)。關(guān)于常規(guī)矢量指令,矢量存儲(chǔ)器指令以數(shù)據(jù)元素方面的方式從/至存儲(chǔ)器轉(zhuǎn)移數(shù)據(jù),其中被實(shí)際轉(zhuǎn)移的元素由被選為寫入掩蔽的矢量掩蔽的內(nèi)容指定。

存儲(chǔ)器訪問指令模板——暫時(shí)

暫時(shí)數(shù)據(jù)是可能被重新使用得足夠快以受益于高速緩存的數(shù)據(jù)。然而,這是一種提示,并且不同的處理器可以以不同的方式實(shí)現(xiàn)它,包括完全忽略該提示。

存儲(chǔ)器訪問指令模板——非暫時(shí)

非暫時(shí)數(shù)據(jù)是不太可能被足夠快地重新使用以受益于高速緩存在一級(jí)高速緩存中并且應(yīng)當(dāng)被給予針對逐出的優(yōu)先權(quán)的數(shù)據(jù)。然而,這是一種提示,并且不同的處理器可以以不同的方式實(shí)現(xiàn)它,包括完全忽略該提示。

B類的指令模板

在B類的指令模版的情況下,阿爾法字段552被解釋為寫入掩蔽控制(Z)字段552C,其內(nèi)容區(qū)分由寫入掩蔽字段570控制的寫入掩蔽應(yīng)當(dāng)為合并還是歸零。

在B類的非存儲(chǔ)器訪問505指令模版的情況下,貝塔字段554的部分被解釋為RL字段557A,其內(nèi)容區(qū)分不同擴(kuò)增操作類型中的哪一個(gè)將被執(zhí)行(例如,針對非存儲(chǔ)器訪問、寫入掩蔽控制、部分舍入控制類型操作512指令模版和非存儲(chǔ)器訪問、寫入掩蔽控制、VSIZE類型操作517指令模版分別指定舍入557A.1和矢量長度(VSIZE)557A.2),而貝塔字段554的其余部分區(qū)分要執(zhí)行指定的類型的操作的哪一個(gè)。在非存儲(chǔ)器訪問505指令模板中,縮放字段560、位移字段562A以及位移縮放字段562B不存在。

在非存儲(chǔ)器訪問、寫入掩蔽控制、部分舍入控制類型操作510指令模板中,貝塔字段554的其余部分被解釋為舍入操作字段559A并且異常事件報(bào)告被禁用(給定的指令并不報(bào)告任何種類的浮點(diǎn)異常標(biāo)記并且不引起任何浮點(diǎn)異常處理機(jī))。

舍入操作控制字段559A——正如舍入操作控制字段558,其內(nèi)容區(qū)分要執(zhí)行一組舍入操作中的哪一個(gè)(例如,向上舍入、向下舍入、向零舍入以及向最近舍入)。因此,舍入操作控制字段559A慮及在每個(gè)指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本公開的一個(gè)實(shí)施例中,舍入操作控制字段550的內(nèi)容超越該寄存器值。

在非存儲(chǔ)器訪問、寫入掩蔽控制、VSIZE類型操作517指令模板中,貝塔字段554的其余部分被解釋為矢量長度字段559B,其內(nèi)容區(qū)分將在多個(gè)數(shù)據(jù)矢量長度中的哪一個(gè)上執(zhí)行(例如,128、256、或者512字節(jié))。

在B類的存儲(chǔ)器訪問520指令模板的情況下,貝塔字段554的部分被解釋為廣播字段557B,其內(nèi)容區(qū)分廣播類型數(shù)據(jù)操縱操作是否將被執(zhí)行,而貝塔字段554的其余部分被解釋為矢量長度字段559B。存儲(chǔ)器訪問520指令模板包括縮放字段560以及可選地位移字段562A或位移縮放字段562B。

關(guān)于通用矢量友好的指令格式500,示出了包括格式字段540、基礎(chǔ)操作字段542以及數(shù)據(jù)元素寬度字段564的完全操作碼字段574。雖然示出了其中完全操作碼字段574包括所有這些字段的一個(gè)實(shí)施例,但是在不支持它們所有的實(shí)施例中,完全操作碼字段574包括少于所有這些字段。完全操作碼字段574提供操作代碼(操作碼)。

擴(kuò)增操作字段550、數(shù)據(jù)元素寬度字段564以及寫入掩蔽字段570允許在通用矢量友好的指令格式中在每個(gè)指令的基礎(chǔ)上指定這些特征。

寫入掩蔽字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建類型化指令,因?yàn)樗鼈冊试S基于不同的數(shù)據(jù)元素寬度而應(yīng)用掩蔽。

在A類和B類內(nèi)找到的各種指令模板有益于不同狀況。在本公開的某些實(shí)施例中,不同處理器或處理器內(nèi)的不同核可以支持僅A類、僅B類或者支持兩類。例如,意圖用于通用計(jì)算的高性能通用無序核可以僅支持B類,主要意圖用于圖形和/或科學(xué)(吞吐量)計(jì)算的核可以僅支持A類,并且意圖用于兩者的核可以支持兩者(當(dāng)然,具有來自兩類的模板和指令的某種混合而并非來自兩類的所有模板和指令的核在本公開的范圍內(nèi))。而且,單個(gè)處理器可以包括多個(gè)核,其全部支持相同的類別或者其中不同的核支持不同的類別。例如,在具有單獨(dú)的圖形和通用核的處理器中,主要意圖用于圖形和/或科學(xué)計(jì)算的圖形核中的一個(gè)可以僅支持A類,而通用核中的一個(gè)或多個(gè)可以為僅支持B類的意圖用于通用計(jì)算的具有無序執(zhí)行和寄存器重命名的高性能通用核。不具有單獨(dú)的圖形核的另一處理器可以包括支持A類和B類兩者的一個(gè)多個(gè)通用有序或無序核。當(dāng)然,在本公開的不同實(shí)施例中來自一個(gè)類別的特征還可以實(shí)現(xiàn)在另一類別中。以高級(jí)語言撰寫的程序會(huì)被放入(例如,即時(shí)編譯或靜態(tài)編譯成)多種不同的可執(zhí)行的形式,包括:1)僅具有由目標(biāo)處理器支持以供執(zhí)行的(一個(gè)或多個(gè))類別的指令的形式;或者2)具有使用所有類別的指令的不同組合撰寫的可替換的例程并具有基于由當(dāng)前執(zhí)行代碼的處理器支持的指令而選擇例程以執(zhí)行的控制流代碼的形式。

示例性特定矢量友好的指令格式

圖6是圖示根據(jù)本公開的實(shí)施例的示例性特定矢量友好的指令格式的框圖。圖6示出了特定矢量友好的指令格式600,其在它指定了字段的位置、大小、解釋和次序以及針對那些字段中某些的值的意義上而言是特定的。特定矢量友好的指令格式600可以用于擴(kuò)展x86指令集,并因此某些字段與在現(xiàn)有x86指令集及其擴(kuò)展(例如,AVX)中使用的那些相似或相同。此格式保持與具有擴(kuò)展的現(xiàn)有x86指令集的前綴編碼字段、實(shí)操作碼字節(jié)(real opcode byte)字段、MOD R/M字段、SIB字段、位移字段和立即字段一致。圖示了從圖5的字段至圖6的字段的映射。

應(yīng)當(dāng)理解,盡管為了說明的目的在通用矢量友好的指令格式500的上下文中參考特定矢量友好的指令格式600描述本公開的實(shí)施例,但除非特別聲明,本公開不限于特定矢量友好的指令格式600。例如,通用矢量友好的指令格式500預(yù)計(jì)到各種字段的各種可能的大小,而特定矢量友好的指令格式600被示出為具有特定大小的字段。通過特定示例的方式,雖然數(shù)據(jù)元素寬度字段564被圖示為在特定矢量友好的指令格式600中的一位字段,但本公開并不限于此(也就是說,通用矢量友好的指令格式500預(yù)計(jì)到數(shù)據(jù)元素寬度字段564的其他大小)。

通用矢量友好的指令格式500包括以圖6A中圖示的次序在下文列出的下述字段。

EVEX前綴(字節(jié)0-3)602——以四字節(jié)形式編碼。

格式字段540(EVEX字節(jié)0,位[7:0])——第一字節(jié)(EVEX字節(jié)0)是格式字段540并且它包含0x62(在本公開的一個(gè)實(shí)施例中的用于區(qū)分矢量友好的指令格式的唯一值)。

第二-第四字節(jié)(EVEX字節(jié)1-3)包括提供特定能力的多個(gè)位字段。

REX字段605(EVEX字節(jié)1,位[7-5])——包括EVEX.R位字段(EVEX字節(jié)1,位[7]-R)、EVEX.X位字段(EVEX字節(jié)1,位[6]-X),以及557BEX字節(jié)1,位[5]-B)。EVEX.R、EVEX.X以及EVEX.B位字段提供與對應(yīng)VEX位字段相同的功能,并且使用1補(bǔ)碼形式進(jìn)行編碼,即ZMM0被編碼為1111B,ZMM15被編碼為0000B。如本領(lǐng)域所已知的,指令的其他字段對寄存器索引的較低三個(gè)位(rrr、xxx和bbb)進(jìn)行編碼,以使得Rrrr、Xxxx和Bbbb可以通過添加EVEX.R、EVEX.X以及EVEX.B形成。

REX’字段510——這是REX’字段510的第一部分并且是EVEX.R’位字段(EVEX字節(jié)1,位[4]-R’),其用于對擴(kuò)展的32寄存器組的高16個(gè)或低16個(gè)進(jìn)行編碼。在本公開的一個(gè)實(shí)施例中,該位連同如下文指示的其他位一起以位反轉(zhuǎn)的格式存儲(chǔ)以與BOUND指令區(qū)分(在公知的x86 32位模式中),其實(shí)操作碼字節(jié)為62,但在MOD R/M字段(在下文描述)中并不接受在MOD字段中的值11;本公開的可替換的實(shí)施例并不以反轉(zhuǎn)格式存儲(chǔ)該位和下面指示的其他位。值1被用于編碼較低的16個(gè)寄存器。換句話說,通過組合EVEX.R’,EVEX.R以及來自其他字段的其他RRR形成R’Rrrr。

操作碼映射字段615(EVEX字節(jié)1,位[3:0]-mmmm)——其內(nèi)容對一個(gè)暗含的引導(dǎo)操作碼字節(jié)(0F、0F38、或者0F3)進(jìn)行編碼。

數(shù)據(jù)元素寬度字段564(EVEX字節(jié)2,位[7]-W)——由注釋EVEX.W表示。EVEX.W用于定義數(shù)據(jù)類型的粒度(大小)(32位數(shù)據(jù)元素或64位數(shù)據(jù)元素)。

EVEX.vvvv 620(EVEX字節(jié)2,位[6:3]-vvvv)——EVEX.vvvv的角色可以包括以下:1)EVEX.vvvv對第一源寄存器操作數(shù)進(jìn)行編碼,以反轉(zhuǎn)(1補(bǔ)碼)形式指定并且對于具有2個(gè)或更多源操作數(shù)的指令有效;2)EVEX.vvvv對目的地寄存器操作數(shù)進(jìn)行編碼,對于某些矢量移位以1補(bǔ)碼形式指定;或者3)EVEX.vvvv并不對任何操作數(shù)進(jìn)行編碼,該字段被保留并應(yīng)當(dāng)包含1111b。因此,EVEX.vvvv字段620對以反轉(zhuǎn)(1的補(bǔ)碼)形式存儲(chǔ)的第一源寄存器說明符(specifier)的4個(gè)低階位進(jìn)行編碼。取決于指令,額外的不同的EVEX位字段被用于將說明符大小擴(kuò)展至32個(gè)寄存器。

EVEX.U 568類別字段(EVEX字節(jié)2,位[2]-U)——如果EVEX.U=0,它指示A類或EVEX.U0;如果EVEX.U=1,它指示B類或EVEX.U1。

前綴編碼字段625(EVEX字節(jié)2,位[1:0]-pp)——提供用于基礎(chǔ)操作字段的附加位。除了為以EVEX前綴格式的傳統(tǒng)SSE指令提供支持外,這還具有壓縮SIMD前綴的益處(而不需要一個(gè)字節(jié)來表達(dá)SIMD前綴,EVEX前綴僅需要2位)。在一個(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)指令的傳統(tǒng)和EVEX格式兩者)。雖然較新的指令可直接將EVEX前綴編碼字段的內(nèi)容用作操作碼擴(kuò)展,但某些實(shí)施例為了一致性而以相似的方式擴(kuò)充但慮及將由這些傳統(tǒng)SIMD前綴指定的不同的含義??商鎿Q的實(shí)施例可以重新設(shè)計(jì)PLA以支持2位SIMD前綴編碼,并因此不需要擴(kuò)充。

阿爾法字段552(EVEX字節(jié)3,位[7]-EH;還稱為EVEX.EH、EVEX.rs、EVEX.RL,EVEX.write mask control(寫入掩蔽控制),以及EVEX.N;也用α進(jìn)行說明)——如前面所述,該字段是上下文特定的。

貝塔字段554(EVEX字節(jié)3,位[6:4]-SSS,還稱為EVEX.s2-0、EVEX.r2-0、EVEX.rrl、EVEX.LL0、EVEX.LLB;也用βββ進(jìn)行說明)——如前面所述,該字段是上下文特定的。

REX’字段510——這是REX’字段的剩余部分并且是EVEX.V’位字段(EVEX字節(jié)3,位[3]-V’),其可用于對擴(kuò)展的32寄存器組的較高16個(gè)或較低16個(gè)進(jìn)行編碼。該位以位反轉(zhuǎn)的格式存儲(chǔ)。值1被用于對較低的16個(gè)寄存器進(jìn)行編碼。換句話說,通過組合EVEX.V’,EVEX.vvvv形成V’VVVV。

寫入掩蔽字段570(EVEX字節(jié)3,位[2:0]-kkk)——其內(nèi)容指定了如前面所述的在寫入掩蔽寄存器中的寄存器的索引。在本公開的一個(gè)實(shí)施例中,特定值EVEX.kkk=000具有暗指沒有寫入掩蔽被用于該特定指令的特殊行為(這可以以多種方式實(shí)現(xiàn),包括使用硬接線至所有一的寫入掩蔽或繞過掩蔽硬件的硬件)。

實(shí)操作碼字段630(字節(jié)4)還稱為操作碼字節(jié)。在此字段中指定了操作碼的部分。

MOD R/M字段640(字節(jié)5)包括MOD字段642、Reg字段644以及R/M字段646。如前面所描述的,MOD字段642的內(nèi)容區(qū)分存儲(chǔ)器訪問和非存儲(chǔ)器訪問操作。Reg字段644的角色可被總結(jié)為兩種情形:編碼目的地寄存器操作數(shù)或源寄存器操作數(shù),或者被看作操作碼擴(kuò)展并且不用于編碼任何指令操作數(shù)。R/M字段646的角色可以包括如下:編碼引用存儲(chǔ)器地址的指令操作數(shù),或者編碼目的地寄存器操作數(shù)或源寄存器操作數(shù)。

縮放、索引、基礎(chǔ)(SIB)字節(jié)(字節(jié)6)——如前面所述,縮放字段550的內(nèi)容被用于存儲(chǔ)器地址生成。SIB.xxx 654和SIB.bbb 656——這些字段的內(nèi)容之前已經(jīng)是指與寄存器索引Xxxx和Bbbb相關(guān)。

位移字段562A(字節(jié)7-10)——當(dāng)MOD字段642包含10時(shí),字節(jié)7-10是位移字段562A,并且它與傳統(tǒng)32位位移(disp32)一樣地運(yùn)作并以字節(jié)粒度運(yùn)作。

位移因子字段562B(字節(jié)7)——當(dāng)MOD字段642包含01時(shí),字節(jié)7是位移因子字段562B。該字段的位置與傳統(tǒng)x86指令集8位位移(disp8)的位置相同,它以字節(jié)粒度運(yùn)作。由于disp8是符號(hào)擴(kuò)展的,它僅可在-128至127字節(jié)偏移之間尋址;在64字節(jié)高速緩存線方面,disp8使用8個(gè)位,其可被設(shè)置為僅四個(gè)真正有用值-128、-64、0、和64;由于常常需要更大的范圍,disp32被使用;然而,disp32需要4個(gè)字節(jié)。與disp8和disp32相比,位移因子字段562B是disp8的重新解釋;當(dāng)使用位移因子字段562B時(shí),實(shí)際位移由位移因子字段的內(nèi)容乘以存儲(chǔ)器操作數(shù)訪問的大小(N)確定。此類位移被稱為disp8*N。這減少了平均指令長度(用于位移但具有大得多的范圍的單個(gè)字節(jié))。這樣的被壓縮的位移基于有效位移是存儲(chǔ)器訪問的粒度的倍數(shù)的假設(shè),并因此,地址偏移的冗余低階位不需要被編碼。換句話說,位移因子字段562B代替?zhèn)鹘y(tǒng)x86指令集8位位移。因此,位移因子字段562B以與x86指令集8位位移相同的方式編碼(因此在ModRM/SIB編碼規(guī)則中沒有改變),僅有例外是disp8被超載(overload)為disp8*N。換句話說,在編碼規(guī)則或編碼長度方面沒有改變而僅在硬件對位移值的解釋上有所改變(其需要將位移按存儲(chǔ)器操作數(shù)的大小縮放以獲得按字節(jié)的地址偏移)。立即字段572如之前描述的那樣操作。

完全操作碼字段

圖6B是圖示根據(jù)本公開的一個(gè)實(shí)施例的構(gòu)成完全操作碼字段574的特定矢量友好的指令格式600的字段的框圖。具體地,完全操作碼字段574包括格式字段540、基礎(chǔ)操作字段542以及數(shù)據(jù)元素寬度(W)字段564?;A(chǔ)操作字段542包括前綴編碼字段625、操作碼映射字段615以及實(shí)操作碼字段630。

寄存器索引字段

圖6C是圖示根據(jù)本公開的一個(gè)實(shí)施例的構(gòu)成寄存器索引字段544的特定矢量友好的指令格式600的字段的框圖。具體地,寄存器索引字段544包括REX字段605、REX’字段610、MODR/M.reg字段644、MODR/M.r/m字段646、VVVV字段620、xxx字段654以及bbb字段656。

擴(kuò)增操作字段

圖6D是圖示根據(jù)本公開的一個(gè)實(shí)施例的構(gòu)成擴(kuò)增操作字段550的特定矢量友好的指令格式600的字段的框圖。當(dāng)類別(U)字段568包含0時(shí),它表示EVEX.U0(A類568A);當(dāng)它包含1時(shí),它表示EVEX.U1(B類568B)。當(dāng)U=0并且MOD字段642包含11(表示非存儲(chǔ)器訪問操作)時(shí),阿爾法字段552(EVEX字節(jié)3,位[7]-EH)被解釋為rs字段552A。當(dāng)rs字段552A包含1時(shí)(舍入552A.1),貝塔字段554(EVEX字節(jié)3,位[6:4]-SSS)被解釋為舍入控制字段554A。舍入控制字段554A包括一位SAE字段556以及兩位舍入操作字段558。當(dāng)rs字段552A包含0時(shí)(數(shù)據(jù)變換552A.2),貝塔字段554(EVEX字節(jié)3,位[6:4]-SSS)被解釋為三位數(shù)據(jù)變換字段554B。當(dāng)U=0并且MOD字段642包含00、01或10(表示存儲(chǔ)器訪問操作)時(shí),阿爾法字段552(EVEX字節(jié)3,位[7]-EH)被解釋為逐出提示(EH)字段552B并且貝塔字段554(EVEX字節(jié)3,位[6:4]-SSS)被解釋為三位數(shù)據(jù)操縱字段554C。

當(dāng)U=1時(shí),阿爾法字段552(EVEX字節(jié)3,位[7]-EH)被解釋為寫入掩蔽控制(Z)字段552C。當(dāng)U=1并且MOD字段642包含11(表示非存儲(chǔ)器訪問操作)時(shí),貝塔字段554的部分(EVEX字節(jié)3,位[4]-S0)被解釋為RL字段557A;當(dāng)它包含1時(shí)(舍入557A.1)貝塔字段554的其余部分(EVEX字節(jié)3,位[6-5]-S2-1)被解釋為舍入操作字段559A,而當(dāng)RL字段557A包含0時(shí)(VSIZE557.A2)貝塔字段554的其余部分(EVEX字節(jié)3,位[6-5]-S2-1)被解釋為矢量長度字段559B(EVEX字節(jié)3,位[6-5]-L1-0)。當(dāng)U=1并且MOD字段642包含00、01或10(表示存儲(chǔ)器訪問操作)時(shí),貝塔字段554(EVEX字節(jié)3,位[6:4]-SSS)被解釋為矢量長度字段559B(EVEX字節(jié)3,位[6-5]-L1-0)和廣播字段557B(EVEX字節(jié)3,位[4]-B)。

示例性寄存器架構(gòu)

圖7是根據(jù)本公開的一個(gè)實(shí)施例的寄存器架構(gòu)700的框圖。在圖示的實(shí)施例中,存在為512位寬的32個(gè)矢量寄存器710;這些寄存器被引用為zmm0至zmm31。較低16個(gè)zmm寄存器的較低階256位被覆蓋在寄存器ymm0-16上。較低16個(gè)zmm寄存器的較低階128位(ymm寄存器的較低階128位)被覆蓋在寄存器xmm0-15上。特定矢量友好的指令格式600如下表所說明的那樣在這些覆蓋的寄存器文件上操作。

換句話說,矢量長度字段559B在最大長度和一個(gè)或多個(gè)其他較短長度之間進(jìn)行選擇,其中每個(gè)這樣的較短長度是在前長度的一半長度;并且沒有矢量長度字段559B的指令模板在最大矢量長度上操作。進(jìn)一步的,在一個(gè)實(shí)施例中,特定矢量友好的指令格式600的B類指令模板在封裝(packed)或標(biāo)量單/雙精度浮點(diǎn)數(shù)據(jù)和封裝或標(biāo)量整數(shù)數(shù)據(jù)上操作。標(biāo)量操作是在zmm/ymm/xmm寄存器中的最低階數(shù)據(jù)元素位置上執(zhí)行的操作;較高階的數(shù)據(jù)元素位置被保留為與它們在指令之前相同,或者被歸零,取決于實(shí)施例。

寫入掩蔽寄存器715——在圖示的實(shí)施例中,存在8個(gè)寫入掩蔽寄存器(k0至k7),每個(gè)在大小方面為64位。在可替換的實(shí)施例中,寫入掩蔽寄存器715在大小方面為16位。如前面所描述的,在本公開的一個(gè)實(shí)施例中,矢量掩蔽寄存器k0不能被用作寫入掩蔽;當(dāng)通常指示k0的編碼被用于寫入掩蔽時(shí),它選擇0xFFFF的硬接線寫入掩蔽,有效地禁用針對該指令的寫入掩蔽。

通用寄存器725——在圖示的實(shí)施例中,存在連同現(xiàn)有的x86尋址模式使用以對存儲(chǔ)器操作數(shù)進(jìn)行尋址的十六個(gè)64位通用寄存器。通過名字RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP以及R8至R15引用這些寄存器。

標(biāo)量浮點(diǎn)棧寄存器文件(x87棧)745,其上是別名為MMX封裝整數(shù)扁平寄存器文件750——在圖示的實(shí)施例中,x87棧是用于在32/64/80位浮點(diǎn)數(shù)據(jù)上使用x87指令集擴(kuò)展執(zhí)行標(biāo)量浮點(diǎn)操作的八元素棧;而MMX寄存器被用于在64位封裝整數(shù)數(shù)據(jù)上執(zhí)行操作,以及保存操作數(shù)以用于在MMX和XMM寄存器之間執(zhí)行的某些操作。

本公開的可替換實(shí)施例可以使用更寬或更窄的寄存器。此外,本公開的可替換的實(shí)施例可以使用更多、更少或不同的寄存器文件和寄存器。

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

處理器核可以以不同方式、用于不同的目的以及在不同的處理器中實(shí)現(xiàn)。例如,這樣的核的實(shí)現(xiàn)可以包括:1)意圖用于通用計(jì)算的通用有序核;2)意圖用于通用計(jì)算的高性能通用無序核;3)主要意圖用于圖形和/或科學(xué)(吞吐量)計(jì)算的專用核。不同處理器的實(shí)現(xiàn)可以包括:1)包括意圖用于通用計(jì)算的一個(gè)或多個(gè)通用有序核和/或意圖用于通用計(jì)算的一個(gè)或多個(gè)通用無序核的CPU;以及2)包括主要意圖用于圖形和/或科學(xué)(吞吐量)的一個(gè)或多個(gè)專用核的協(xié)處理器。這樣的不同的處理器導(dǎo)致不同的計(jì)算機(jī)系統(tǒng)架構(gòu),其可以包括:1)在與CPU分離的芯片上的協(xié)處理器;2)與CPU在相同的封裝中的分離的裸片上的協(xié)處理器;3)與CPU在相同裸片上的協(xié)處理器(在這種情況下,這樣的協(xié)處理器有時(shí)被稱為專用邏輯,諸如集成的圖形和/或科學(xué)(吞吐量)邏輯,或者稱為專用核);以及4)可以在相同裸片上包括所述CPU(有時(shí)稱為(一個(gè)或多個(gè))應(yīng)用核或(一個(gè)或多個(gè))應(yīng)用處理器)、上述協(xié)處理器以及附加功能的片上系統(tǒng)。接下來描述示例性核架構(gòu),之后為示例性處理器和計(jì)算機(jī)架構(gòu)的描述。

示例性核架構(gòu)

有序和無序核框圖

圖8A是圖示根據(jù)本公開的實(shí)施例的示例性有序流水線和示例性寄存器重命名、無序發(fā)出/執(zhí)行流水線二者的框圖。圖8B是圖示根據(jù)本公開的實(shí)施例的要被包括在處理器中的有序架構(gòu)核的示例性實(shí)施例和示例性寄存器重命名、無序發(fā)出/執(zhí)行架構(gòu)核二者的框圖。圖8A-B中的實(shí)線框圖示了有序流水線和有序核,而虛線框的可選附加圖示了寄存器重命名、無序發(fā)出/執(zhí)行流水線和核??紤]到有序方面是無序方面的子集,將描述無序方面。

在圖8A中,處理器流水線800包括取出級(jí)802、長度解碼級(jí)804、解碼級(jí)806、分配級(jí)808、重命名級(jí)810、調(diào)度(也稱為分派或發(fā)出)級(jí)812、寄存器讀取/存儲(chǔ)器讀取級(jí)814、執(zhí)行級(jí)816、寫回/存儲(chǔ)器寫入級(jí)818、異常處理級(jí)822和提交級(jí)824。

圖8B示出了處理器核890,其包括耦合到執(zhí)行引擎單元850的前端單元830,并且二者都耦合到存儲(chǔ)器單元870。核890可以是精簡指令集計(jì)算(RISC)核、復(fù)雜指令集計(jì)算(CISC)核、甚長指令字(VLIW)核或混合或替代的核類型。作為又一選項(xiàng),核890可以是專用核,諸如例如,網(wǎng)絡(luò)或通信核、壓縮引擎、協(xié)處理器核、通用計(jì)算圖形處理單元(GPGPU)核、圖形核等。

前端單元830包括耦合到指令高速緩存單元834的分支預(yù)測單元832,所述指令高速緩存單元834耦合到指令轉(zhuǎn)換后備緩沖器(TLB)836,所述指令轉(zhuǎn)換后備緩沖器836耦合到指令取出單元838,所述指令取出單元838耦合到解碼單元840。解碼單元840(或解碼器或解碼器單元)可以解碼指令(例如,宏指令),并且作為輸出生成一個(gè)或多個(gè)微操作、微代碼入口點(diǎn)、微指令、其他指令或其他控制信號(hào),其從原始指令解碼或者以其他方式反映原始指令或者從原始指令得到。解碼單元840可以使用各種不同的機(jī)制來實(shí)現(xiàn)。適當(dāng)?shù)臋C(jī)制的示例包括但不限于,查找表、硬件實(shí)現(xiàn)、可編程邏輯陣列(PLA)、微代碼只讀存儲(chǔ)器(ROM)等。在一個(gè)實(shí)施例中,核890包括微代碼ROM或其他介質(zhì),其存儲(chǔ)用于某些宏指令的微代碼(例如,在解碼單元單元840中或以其他方式在前端單元830中)。解碼單元840被耦合到執(zhí)行引擎單元850中的重命名/分配器單元852。

執(zhí)行引擎單元850包括耦合到退役單元854和一個(gè)或多個(gè)調(diào)度器單元856的集合的重命名/分配器單元852。(一個(gè)或多個(gè))調(diào)度器單元856表示任何數(shù)目的不同調(diào)度器,包括保留站、中央指令窗口等。(一個(gè)或多個(gè))調(diào)度器單元856被耦合到(一個(gè)或多個(gè))物理寄存器文件單元858。(一個(gè)或多個(gè))物理寄存器文件單元858中的每一個(gè)表示一個(gè)或多個(gè)物理寄存器文件,其中的不同的物理寄存器文件存儲(chǔ)一個(gè)或多個(gè)不同的數(shù)據(jù)類型,諸如標(biāo)量整數(shù)、標(biāo)量浮點(diǎn)、封裝整數(shù)、封裝浮點(diǎn)、矢量整數(shù)、矢量浮點(diǎn)、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等。在一個(gè)實(shí)施例中,(一個(gè)或多個(gè))物理寄存器文件單元858包括矢量寄存器單元、寫入掩蔽寄存器單元和標(biāo)量寄存器單元。這些寄存器單元可以提供架構(gòu)矢量寄存器、矢量掩蔽寄存器和通用寄存器。(一個(gè)或多個(gè))物理寄存器文件單元858由退役單元854重疊,以說明其中寄存器重命名和無序執(zhí)行可以被實(shí)現(xiàn)的各種方式(例如,使用(一個(gè)或多個(gè))重排序緩沖器以及(一個(gè)或多個(gè))退役寄存器文件;使用(一個(gè)或多個(gè))未來文件、(一個(gè)或多個(gè))歷史緩沖器、以及(一個(gè)或多個(gè))退役寄存器文件;使用寄存器映射和寄存器池等)。退役單元854和(一個(gè)或多個(gè))物理寄存器文件單元858耦合到(一個(gè)或多個(gè))執(zhí)行群集860。(一個(gè)或多個(gè))執(zhí)行群集860包括一個(gè)或多個(gè)執(zhí)行單元862的集合以及一個(gè)或多個(gè)存儲(chǔ)器訪問單元864的集合。執(zhí)行單元862可以實(shí)行各種操作(例如,移位、加法、減法、乘法)并且在各種類型的數(shù)據(jù)(例如,標(biāo)量浮點(diǎn)、封裝整數(shù)、封裝浮點(diǎn)、矢量整數(shù)、矢量浮點(diǎn))上實(shí)行操作。雖然一些實(shí)施例可以包括專用于特定功能或功能集合的多個(gè)執(zhí)行單元,但是其他實(shí)施例可以僅包括一個(gè)執(zhí)行單元或所有實(shí)行所有功能的多個(gè)執(zhí)行單元。(一個(gè)或多個(gè))調(diào)度器單元856、(一個(gè)或多個(gè))物理寄存器文件單元858和(一個(gè)或多個(gè))執(zhí)行群集860被示出為可能復(fù)數(shù)的,因?yàn)槟承?shí)施例創(chuàng)建用于某些類型的數(shù)據(jù)/操作的單獨(dú)的流水線(例如,標(biāo)量整數(shù)流水線、標(biāo)量浮點(diǎn)/封裝整數(shù)/封裝浮點(diǎn)/矢量整數(shù)/矢量浮點(diǎn)流水線和/或存儲(chǔ)器訪問流水線,每個(gè)都具有其自己的調(diào)度器單元、(一個(gè)或多個(gè))物理寄存器文件單元和/或執(zhí)行群集——并且在單獨(dú)的存儲(chǔ)器訪問流水線的情況下,實(shí)現(xiàn)其中僅該流水線的執(zhí)行群集具有(一個(gè)或多個(gè))存儲(chǔ)器訪問單元864的某些實(shí)施例)。還應(yīng)當(dāng)理解,在使用單獨(dú)流水線的情況下,這些流水線中的一個(gè)或多個(gè)可以是無序發(fā)出/執(zhí)行并且其余是有序的。

存儲(chǔ)器訪問單元864的集合可以耦合到存儲(chǔ)器單元870,其包括耦合到數(shù)據(jù)高速緩存單元874的數(shù)據(jù)TLB單元872,所述數(shù)據(jù)高速緩存單元874耦合到2級(jí)(L2)高速緩存單元876。在一個(gè)示例性實(shí)施例中,存儲(chǔ)器訪問單元864可以包括加載單元、存儲(chǔ)地址單元和存儲(chǔ)數(shù)據(jù)單元,其中的每一個(gè)可以耦合到存儲(chǔ)器單元870中的數(shù)據(jù)TLB單元872。指令高速緩存單元834進(jìn)一步被耦合到存儲(chǔ)器單元870中的2級(jí)(L2)高速緩存單元876。L2高速緩存單元876被耦合到一個(gè)或多個(gè)其他級(jí)的高速緩存并且最終耦合到主存儲(chǔ)器。

通過示例的方式,示例性寄存器重命名、無序發(fā)出/執(zhí)行核架構(gòu)可以如下實(shí)現(xiàn)流水線800:1)指令取出838實(shí)行取出和長度解碼級(jí)802和804;2)解碼單元840實(shí)行解碼級(jí)806;3)重命名/分配器單元852實(shí)行分配級(jí)808和重命名級(jí)810;4)(一個(gè)或多個(gè))調(diào)度器單元856實(shí)行調(diào)度級(jí)812;5)(一個(gè)或多個(gè))物理寄存器文件單元858和存儲(chǔ)器單元870實(shí)行寄存器讀取/存儲(chǔ)器讀取級(jí)814;執(zhí)行群集860實(shí)行執(zhí)行級(jí)816;6)存儲(chǔ)器單元870和(一個(gè)或多個(gè))物理寄存器文件單元858實(shí)行寫回/存儲(chǔ)器寫入級(jí)818;7)各種單元可以在異常處理級(jí)822中被涉及;并且8)退役單元854和(一個(gè)或多個(gè))物理寄存器文件單元858實(shí)行提交級(jí)824。

核890可以支持一個(gè)或多個(gè)指令集(例如,x86指令集(具有已經(jīng)添加有較新版本的一些擴(kuò)展);加利福尼亞州桑尼維爾的MIPS科技的MIPS指令集;ARM指令集(具有加利福尼亞州桑尼維爾的ARM控股公司的可選附加擴(kuò)展,諸如NEON),包括本文中描述的(一個(gè)或多個(gè))指令。在一個(gè)實(shí)施例中,核890包括用于支持封裝數(shù)據(jù)指令集擴(kuò)展(例如,AVX1、AVX2)的邏輯,從而允許被許多多媒體應(yīng)用使用的操作使用封裝數(shù)據(jù)來實(shí)行。

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

雖然寄存器重命名在無序執(zhí)行的上下文中進(jìn)行描述,但是應(yīng)當(dāng)理解,寄存器重命名可以在有序架構(gòu)中使用。雖然所示的處理器的實(shí)施例還包括單獨(dú)的指令和數(shù)據(jù)高速緩存單元834/874和共享L2高速緩存單元876,但是替代實(shí)施例可以具有用于指令和數(shù)據(jù)二者的單個(gè)內(nèi)部高速緩存,諸如例如1級(jí)(L1)內(nèi)部高速緩存或多級(jí)內(nèi)部高速緩存。在一些實(shí)施例中,系統(tǒng)可以包括內(nèi)部高速緩存和在核和/或處理器外部的外部高速緩存的組合。替代地,所有高速緩存可以在核和/或處理器外部。

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

圖9A-B圖示了更具體的示例性有序核架構(gòu)的框圖,其核可以是芯片中的若干邏輯塊(包括相同類型和/或不同類型的其他核)中的一個(gè)。取決于應(yīng)用,邏輯塊通過高帶寬互連網(wǎng)絡(luò)(例如,環(huán)形網(wǎng)絡(luò))與一些固定功能邏輯、存儲(chǔ)器I/O接口和其他必要的I/O邏輯進(jìn)行通信。

圖9A是根據(jù)本公開的實(shí)施例的單個(gè)處理器核連同其到裸片上互連網(wǎng)絡(luò)902的連接以及其2級(jí)(L2)高速緩存904的本地子集的框圖。在一個(gè)實(shí)施例中,指令解碼單元900支持具有封裝數(shù)據(jù)指令集擴(kuò)展的x86指令集。L1高速緩存906允許到標(biāo)量和矢量單元中的高速緩存存儲(chǔ)器的低等待時(shí)間訪問。雖然在一個(gè)實(shí)施例(為了簡化設(shè)計(jì))中,標(biāo)量單元908和矢量單元910使用單獨(dú)的寄存器集合(分別是標(biāo)量寄存器912和矢量寄存器914),并且在其之間傳輸?shù)臄?shù)據(jù)被寫入到存儲(chǔ)器并且然后從1級(jí)(L1)高速緩存906被讀回,但是本公開的替代實(shí)施例可以使用不同的方法(例如,使用單個(gè)寄存器集合或包括允許數(shù)據(jù)在兩個(gè)寄存器文件之間被傳輸而不被寫入和讀回的通信路徑)。

L2高速緩存904的本地子集是全局L2高速緩存的一部分,其被劃分成單獨(dú)立的本地子集,每個(gè)處理器核一個(gè)。每個(gè)處理器核具有對L2高速緩存904的其自己的本地子集的直接訪問路徑。由處理器核讀取的數(shù)據(jù)被存儲(chǔ)在其L2高速緩存子集904中,并且可以與訪問其自己的本地L2高速緩存子集的其他處理器核并行地被快速訪問。由處理器核寫入的數(shù)據(jù)被存儲(chǔ)在其自己的L2高速緩存子集904中,并且從其他子集清除(flush),如果必要的話。環(huán)形網(wǎng)絡(luò)確保共享數(shù)據(jù)的一致性。環(huán)形網(wǎng)絡(luò)是雙向的,以允許諸如處理器核、L2高速緩存或其他邏輯塊之類的代理在芯片內(nèi)與彼此進(jìn)行通信。每個(gè)環(huán)形數(shù)據(jù)路徑每個(gè)方向是1012位寬。

圖9B是根據(jù)本公開的實(shí)施例的圖9A中的處理器核的部分的展開圖。圖9B包括L1高速緩存904的L1數(shù)據(jù)高速緩存906A部分以及關(guān)于矢量單元910和矢量寄存器914的更多細(xì)節(jié)。具體地,矢量單元910是16寬矢量處理單元(VPU)(見16寬ALU 928),其執(zhí)行整數(shù)、單精度浮點(diǎn)和雙精度浮點(diǎn)指令中的一個(gè)或多個(gè)。VPU用拌和單元920支持對寄存器輸入進(jìn)行拌和、用數(shù)值轉(zhuǎn)換單元922A-B支持?jǐn)?shù)值轉(zhuǎn)換、以及在存儲(chǔ)器輸入上用復(fù)制單元924支持復(fù)制。寫入掩蔽寄存器926允許預(yù)測所得到的矢量寫入。

圖10是根據(jù)本公開的實(shí)施例的處理器1000的框圖,所述處理器1000可以具有多于一個(gè)核、可以具有集成存儲(chǔ)器控制器并且可以具有集成圖形。圖10中的實(shí)線框圖示了具有單個(gè)核1002A、系統(tǒng)代理1010、一個(gè)或多個(gè)總線控制器單元1016集合的處理器1000,而虛線框的可選添加圖示了具有多個(gè)核1002A-N、系統(tǒng)代理單元1010中的一個(gè)或多個(gè)集成存儲(chǔ)器控制器單元1014的集合以及專用邏輯1008的替代處理器1000。

因此,處理器1000的不同實(shí)現(xiàn)可以包括:1)具有作為集成圖形和/或科學(xué)(吞吐量)邏輯的專用邏輯1008(其可以包括一個(gè)或多個(gè)核)以及作為一個(gè)或多個(gè)通用核(例如,通用有序核、通用無序核、二者的組合)的核1002A-N的CPU;2)具有作為主要意圖用于圖形和/或科學(xué)(吞吐量)的大量專用核的核1002A-N的協(xié)處理器;以及3)具有作為大量通用有序核的核1002A-N的協(xié)處理器。因此,處理器1000可以是通用處理器、協(xié)處理器或?qū)S锰幚砥?,諸如例如,網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU(通用圖形處理單元)、高吞吐量多集成核(MIC)協(xié)處理器(包括30個(gè)或更多個(gè)核)、嵌入式處理器等。處理器可以在一個(gè)或多個(gè)芯片上實(shí)現(xiàn)。處理器1000可以是使用諸如例如BiCMOS、CMOS或NMOS之類的任何數(shù)目的處理技術(shù)的一個(gè)或多個(gè)襯底的部分和/或可以在所述一個(gè)或多個(gè)襯底上實(shí)現(xiàn)。

存儲(chǔ)器層級(jí)包括核內(nèi)的一個(gè)或多個(gè)級(jí)的高速緩存、一個(gè)或多個(gè)共享的高速緩存單元1006的集合、以及耦合到集成存儲(chǔ)器控制器單元1014的集合的外部存儲(chǔ)器(未示出)。共享高速緩存單元1006的集合可以包括一個(gè)或多個(gè)中間級(jí)高速緩存,諸如2級(jí)(L2)、3級(jí)(L3)、4級(jí)(L4)或其他級(jí)的高速緩存、最后一級(jí)高速緩存(LLC)和/或其組合。雖然在一個(gè)實(shí)施例中,基于環(huán)的互連單元1012互連集成圖形邏輯1008、共享高速緩存單元1006的集合以及系統(tǒng)代理單元1010/(一個(gè)或多個(gè))集成存儲(chǔ)器控制器單元1014,但是替代實(shí)施例可以使用用于互連這樣的單元的任何數(shù)目的公知的技術(shù)。在一個(gè)實(shí)施例中,在一個(gè)或多個(gè)高速緩存單元1006與核1002-A-N之間保持一致性。

在一些實(shí)施例中,核1002A-N中的一個(gè)或多個(gè)有多線程能力。系統(tǒng)代理1010包括協(xié)調(diào)和操作核1002A-N的那些組件。系統(tǒng)代理單元1010可以包括例如功率控制單元(PCU)和顯示單元。PCU可以是或包括調(diào)節(jié)核1002A-N和集成圖形邏輯1008的功率狀態(tài)所需要的邏輯和組件。顯示單元用于驅(qū)動(dòng)一個(gè)或多個(gè)外部連接的顯示器。

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

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

圖11-14是示例性計(jì)算機(jī)架構(gòu)的框圖。本領(lǐng)域中已知的用于膝上型計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、手持PC、個(gè)人數(shù)字助理、工程工作站、服務(wù)器、網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)中心(hub)、交換機(jī)、嵌入式處理器、數(shù)字信號(hào)處理器(DSP)、圖形設(shè)備、視頻游戲設(shè)備、機(jī)頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設(shè)備和各種其他電子設(shè)備的其他系統(tǒng)設(shè)計(jì)和配置也是適當(dāng)?shù)摹Mǔ?,如本文公開的能夠包含處理器和/或其他執(zhí)行邏輯的大量系統(tǒng)或電子設(shè)備通常是適當(dāng)?shù)摹?/p>

現(xiàn)在參考圖11,示出了根據(jù)本公開的一個(gè)實(shí)施例的系統(tǒng)1100的框圖。系統(tǒng)1100可以包括耦合到控制器中心1120的一個(gè)或多個(gè)處理器1110、1115。在一個(gè)實(shí)施例中,控制器中心1120包括圖形存儲(chǔ)器控制器中心(GMCH)1190和輸入/輸出中心(IOH)1150(其可能在分離的芯片上);GMCH 1190包括存儲(chǔ)器1140和協(xié)處理器1145所耦合到的存儲(chǔ)器和圖形控制器;IOH 1150將輸入/輸出(I/O)設(shè)備1160耦合到GMCH 1190。替代地,存儲(chǔ)器和圖形控制器中的一個(gè)或二者被集成在處理器內(nèi)(如本文所述),存儲(chǔ)器1140和協(xié)處理器1145被直接耦合到處理器1110,以及在具有IOH 1150的單個(gè)芯片中的控制器中心1120。存儲(chǔ)器1140可以包括切換器控制模塊1140A(和/或數(shù)據(jù)冒險(xiǎn)解決模塊)例如以存儲(chǔ)代碼,所述代碼當(dāng)被執(zhí)行時(shí)使處理器實(shí)行本公開的任何方法。

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

存儲(chǔ)器1140可以是例如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、相變存儲(chǔ)器(PCM)或者二者組合。對于至少一個(gè)實(shí)施例,控制器中心1120經(jīng)由多點(diǎn)總線與(一個(gè)或多個(gè))處理器1110、1115進(jìn)行通信,諸如前側(cè)總線(FSB)、諸如QuickPath互連(QPI)之類的點(diǎn)對點(diǎn)接口或類似的連接1195。

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

在物理資源1110、1115之間在包括架構(gòu)、微架構(gòu)、熱、功耗特性等的指標(biāo)的一系列度量方面可能存在各種差異。

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

現(xiàn)在參考圖12,示出了根據(jù)本公開的實(shí)施例的第一更具體示例性系統(tǒng)1200的框圖。如圖12中所示,多處理器系統(tǒng)1200是點(diǎn)對點(diǎn)互連系統(tǒng),并且包括經(jīng)由點(diǎn)對點(diǎn)互連1250耦合的第一處理器1270和第二處理器1280。處理器1270和1280中的每一個(gè)可以是某個(gè)版本的處理器1000。在本公開的一個(gè)實(shí)施例中,處理器1270和1280分別是處理器1110和1115,而協(xié)處理器1238是協(xié)處理器1145。在另一實(shí)施例中,處理器1270和1280分別是處理器1110協(xié)處理器1145。

處理器1270和1280被示出分別包括集成存儲(chǔ)器控制器(IMC)單元1272和1282。作為其總線控制器單元的部分,處理器1270還包括點(diǎn)對點(diǎn)(P-P)接口1276和1278;類似地,第二處理器1280包括P-P接口1286和1288。處理器1270、1280可以使用P-P接口電路1278、1288經(jīng)由點(diǎn)對點(diǎn)(P-P)接口1250來交換信息。如圖12所示,IMC 1272和1282將處理器耦合到相應(yīng)存儲(chǔ)器,即存儲(chǔ)器1232和存儲(chǔ)器1234,其可以是本地附連到相應(yīng)處理器的主存儲(chǔ)器的部分。

處理器1270、1280可以均經(jīng)由單獨(dú)的P-P接口1252、1254使用點(diǎn)對點(diǎn)接口電路1276、1294、1286、1298來與芯片組1290交換信息。芯片組1290可以可選地經(jīng)由高性能接口1239來與協(xié)處理器1238交換信息。在一個(gè)實(shí)施例中,協(xié)處理器1238是專用處理器,諸如例如,高吞吐量MIC處理器、網(wǎng)絡(luò)或通信處理器、壓縮引擎、圖形處理器、GPGPU、嵌入式處理器等。

共享高速緩存(未示出)可以被包括在兩個(gè)處理器中的任何一個(gè)處理器中或在其外部,而經(jīng)由P-P互連與處理器連接,使得如果處理器被置于低功率模式中,則任何一個(gè)或兩個(gè)處理器的本地高速緩存信息可以被存儲(chǔ)在共享高速緩存中。

芯片組1290可以經(jīng)由接口1296耦合到第一總線1216。在一個(gè)實(shí)施例中,第一總線1216可以是外圍組件互連(PCI)總線,或諸如快速PCI總線之類的總線或另一第三代I/O互連總線,但是本發(fā)明的范圍并不限于此。

如圖12中所示,各種I/O設(shè)備1214可以耦合到第一總線1216,連同總線橋1218,所述總線橋1218將第一總線1216耦合到第二總線1220。在一個(gè)實(shí)施例中,一個(gè)或多個(gè)附加處理器1215(諸如協(xié)處理器、高吞吐量MIC處理器、GPGPU、加速器(諸如例如,圖形加速器或數(shù)字信號(hào)處理(DSP)單元)、現(xiàn)場可編程門陣列或任何其他處理器)被耦合到第一總線1216。在一個(gè)實(shí)施例中,第二總線1220可以是低引腳計(jì)數(shù)(LPC)總線。在一個(gè)實(shí)施例中,各種設(shè)備可以被耦合到第二總線1220,包括例如鍵盤和/或鼠標(biāo)1222、通信設(shè)備1227和可以包括指令/代碼和數(shù)據(jù)1230的存儲(chǔ)單元1228,諸如盤驅(qū)動(dòng)器或其他大容量存儲(chǔ)設(shè)備。此外,音頻I/O 1224可以被耦合到第二總線1220。注意,其他架構(gòu)可以是可能的。例如,代替圖12的點(diǎn)對點(diǎn)架構(gòu),系統(tǒng)可以實(shí)現(xiàn)多點(diǎn)總線或其他這樣的架構(gòu)。

現(xiàn)在參考圖13,示出了根據(jù)本發(fā)明的實(shí)施例的第二更具體的示例性系統(tǒng)1300的框圖。如在圖12和圖13中的元件承載類似的附圖標(biāo)記,并且圖12的某些方面已經(jīng)從圖13中省略,以避免混淆圖13的其他方面。

圖13圖示了處理器1270、1280可以分別包括集成存儲(chǔ)器和I/O控制邏輯(“CL”)1272和1282。因此,CL 1272、1282包括集成存儲(chǔ)器控制器單元并且包括I/O控制邏輯。圖13圖示了不僅存儲(chǔ)器1232、1234耦合到1272、1282而且I/O設(shè)備1314也耦合到控制邏輯1272、1282。傳統(tǒng)I/O設(shè)備1315耦合到芯片組1290。

現(xiàn)在參考圖14,示出了根據(jù)本公開的實(shí)施例的SoC 1400的框圖。圖10中的類似元件承載類似的附圖標(biāo)記。而且,虛線框是更高級(jí)的SoC上的可選特征。在圖14中,(一個(gè)或多個(gè))互連單元1402被耦合到:應(yīng)用處理器1410,其包括一個(gè)或多個(gè)核202A-N的集合和(一個(gè)或多個(gè))共享高速緩存單元1006;系統(tǒng)代理單元1010;(一個(gè)或多個(gè))總線控制器單元1016;(一個(gè)或多個(gè))集成存儲(chǔ)器控制器單元1014;一組或一個(gè)或多個(gè)協(xié)處理器1420,其可以包括集成圖形邏輯、圖像處理器、音頻處理器和視頻處理器;靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)單元1430;直接存儲(chǔ)器訪問(DMA)單元1432;以及用于耦合到一個(gè)或多個(gè)外部顯示器的顯示單元1440。在一個(gè)實(shí)施例中,(一個(gè)或多個(gè))協(xié)處理器1420包括專用處理器,諸如例如,網(wǎng)絡(luò)或通信處理器、壓縮引擎、GPGPU、高吞吐量MIC處理器、嵌入式處理器等。

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

諸如圖12圖示的代碼1230的程序代碼可以應(yīng)用于輸入指令以實(shí)行本文描述的功能并且生成輸出信息。輸出信息可以以已知的方式應(yīng)用于一個(gè)或多個(gè)輸出設(shè)備。為了本申請的目的,處理系統(tǒng)包括具有處理器的任何系統(tǒng),諸如,例如;數(shù)字信號(hào)處理器(DSP)、微控制器、專用集成電路(ASIC)或微處理器。

程序代碼可以以高級(jí)的面向過程或面向?qū)ο蟮木幊陶Z言來實(shí)現(xiàn)以與處理系統(tǒng)進(jìn)行通信。程序代碼還可以以匯編或機(jī)器語言來實(shí)現(xiàn),如果需要的話。事實(shí)上,本文描述的機(jī)制在范圍上不限于任何特定編程語言。在任何情況下,語言可以是編譯或解釋語言。

至少一個(gè)實(shí)施例的一個(gè)或多個(gè)方面可以通過存儲(chǔ)在機(jī)器可讀介質(zhì)上的表示處理器內(nèi)的各種邏輯的代表性指令來實(shí)現(xiàn),其當(dāng)由機(jī)器讀取時(shí),使得機(jī)器制造用于實(shí)行本文描述的技術(shù)的邏輯。稱為“IP核”的這樣的表示可以被存儲(chǔ)在有形的機(jī)器可讀介質(zhì)上并且被供應(yīng)到各種客戶或制造設(shè)施,以加載到實(shí)際上作出邏輯或處理器的制造機(jī)器中。

這樣的機(jī)器可讀存儲(chǔ)介質(zhì)可以包括但不限于,由機(jī)器或設(shè)備制造或形成的物品的非臨時(shí)有形布置,包括諸如硬盤之類的存儲(chǔ)介質(zhì)、任何其他類型的盤(包括軟盤、光盤、壓縮盤只讀存儲(chǔ)器(CD-ROM)、可重寫壓縮盤(CD-RW)和磁光盤)、半導(dǎo)體設(shè)備(諸如只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)(諸如動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM))、可擦除可編程只讀存儲(chǔ)器(EPROM)、閃速存儲(chǔ)器、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、相變存儲(chǔ)器(PCM))、磁卡或光卡或者適用于存儲(chǔ)電子指令的任何其他類型的介質(zhì)。

因此,本發(fā)明的實(shí)施例還包括非臨時(shí)有形機(jī)器可讀介質(zhì),其包含指令或包含設(shè)計(jì)數(shù)據(jù),諸如硬件描述語言(HDL),其定義本文描述的結(jié)構(gòu)、電路、裝置、處理器和/或系統(tǒng)特征。這樣的實(shí)施例還可以被稱為程序產(chǎn)品。

仿真(包括二進(jìn)制翻譯、代碼變形等)

在一些情況下,指令轉(zhuǎn)換器可以用于將指令從源指令集轉(zhuǎn)換為目標(biāo)指令集。例如,指令轉(zhuǎn)換器可以翻譯(例如,使用靜態(tài)二進(jìn)制翻譯、包括動(dòng)態(tài)編譯的動(dòng)態(tài)二進(jìn)制翻譯)、變形、仿真或以其他方式將指令轉(zhuǎn)換為要由核處理的一個(gè)或多個(gè)其他指令。指令轉(zhuǎn)換器可以以軟件、硬件、固件或其組合來實(shí)現(xiàn)。指令轉(zhuǎn)換可能在處理器上、處理器外或部分在處理器上且部分在處理器外。

圖15是根據(jù)本公開的實(shí)施例的對比使用軟件指令轉(zhuǎn)換器來將源指令集中的二進(jìn)制指令轉(zhuǎn)換成目標(biāo)指令集中的二進(jìn)制指令的框圖。在圖示的實(shí)施例中,指令轉(zhuǎn)換器是軟件指令轉(zhuǎn)換器,但是替代地,指令轉(zhuǎn)換器可以以軟件、固件、硬件或其各種組合來實(shí)現(xiàn)。圖15示出了以高級(jí)語言1502的程序可以使用x86編譯器1504來編譯以生成可以由具有至少一個(gè)x86指令集核1516的處理器原生執(zhí)行的x86二進(jìn)制代碼1506。具有至少一個(gè)x86指令集核1516的處理器表示可以通過兼容地執(zhí)行或以其他方式處理下述來實(shí)行與具有至少一個(gè)x86指令集核的英特爾處理器大體上相同功能的任何處理器:(1)英特爾x86指令集核的指令集的大部分或(2)目的在于在具有至少一個(gè)x86指令集核的英特爾處理器上運(yùn)行的應(yīng)用或其他軟件的對象代碼版本,以便于與具有至少一個(gè)x86指令集核的英特爾處理器實(shí)現(xiàn)大體上相同結(jié)果。x86編譯器1504表示操作為生成x86二進(jìn)制代碼1506(例如,對象代碼)的編譯器,其可以具有或不具有附加鏈接處理的情況下在具有至少一個(gè)x86指令集核1516的處理器上被執(zhí)行。類似地,圖15示出了以高級(jí)語言1502的程序可以使用替代指令集編譯器1508來編譯,以生成替代指令集二進(jìn)制代碼1510,其可以由不具有至少一個(gè)x86指令集核1514的處理器來原生地執(zhí)行(例如,具有執(zhí)行加利福尼亞州桑尼維爾的MIPS科技的MIPS指令集和/或執(zhí)行加利福尼亞州桑尼維爾的ARM控股公司的ARM指令集的核的處理器)。指令轉(zhuǎn)換器1512用于將x86二進(jìn)制碼1506轉(zhuǎn)換成可以由不具有x86指令集核1514的處理器原生地執(zhí)行的代碼。該轉(zhuǎn)換的代碼不太可能與替代指令集二進(jìn)制代碼1510相同,因?yàn)槟軌蜻@樣的指令轉(zhuǎn)換器難以制作;然而,轉(zhuǎn)換的代碼將完成一般操作,并且由來自替代指令集的指令組成。因此,指令轉(zhuǎn)換器1512表示軟件、固件、硬件或其組合,其通過仿真、模擬或任何其他處理來允許不具有x86指令集處理器或核的處理器或其他電子設(shè)備執(zhí)行x86二進(jìn)制代碼1506。

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