指令次序?qū)嵤┲噶顚?、處理器、方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本文所描述的實施例一般涉及處理器。特別地,本文所描述的實施例一般地涉及在無序運行處理器中實施(enforce)指令次序。
【背景技術(shù)】
[0002]許多現(xiàn)代處理器是無序(OoO)運行處理器,其能夠以與指令出現(xiàn)在原始軟件程序中的次序不同的次序來運行指令。術(shù)語程序次序通常用于指指令在原始軟件程序中的次序。取代于必然以程序次序運行指令,OoO運行處理器可以以可以取決于輸入數(shù)據(jù)的可用性和潛在地各種其它因素的次序來運行指令。通過示例的方式,一些較新近的指令可能需要來自較陳舊的指令的輸入數(shù)據(jù),而其它較新近的指令可能不需要來自任何較陳舊的指令的輸入數(shù)據(jù)。
[0003]OoO指令可以允許處理器立即運行準備就緒的指令而沒有等待自身由于它們正在等待數(shù)據(jù)而可能對運行未準備就緒的在先指令的延遲。指令在OoO運行處理器中實際運行的次序通常稱為數(shù)據(jù)次序。隨后,OoO運行處理器可以對運行結(jié)果和/或架構(gòu)狀態(tài)重排序并且以原始程序次序而不是以實際運行指令的數(shù)據(jù)次序(例如向軟件、用戶等)呈現(xiàn)運行結(jié)果和/或架構(gòu)狀態(tài)。有利地,這樣的OoO運行處理器部分地由于流水線級或處理時隙的增加利用而通常具有改進的性能和/或速度。
[0004]然而,在某些情形中OoO運行處理器中的一項挑戰(zhàn)是在應當僅以程序次序訪問的資源作為無序運行的結(jié)果而以數(shù)據(jù)次序被訪問時可能出現(xiàn)問題。
【附圖說明】
[0005]可以通過參照用于說明實施例的以下描述和附圖來最好地理解本發(fā)明。在圖中: 圖1是可操作成處理或執(zhí)行指令次序?qū)嵤┲噶顚Φ奶幚砥鞯膶嵤├目驁D。
[0006]圖2是處理或執(zhí)行指令次序?qū)嵤┲噶顚Φ膶嵤├奶幚砥髦械姆椒ǖ膶嵤├目蛄鞒虉D。
[0007]圖3是合適的指令次序?qū)嵤┠K的第一示例實施例的框圖。
[0008]圖4是合適的指令次序?qū)嵤┠K的第二示例實施例的框圖。
[0009]圖5A-C是圖示了實現(xiàn)指令排序的激活、實施和去激活(deactive)的合適流水線級的若干實施例的框圖。
[0010]圖6是合適的激活指令格式的第一實施例的框圖。
[0011]圖7A是合適的激活指令格式的第二實施例的框圖。
[0012]圖7B是合適的實施指令格式的實施例的框圖。
[0013]圖8A是圖示了根據(jù)本發(fā)明的實施例的示例性有序流水線和示例性寄存器重命名、無序發(fā)布/運行流水線二者的框圖。
[0014]圖8B是圖示了根據(jù)本發(fā)明的實施例的包括在處理器中的有序架構(gòu)核的示例性實施例和示例性寄存器重命名、無序發(fā)布/運行架構(gòu)核二者的框圖。
[0015]圖9A是根據(jù)本發(fā)明的實施例的單個處理器核連同其到管芯上互連網(wǎng)絡(luò)的連接及其二級(L2)高速緩存的本地子集的框圖。
[0016]圖9B是根據(jù)本發(fā)明的實施例的圖9A中的處理器核的部分的放大視圖。
[0017]圖10是根據(jù)本發(fā)明的實施例的可以具有多于一個核,可以具有集成存儲器控制器,并且可以具有集成圖形的處理器的框圖。
[0018]圖11示出依照本發(fā)明的一個實施例的系統(tǒng)的框圖。
[0019]圖12示出依照本發(fā)明的實施例的第一更具體示例性系統(tǒng)的框圖。
[0020]圖13示出依照本發(fā)明的實施例的第二更具體示例性系統(tǒng)的框圖。
[0021]圖14示出依照本發(fā)明的實施例的SoC的框圖。
[0022]圖15是對比根據(jù)本發(fā)明的實施例的將源指令集中的二進制指令轉(zhuǎn)換成目標指令集中的二進制指令的軟件指令轉(zhuǎn)換器的使用的框圖。
【具體實施方式】
[0023]本文所公開的是指令次序?qū)嵤┲噶顚?、處理或?zhí)行指令對的處理器、在處理或執(zhí)行指令對時處理器所執(zhí)行的方法、以及合并處理或執(zhí)行指令對的一個或多個處理器的系統(tǒng)。在以下描述中,闡述大量具體細節(jié)(例如具體指令功能性、處理器配置、微架構(gòu)細節(jié)、操作序列等)。然而,可以在沒有這些具體細節(jié)的情況下實踐實施例。在其它實例中,并未詳細示出公知的電路、結(jié)構(gòu)和技術(shù)以避免使描述的理解晦澀難懂。
[0024]圖1是可操作成處理或執(zhí)行指令次序?qū)嵤┲噶顚?14的處理器100的實施例的框圖。在一些實施例中,處理器100可以是通用處理器(例如中央處理單元(CPU)或其它通用微處理器或在臺式、膝上型、平板和類似計算機中使用的類型的)。可替換地,處理器可以是專用處理器。僅舉幾個例子,合適的專用處理器的示例包括但不限于網(wǎng)絡(luò)處理器、通信處理器、密碼處理器、圖形處理器、協(xié)處理器、嵌入式處理器、數(shù)字信號處理器(DSP)和控制器(例如微控制器)。處理器可以是各種復雜指令集計算(CISC)處理器、各種精簡指令集計算(RISC)處理器、各種甚長指令字(VLIW)處理器、其各種混合或完全其它類型的處理器中的任一個。
[0025]還示出程序112。通過示例的方式,程序可以存儲在主存儲器或另一合適的存儲設(shè)備中。在操作期間,程序可以由處理器運行、執(zhí)行或以其它方式實行。處理器可以提取或以其它方式接收程序的指令。在一些實施例中,程序的指令可以是處理器的指令集的部分。指令集的指令可以表示相對高級的宏指令、匯編語言指令、機器級指令或以指令集級的控制信號,其可以提供給處理器以供運行,這與相對低級微指令、微操作或其它指令或由處理器從相對較高級指令解碼的控制信號相對。
[0026]在一些實施例中,處理器可以表示可操作成無序運行指令的無序(OoO)運行處理器100。上文在【背景技術(shù)】章節(jié)中討論了 OoO運行處理器。OoO運行處理器具有OoO運行流水線102。流水線包括有序前端104、無序運行部分106和有序后端108。這些流水線階段的特定單元或成分可以因?qū)崿F(xiàn)方式而不同。在一個代表性實施例中,有序前端可以包括指令提取單元或級(例如提取單元105 )、長度解碼單元或級、解碼單元或級、分配單元或級、重命名單元或級。在一個代表性實施例中,無序運行部分可以包括調(diào)度器單元或級(有時還稱為分派或發(fā)布)、(一個或多個)寄存器文件單元和存儲器單元或寄存器讀取/存儲器讀取級、(一個或多個)運行單元或級、(一個或多個)寄存器文件單元和存儲器單元或?qū)懟?存儲器寫入級。在一個代表性實施例中,有序后端可以包括異常處理級和引退或提交單元或級。這僅僅是一個特定示例并且要領(lǐng)會的是,本發(fā)明的范圍不限于該特定示例。其它實施例可以使用單元和/或流水線級的其它組合和配置。本領(lǐng)域中已知用于OoO運行處理器的單元和/或流水線級的任何組合或配置通常應當是合適的。
[0027]OoO運行處理器中的一項挑戰(zhàn)是甚至在處理器的OoO運行部分106內(nèi)維持以原始程序次序的某些指令偶爾是重要的或者至少是有用的。通過示例的方式,如果僅應當以原始程序次序更新或以其它方式訪問存儲器位置、經(jīng)映射的輸入-輸出值或其它資源的話,情況可能是這樣。有代表性地,如果以數(shù)據(jù)次序而不是程序次序更新存儲器位置,則可能出現(xiàn)錯誤(例如較陳舊/在先指令的寫入可能更新在較陳舊/在先指令附近無序運行的較新指令的寫入)。這樣的錯誤可能導致值不同于原始程序的意圖并且與其不一致。更一般地,如果指令是無序和/或以數(shù)據(jù)次序而不是有序和/或以程序次序運行,則在其中可能出現(xiàn)不正確或不一致的結(jié)果或者可能出現(xiàn)某個其它問題的各種可能情形中的任一個中,情況可能是這樣。
[0028]再次參照圖1,程序包括指令次序?qū)嵤┲噶顚?14。指令次序?qū)嵤┲噶顚Πせ钪噶?16和實施指令118。在一些實施例中,激活指令可以可操作成導致或造成處理器激活指令次序?qū)嵤?,并且實施指令可以可操作成導致或造成處理器實施指令次序。程序還包括其它指令120。增加的程序次序122由向下箭頭表示。在所圖示的實施例中,原始程序次序122指定在程序次序中激活指令116出現(xiàn)在實施指令118之前。而且,其它指令120在程序次序中出現(xiàn)在實施指令之后。如果期望的話,一個或多個指令(未示出)可以可選地以程序次序被包括在激活與實施指令之間。
[0029]如圖示中所示出的,處理器還包括指令次序?qū)嵤┠K110。指令次序?qū)嵤┠K可以以硬件(例如集成電路、晶體管或其它電路元件等)、固件(例如存儲在非易失性存儲器中的微代碼或其它較低級指令)、軟件(例如存儲在存儲器中的較高級指令)或其組合(例如潛在地與固件和/或軟件中的一個或多個組合的硬件)來實現(xiàn)。
[0030]在一些實施例中,指令次序?qū)嵤┠K110響應于指令次序?qū)嵤┲噶顚?14而可以可操作成防止以程序次序112出現(xiàn)在實施指令118之后的其它指令120在處理器100的無序運行部分106中在激活指令116之前被處理。指令對可以導致或造成處理器實施對在指令對之前和之后發(fā)布的指令或操作的指令排序約束。在一些實施例中,激活指令116可以可操作成在給定流水線級(諸如例如有序前端104中的級)處激活指令次序?qū)嵤?。預計到激活指令次序?qū)嵤┑牟煌绞讲⑶乙韵聦ζ溥M行進一步描述。在一些實施例中,實施指令118可以可操作成在給定流水線級(諸如例如有序前端104中的級)處實施指令次序。例如,在一些實施例中,實施指令可以在給定流水線級中被滯留(held up)在隊列中,并且從而防止實施指令以及防止其它較新的指令120前進通過流水線超出給定流水線級。一段時間之后,指令次序?qū)嵤┛梢员蝗ゼせ?,并且然后實施指令和其它較新的指令可以繼續(xù)前進通過流水線。有利地,這可以例如幫助實施指令排序,所述指令排序?qū)τ趯Υ鎯ζ魑恢没蚱渌Y源的訪問進行排序可能是有用的。
[0031]如之前所提到的,在一些實施例中,激活和實施指令可以表示處理器的指令集的指令。有利地,通過使用指令集的兩個指令(即指令集級指令),不存在對于執(zhí)行微代碼中的相關(guān)聯(lián)的指令排序操作或功能性的需要。在一方面中,這可以在RISC處理器和/或不可操作成使用微代碼(例如微指令或微操作)來執(zhí)行指令次序?qū)嵤┲噶顚?14的處理器(例如處理器可能不使用微代碼或者可能僅以不適合用于實現(xiàn)指令次序?qū)嵤┲噶顚Φ膬H有限或受約束的方式使用微代碼)中提供優(yōu)勢。然而,指令還可以可選地使用在CISC或其它類型的處理器中,包括可以可選地實現(xiàn)微代碼中的指令次序?qū)嵤┲噶顚Φ奶幚砥?。而且,指令對可以允許實踐者(例如軟件編程者)或軟件靈活地控制指令對的程序或代碼中的位置以達成期望的指令排序。
[0032]在一些實施例中,相比于僅影響單個信號量、互斥體(mutex)或共享變量的諸如比較和交換以及類似的指令之類的某些類型的指令,指令次序?qū)嵤┲噶顚Φ膶嵤├梢栽试S對針對多個、許多、任何數(shù)目的存儲器地址的訪問進行排序。在一些實施例中,相比于某些存儲器柵欄或存儲器屏障指令,指令次序?qū)嵤┲噶顚Φ膶嵤├梢詫嵤┒鄠€、許多或任何數(shù)目的不同類型的指令而不僅僅是存儲器訪問指令(例如存儲器加載、存儲器存儲、存儲器加載和存儲器存儲等)的次序。而且,存儲器柵欄指令典型地僅僅實施對存儲器的訪問的次序。相比之下,本文所公開的指令的實施例可以實施對存儲器的訪問的次序,以及實施針對其它事物的排序,諸如例如對寄存器的訪問、算術(shù)操作和/或處理指令的時間。此外,本文所公開的指令的實施例可以實施存儲器柵欄指令一般不能夠在其中實施次序的其它情形中的排序。作為示例,考慮具有兩個位置、第一位置X和第二位置Y的輸入/輸出(I/O)設(shè)備。寫入X可以允許讀取Y。存儲器柵欄指令可以保持出現(xiàn)在X之后一段時間的Y之間的一致性,但是不能保持相反情況。
[0033]為了避免使描述晦澀難懂,已經(jīng)示出和描述了相對簡單的處理器。處理器可以可選地包括在處理器中發(fā)現(xiàn)的其它公知組件。這樣的組件的示例包括但不限于分支預測單元、指令和數(shù)據(jù)高速緩存、第二或較高級高速緩存、指令和數(shù)據(jù)翻譯后備(lookaside)緩沖器、預提取緩沖器、寄存器重命名單元、指令調(diào)度單元、總線接口單元、引退單元、包括在處理器中的其它組件及其各種組合。存在處理器中的組件的字面上大量不同的組合和配置,并且實施例不限于任何特定組合或配置。實施例可以被包括在具有多個核、邏輯處理器或運行引擎的處理器中,其中的至少一個可操作成處理如本文所公開的指令次序?qū)嵤┲噶顚Α?br>[0034]圖2是處理或執(zhí)行指令次序?qū)嵤┲噶顚Φ膶嵤├奶幚砥髦械姆椒?26的實施例的框流程圖。在各種實施例中,方法可以由通用處理器、專用處理器或其它指令處理裝置或數(shù)字邏輯設(shè)備執(zhí)行。在一些實施例中,圖2的操作和/或方法可以由圖1的處理器執(zhí)行和/或在圖1的處理器內(nèi)執(zhí)行。本文針對圖1的處理器所描述的組件、特征和具體可選細節(jié)也可選地適用于圖2的操作和/或方法??商鎿Q地,圖2