0057] 然而,許多用戶級應用模塊或其他軟件模塊不需要足夠頻繁地使用64位存儲器指 針和/或不需要足夠頻繁地從存儲器中的任何地方訪問數(shù)據(jù),從而無法證明與使用64位存 儲器指針相關(guān)聯(lián)的額外的開銷是正當?shù)?。例如,當整個用戶級應用模塊或其他軟件模塊能 夠容納在存儲器的有限的連續(xù)范圍內(nèi)時,運通常可能是事實。作為具體示例,許多常用的用 戶級軟件模塊和其他模塊能夠被包含在存儲器的四千兆字節(jié)內(nèi)。32位的存儲器地址足W對 存儲器的連續(xù)的四千兆字節(jié)中的任何地方進行尋址。當軟件模塊(例如,要被最頻繁地訪問 的代碼和數(shù)據(jù))容納在可由32位的存儲器地址或指針尋址的四千兆字節(jié)內(nèi)時,使用較小的 32位存儲器地址可W比使用較大的64位存儲器地址更高效和/或更有效。有利的是,在64位 架構(gòu)處理器中使用較小的32位存儲器地址可有助于利用一般與64位架構(gòu)相關(guān)聯(lián)的增強的 特征,同時在合適時(例如,當軟件模塊容納在四千兆字節(jié)內(nèi)時)有選擇地幫助降低與使用 64位存儲器地址和/或使用較大的存儲器占用空間相關(guān)聯(lián)的不需要的或不必要的開銷。
[0058] 相比使用較大的指針(例如,64位指針),當使用較小的指針(例如,32位指針)時, 程序易于更快運行和/或使用更少的存儲器。一方面,通常需要較少的存儲器來存儲較小的 指針。另外,較小的指針一般占據(jù)處理器中所使用的高速緩存中的較少空間,從而加速對頻 繁使用的數(shù)據(jù)的訪問。結(jié)果,當使用小指針時,高速緩存可能能夠保存較大數(shù)量的此類較小 的指針和/或較多的數(shù)據(jù)。另外,在高速緩存中發(fā)現(xiàn)數(shù)據(jù)或指針的可能性將傾向于增大,此 類指針或數(shù)據(jù)中的更多指針或數(shù)據(jù)被保存在高速緩存中(例如,當使用較小的指針時),運 可W有助于實現(xiàn)增加的程序性能。此外,使用較少數(shù)據(jù)的程序傾向于使系統(tǒng)更快地運行。在 某些系統(tǒng)中,使用中的程序的所有代碼和數(shù)據(jù)的集合可能無法都容納在存儲器中??蒞臨 時地將程序的諸部分存儲在盤中,并在需要時(例如,在請求分頁(demand paging)的情況 下)將運些部分帶入存儲器中。然而,當程序較小時(諸如,當使用較小的指針時,可能是運 種情況),運些程序可能傾向于為當前不運行的其他程序留下更多空間W留在存儲器中,使 得不需要為了在存儲器中騰出空間而對此類程序進行頁面移出(page out)。一般而言,當 較少的分頁(paging)發(fā)生時,系統(tǒng)性能傾向于改善,因為運樣的分頁傾向于延遲程序執(zhí)行, 并可能傾向于延遲其他程序的輸入/輸出。相比64位存儲器地址,使用32位存儲器地址的其 他潛在優(yōu)點包括降低的功耗。
[0059] 圖5是計算機系統(tǒng)500的實施例的框圖,該計算機系統(tǒng)500包括用于執(zhí)行零擴展的 32位存儲器尋址的64位架構(gòu)處理器501。64位架構(gòu)處理器通過互連機制509與存儲器510禪 合。存儲器具有64位的可尋址范圍550。64位的可尋址范圍包括,作為其子集的較小的連續(xù) 32位的可尋址范圍552。32位的可尋址范圍可W具有約四千兆字節(jié)。軟件模塊554(例如,用 戶級應用或其他軟件)存儲在該32位的可尋址范圍內(nèi)。該軟件模塊具有32位的存儲器地址 512。
[0060] 64位處理器可W任選地具有本文中所公開的其他處理器(例如,圖1的處理器101) 的特性或特征。該64位架構(gòu)處理器包括依賴于模式的部分寬度加載系統(tǒng)513。依賴于模式的 部分寬度加載系統(tǒng)可W任選地具有與圖1的依賴于模式的部分寬度加載系統(tǒng)113的那些特 征和特性類似或相同的特征和特性。依賴于模式的部分寬度加載系統(tǒng)支持零擴展的32位加 載模式505。處理器還具有64位寄存器515。在某些實施例中,寄存器可W是可用于存儲器尋 址的寄存器,諸如,某些處理器中的通用寄存器,或其他處理器中的用于存儲器尋址的專用 寄存器。
[0061] 可W將32位加載指令502提供給依賴于模式的部分寬度加載系統(tǒng)。該32位加載指 令可W將32位存儲器地址512中的一個(表示部分寬度數(shù)據(jù))指定或W其他方式指示為源操 作數(shù),并可W將64位寄存器515指定或W其他方式指示為目的地操作數(shù)。響應于32位加載指 令502和零擴展的32位加載模式505,依賴于模式的部分寬度加載系統(tǒng)可W執(zhí)行零擴展的32 位加載操作519,該操作519包括:將所指示的32位存儲器地址512存儲到64位目的地寄存器 515的最低階的32位中;W及將零存儲在64位目的地寄存器515的最高階的32位中。
[0062] 隨后,可W將存儲器訪問指令556提供給處理器。該存儲器訪問指令可指示作為32 位加載指令502和/或操作519的結(jié)果的64位的零擴展的32位存儲器地址。例如,存儲器訪問 指令可指示目的地寄存器515,或可W將結(jié)果從目的地寄存器移到由該存儲器訪問指令指 示的另一個寄存器。響應于存儲器訪問指令556,處理器可W使用或基于64位的零擴展的32 位存儲器地址來提供存儲器訪問558(例如,從存儲器加載,向存儲器寫入,等等)。
[0063] 運僅僅是一個說明性示例。在其他實施例中,可W任選地使用具有除64位W外的 架構(gòu)的處理器。此外,在其他實施例中,還可W任選地使用具有除32位W外的尺寸的存儲器 地址。例如,在某些實施例中,可對128位架構(gòu)處理器和/或128位地址空間或?qū)ぶ纺J绞褂?128位的零擴展的64位存儲器地址。作為另一個示例,可W任選地對64位架構(gòu)處理器或64位 地址空間使用64位的零擴展的16位或48位指針。一般而言,可對較大架構(gòu)處理器或地址空 間使用零擴展的較小的指針或存儲器地址。
[0064] 用戶級應用模塊或其他無特權(quán)軟件模塊在適合改變部分寬度加載模式時(例如, 當它們計劃使用與當前存在的模式不同的模式時)一般需要具有改變部分寬度加載模式的 方式。運能W不同的方式來完成。在某些實施例中,部分寬度加載模式可W是可直接由用戶 級或無特權(quán)軟件模塊改變的。在其他實施例中,用戶級或無特權(quán)軟件模塊可能無法直接改 變部分寬度加載模式。相反,在某些實施例中,可W為特許軟件模塊(例如,操作系統(tǒng)模塊、 虛擬機監(jiān)視器模塊,等等)預留對部分寬度加載模式的改變。在此類實施例中,特許軟件模 塊可W提供接口(例如,服務、接口等)W允許用戶級或無特權(quán)軟件模塊來請求特許軟件模 塊改變部分寬度加載模式。
[0065] 圖6是示出用戶級軟件模塊670(或其他無特權(quán)軟件模塊)與操作系統(tǒng)模塊660(或 其他特許軟件模塊)之間的、用于改變部分寬度加載模式的交互的實施例的框圖。用戶級軟 件模塊包括元數(shù)據(jù)672,該元數(shù)據(jù)672包括使用給定的部分寬度加載模式的指示674。給定的 部分寬度加載模式可W是軟件模塊期望或計劃使用的部分寬度加載模式。作為一個示例, 元數(shù)據(jù)可包括由用戶級軟件模塊用來將關(guān)于其自身的信息傳遞給操作系統(tǒng)模塊660的目標 模塊格式或其他數(shù)據(jù)結(jié)構(gòu)。例如,元數(shù)據(jù)模塊可包括用于指示所期望的部分寬度加載模式 的標志或一個或多個位。操作系統(tǒng)模塊包括程序加載器模塊662。程序加載器模塊和/或操 作系統(tǒng)模塊可操作W檢查元數(shù)據(jù),包括檢查指示674。操作系統(tǒng)模塊可包括部分寬度加載模 式變化器模塊664,該部分寬度加載模式變化器模塊664可操作W將處理器的部分寬度加載 模式605改變?yōu)樗甘镜牟糠謱挾燃虞d模式674。例如,可W在處理器的配置或控制寄存器 中改變部分寬度加載模式。
[0066] 在某些實施例中,處理器可W具有包括用于改變部分寬度加載模式的指令的指令 集。在此示例中,該指令將是為操作系統(tǒng)模塊或類似的特許級軟件模塊預留的特許級指令, 但是在其他實施例中,該指令可W是能夠由用戶級軟件模塊使用的用戶級指令。當將改變 部分寬度加載模式時,可由部分寬度加載模式變化器模塊664使用使用該指令。可由處理器 解碼并實行或W其他方式執(zhí)行該指令,W便將模式從起始模式改變?yōu)榱硪环N不同的模式。 在某些實施例中,在此類模式改變之后,可W任選地執(zhí)行跳轉(zhuǎn)W在已更新的不同模式下取 出并解碼指令,而不是使用已經(jīng)在流水線中的、在當執(zhí)行該執(zhí)行指令之前就存在的過時的 模式下已經(jīng)解碼的那些指令。在某些實施例中,指令集還可w具有用于讀取部分寬度加載 模式的指令。此指令可W是能夠由用戶級軟件模塊使用的用戶級指令,或為操作系統(tǒng)模塊 或者類似的特許級軟件模塊預留的特許級指令。指令可W是經(jīng)解碼的,并且在實行或W其 他方式執(zhí)行時可W讀取部分寬度加載模式(例如,讀取寄存器中的一個或多個位)。作為示 例,用戶級代碼模塊或其他軟件模塊可W使用此類指令來獲悉部分寬度加載模式。
[0067] 上文討論了支持對64位處理器進行的32位尋址的一種部分寬度加載模式的可能 的使用。操作系統(tǒng)模塊、中斷處理程序模塊W及潛在的其他軟件可W主要使用64位存儲器 尋址,而不是零擴展的32位存儲器尋址。結(jié)果,操作系統(tǒng)模塊、中斷處理程序模塊等可W不 需要使用提供零擴展的32位加載的部分寬度加載模式,但相反可W使用針對相同指令或操 作碼提供替換類型的32位加載的部分寬度加載模式,諸如,符號擴展的32位加載或合并的 32位加載。如圖所示,在某些實施例中,處理器可包括在某些條件下用于導致或引起自動回 退到默認部分寬度加載模式的默認部分寬度加載模式回退邏輯或單元676。此類條件的示 例可包括:從執(zhí)行用戶級代碼到操作系統(tǒng)代碼的切換或過渡;在檢測到中斷678之后或當向 中斷處理程序模塊668報告中斷67別寸;在由中斷處理程序模塊進行中斷處理的開始時,等 等。單元或邏輯可在硬件或在潛在地與某個固件和/或可能某個軟件組合的硬件中實現(xiàn)。在 默認部分寬度加載模式中,可將指令或操作碼視為例如符號擴展的32位加載或合并的32位 加載,而不是零擴展的32位加載。在某些實施例中,默認部分寬度加載模式回退邏輯或單元 還可W使部分寬度加載模式自動地從默認部分寬度加載模式往回恢復到在切換到操作系 統(tǒng)代碼或中斷處理之前(例如,在從中斷679的返回之后)就存在的部分寬度加載模式。返回 指令可W在返回時讀取部分寬度加載模式來確定如何解碼部分寬度加載指令。
[0068] 圖7是可W由操作系統(tǒng)模塊、特許模塊、或其他系統(tǒng)級模塊執(zhí)行的方法780的實施 例的框圖。該方法包括:在框781處,檢查軟件模塊的元數(shù)據(jù)。運包括檢查將由處理器用來執(zhí) 行部分寬度加載指令的處理器的部分寬度加載模式的指示。部分寬度加載指令用于將存儲 器位置指示為源操作數(shù),并且將寄存器指示為目的地操作數(shù)。
[0069] 該方法包括:在框782處,將處理器的部分寬度加載模式改變?yōu)樗甘镜牟糠謱挾?加載模式。在某些實施例中,改變部分寬度加載模式可用于控制將由處理器存儲在所指示 的寄存器的、不用于存儲從存儲器加載的數(shù)據(jù)的部分寬度的部分中的位值的改變。在某些 實施例中,操作系統(tǒng)模塊或其他系統(tǒng)級模塊可W維護元數(shù)據(jù)組W記錄或跟蹤哪些程序使用 哪些部分寬度加載模式。某些程序在執(zhí)行部分寬度加載指令(例如,給定的操作碼)時,可W 使用一種部分寬度加載模式,而其他程序在執(zhí)行該部分寬度加載指令(例如,相同的給定操 作碼)時,可W使用另一種不同的部分寬度加載模式。當在多個程序之間切換和/或當從中 斷返回時,操作系統(tǒng)模塊或其他模塊可W訪問元數(shù)據(jù)來確定要將處理器置于哪種適用于程 序的部分寬度加載模式。作為示例,在某些實施例中,當切換到期望使用不同模式的程序 時,操作系統(tǒng)可W使用指令來改變模式。作為示例,在某些實施例中,操作系統(tǒng)可W使用不 同的指令來讀取當前模式W獲悉在切換程序時是否需要改變模式。
[0070] 在某些實施例中,用戶級應用模塊或其他無特權(quán)軟件模塊可包括用于向調(diào)試器模 塊傳遞軟件模塊期望或計劃使用哪種部分寬度加載模式的調(diào)試信息模塊或其他元數(shù)據(jù)模 塊。調(diào)試器模塊可W訪問并檢查此調(diào)試信息模塊或其他元數(shù)據(jù)模塊來確定將由軟件使用的 部分寬度加載模式。運可W允許調(diào)試器模塊正確地解釋處理器將如何處理指令。
[0071] 為描述簡明起見,在本文中通常描述操作碼的兩種不同的模式和/或含義。然而, 應當理解,對于給定的操作碼,其他實施例可W使用Ξ種、四種或更多種不同的模式和/或 含義。作為示例,處理器可W具有兩個或更多位W指示對于給定的操作碼應當使用多個此 類不同的含義中的哪個含義。
[0072] 在本文中已強調(diào)了對部分寬度加載指令的不同解釋。在其他實施例中,可將除部 分寬度加載指令之外的另一種類型的指令解釋為另一模式中的部分寬度加載指令(例如, 零擴展的部分寬度加載指令)。 巧07引示例性核架構(gòu)、處理器和計算機架構(gòu)
[0074]能W不同的方式,出于不同目的,W及在不同的處理器中實現(xiàn)處理器核。例如,此 類核的實現(xiàn)可W包括:1)旨在用于通用計算的通用有序核;2)旨在用于通用計算的高性能 通用無序核;3)旨在主要用于圖形和/或科學(吞吐量)計算的專用核。不同處理器的實現(xiàn)可 包括:1)CPU,其包括旨在用于通用計算的一個或多個通用有序核和/或旨在用于通用計算 的一個或多個通用無序核;W及2)協(xié)處理器,其包括旨在主要用于圖形和/或科學(吞吐量) 的一個或多個專用核。此類不同的處理器導致不同的計算機系統(tǒng)架構(gòu),不同的計算機系統(tǒng) 架構(gòu)可包括:1)在與CPU分開的忍片上的協(xié)處理器;2)在與CPU相同的封裝中但分開的管忍 上的協(xié)處理器;3)在與CPU相同的管忍上的協(xié)處理器(在該情況下,有時將此類協(xié)處理器稱 為諸如集成圖形和/或科學(吞吐量)邏輯之類的專用邏輯,或被稱為專用核);W及4)可W 將所描述的CPU(有時被稱為應用核或應用處理器)、W上描述的協(xié)處理器和附加功能包括 在同一管忍上的忍片上系統(tǒng)。接著描述示例性核架構(gòu),隨后描述示例性處理器和計算機架 構(gòu)。
[007引示例性核架構(gòu) [0076] 有序和無序核框圖
[OOW]圖8A是示出根據(jù)本發(fā)明的各實施例的示例性有序流水線和示例性的寄存器重命 名的無序發(fā)布/執(zhí)行流水線的框圖。圖8B是示出根據(jù)本發(fā)明的各實施例的要包括在處理器 中的有序架構(gòu)核的示例性實施例和示例性的寄存器重命名的無序發(fā)布/執(zhí)行架構(gòu)核的框 圖。圖8A-B中的實線框示出有序流水線和有序核,而任選增加的虛線框示出寄存器重命名 的無序發(fā)布/執(zhí)行流水線和核??紤]到有序方面是無序方面的子集,將描述無序方面。
[0078] 在圖8A中,處理器流水線800包括取出級802、長度解碼級804、解碼級806、分配級 808、重命名級810、調(diào)度(也稱為分派或發(fā)布)級812、寄存器讀取/存儲器讀取級814、執(zhí)行級 816、寫回/存儲器寫入級818、異常處理級822W及提交級824。
[0079] 圖8B示出了處理器核890,該處理器核890包括禪合到執(zhí)行引擎單元850的前端單 元830,執(zhí)行引擎單元850和前端單元830兩者都禪合到存儲器單元870。核890可W是精簡指 令集計算(RISC)核、復雜指令集計算(CISC)核、超長指令字(VLIW)核或混合或替代核類型。 作為又一選項,核890可W是專用核,諸如例如,網(wǎng)絡或通信核、壓縮引擎、協(xié)處理器核、通用 計算圖形處理器單元(GPGPU)核、圖形核,等等。
[0080] 前端單元830包括禪合到指令高速緩存單元834的分支預測單元832,指令高速緩 存單元834禪合到指令轉(zhuǎn)換后備緩沖器(TLB)836,指令轉(zhuǎn)換后備緩沖器836禪合到指令取出 單元838,指令取出單元838禪合到解碼單元840。解碼單元840(或解碼器)可解碼指令,并生 成從原始指令解碼出的、或W其他方式反映原始指令的、或從原始指令導出的一個或多個 微操作、微代碼進入點、微指令、其他指令、或其他控制信號作為輸出。解碼單元840可使用 各種不同的機制來實現(xiàn)。合適的機制的示例包括但不限于查找表、硬件實現(xiàn)、可編程邏輯陣 列(PLA)、微代碼只讀存儲器(ROM)等。在一個實施例中,核890包括(例如,在解碼單元840中 或W其他方式在前端單元830內(nèi)的)存儲某些宏指令的微代碼的微代碼ROM或其他介質(zhì)。解 碼單元840禪合到執(zhí)行引擎單元850中的重命名/分配器單元852。
[0081] 執(zhí)行引擎單元850包括禪合到引退單元852和一個或多個調(diào)度器單元的集合856的 的重命名/分配器單元854。調(diào)度器單元856表示任意數(shù)量的不同