微處理器以及微處理器操作方法
【專利摘要】一種微處理器以及微處理器操作方法。該微處理器包括預(yù)測單元及控制單元。控制單元用以控制預(yù)測單元累計(jì)已執(zhí)行的指令的特性的歷史記錄,檢測自運(yùn)行第一線程至運(yùn)行第二線程之間的第一轉(zhuǎn)變,控制預(yù)測單元于運(yùn)行第二線程時(shí)選擇性地暫停累計(jì)歷史記錄并進(jìn)行預(yù)測,還用以控制預(yù)測單元將響應(yīng)于第一轉(zhuǎn)變的歷史記錄的第一狀況存儲至存儲器,檢測從運(yùn)行第二線程至第三線程的第二轉(zhuǎn)變,及檢測第一和第三線程的處理是否部分相同。當(dāng)?shù)谝缓偷谌€程的處理部分相同,預(yù)測單元恢復(fù)累計(jì)歷史記錄及恢復(fù)利用歷史記錄進(jìn)行預(yù)測。當(dāng)?shù)谝缓偷谌€程的處理部分不相同,將響應(yīng)于第二轉(zhuǎn)變的歷史記錄的第二狀況載入預(yù)測單元,及恢復(fù)累計(jì)歷史記錄及恢復(fù)利用歷史記錄進(jìn)行預(yù)測。
【專利說明】微處理器以及微處理器操作方法
[0001] 本申請是申請日為2014年6月6日、申請?zhí)枮?01410251303. 0、發(fā)明名稱為"微 處理器以及微處理器操作方法"的發(fā)明專利申請的分案申請。
【技術(shù)領(lǐng)域】
[0002] 本發(fā)明涉及一種微處理器以及其操作方法,特別涉及根據(jù)微處理器中所累計(jì)已執(zhí) 行的指令的特性的歷史記錄進(jìn)行預(yù)測的微處理器以及其操作方法。
【背景技術(shù)】
[0003] 現(xiàn)今微處理器利用不同的預(yù)測技術(shù)以改進(jìn)執(zhí)行效能。舉例來說,分支預(yù)測器 (branch predictor)用以預(yù)測是否會執(zhí)行分支指令,若執(zhí)行分支指令,則預(yù)測分支指令的 目標(biāo)地址。動態(tài)分支預(yù)測累計(jì)不同分支指令執(zhí)行所輸出的歷史記錄,以及根據(jù)歷史記錄進(jìn) 行預(yù)測。動態(tài)分支預(yù)測的預(yù)測精準(zhǔn)度很大程度與可累計(jì)的歷史記錄的數(shù)量有關(guān)。只要在既 定時(shí)間內(nèi)通過程序執(zhí)行小到可以包含在預(yù)測歷史記錄中的一組分支指令,則精準(zhǔn)度可能非 常尚。
[0004] 然而,預(yù)測精準(zhǔn)度會因某些事件而大幅降低。上述事件之一為當(dāng)其他程序運(yùn)行時(shí), 目前正在運(yùn)行的程序暫時(shí)中斷的狀況。舉例來說,通過網(wǎng)絡(luò)接口控制器接收分組,將發(fā)出一 中斷信號至處理器。處理器將操作系統(tǒng)的控制轉(zhuǎn)換為提供中斷,這將造成目前所運(yùn)行的程 序A暫時(shí)中斷,直到操作系統(tǒng)將控制恢復(fù)以運(yùn)行程序A為止。當(dāng)處理器執(zhí)行操作系統(tǒng)的分 支指令時(shí),將影響程序A的分支預(yù)測的歷史記錄。對程序A的預(yù)測分支而言,很有可能會降 低的分支預(yù)測器的精準(zhǔn)度。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明一實(shí)施例提供一種微處理器。微處理器包括一預(yù)測單元以及一控制單元。 控制單元用以控制預(yù)測單元累計(jì)由微處理器所執(zhí)行的指令的特性的歷史記錄,以及在微處 理器運(yùn)行第一線程時(shí)根據(jù)歷史記錄預(yù)測后續(xù)指令。控制單元還檢測自運(yùn)行第一線程至運(yùn)行 與第一線程不同的第二線程(thread)之間的第一轉(zhuǎn)變??刂茊卧€控制預(yù)測單元在運(yùn)行 第二線程時(shí)選擇性地暫停累計(jì)歷史記錄并利用歷史記錄進(jìn)行預(yù)測??刂茊卧靡钥刂祁A(yù)測 單元將響應(yīng)于第一轉(zhuǎn)變的預(yù)測單元的歷史記錄的第一狀況存儲至存儲器??刂茊卧獧z測從 運(yùn)行第二線程至第三線程的第二轉(zhuǎn)變,以及檢測第一線程以及第三線程的處理是否部分相 同。當(dāng)?shù)谝痪€程以及第三線程的處理部分相同,預(yù)測單元恢復(fù)累計(jì)上述歷史記錄及恢復(fù)利 用歷史記錄進(jìn)行預(yù)測。當(dāng)?shù)谝痪€程以及第三線程的處理部分不相同,預(yù)測單元將響應(yīng)于第 二轉(zhuǎn)變的存儲器的歷史記錄的第二狀況載入至預(yù)測單元,以及預(yù)測單元恢復(fù)累計(jì)歷史記錄 及恢復(fù)利用歷史記錄進(jìn)行預(yù)測。
[0006] 本發(fā)明另一實(shí)施例提供一種執(zhí)行微處理器的方法。方法包括累計(jì)由微處理器所 執(zhí)行的指令的特性的歷史記錄,以及于微處理器運(yùn)行第一線程時(shí)根據(jù)歷史記錄預(yù)測后續(xù)指 令。方法還包括檢測自運(yùn)行第一線程至運(yùn)行第二線程之間的第一轉(zhuǎn)變。方法還包括于運(yùn)行 第二線程時(shí)選擇性地暫停累計(jì)歷史記錄并利用歷史記錄進(jìn)行預(yù)測。方法還包括預(yù)測單元將 響應(yīng)于第一轉(zhuǎn)變的預(yù)測單元的歷史記錄的第一狀況存儲至存儲器。方法還包括檢測從運(yùn)行 第二線程至第三線程的第二轉(zhuǎn)變,以及檢測第一線程以及第三線程的處理是否部分相同。 當(dāng)?shù)谝痪€程以及第三線程的處理部分相同,預(yù)測單元恢復(fù)累計(jì)上述歷史記錄及恢復(fù)利用歷 史記錄進(jìn)行預(yù)測。當(dāng)?shù)谝痪€程以及第三線程的處理部分不相同,預(yù)測單元將響應(yīng)于第二轉(zhuǎn) 變的存儲器的歷史記錄的第二狀況載入至預(yù)測單元,以及預(yù)測單元恢復(fù)累計(jì)歷史記錄及恢 復(fù)利用歷史記錄進(jìn)行預(yù)測。
【專利附圖】
【附圖說明】
[0007] 圖1是顯示一微處理器的方塊圖。
[0008] 圖2是描述圖1所示的微處理器的操作流程圖。
[0009] 圖3是根據(jù)一替代實(shí)施例描述圖1所示的微處理器的操作流程圖。
[0010] 圖4是根據(jù)另一替代實(shí)施例描述圖1所示的微處理器的操作流程圖。
[0011] 【符號說明】
[0012] 100?微處理器
[0013] 102?分支預(yù)測單元
[0014] 104?數(shù)據(jù)預(yù)取單元
[0015] 106?存儲沖突預(yù)測單元
[0016] 108?歷史記錄存儲器
[0017] 109?預(yù)測單元
[0018] 111?現(xiàn)有特權(quán)等級寄存器
[0019] 112?保存最佳化信息的存儲器
[0020] 113?引退指令計(jì)數(shù)器
[0021] 114?效能計(jì)數(shù)器
[0022] 124?控制單元
[0023] 132A、132B、132C?預(yù)測歷史記錄
[0024] 202、212、222、232、242、311、313、315、333、335、413、433、435 ?流程方塊
【具體實(shí)施方式】
[0025] 以下所述的實(shí)施例藉由選擇性暫停預(yù)測歷史記錄的累計(jì),以及當(dāng)暫停動態(tài)預(yù)測 時(shí),通過預(yù)測單元(例如分支預(yù)測器、數(shù)據(jù)預(yù)取器(data prefetcher)以及存儲沖突檢測 預(yù)測器(store collision detection predictor))利用利于靜態(tài)預(yù)測的預(yù)測歷史記錄進(jìn) 行預(yù)測,以改進(jìn)微處理器的效能。更具體地,當(dāng)微處理器運(yùn)行一些線程(thread,又稱之為 "執(zhí)行緒")但非其他時(shí),可能暫停預(yù)測歷史記錄累計(jì)(prediction history accumulation) 以及使用。舉例來說,根據(jù)運(yùn)行線程(thread,又稱之為"執(zhí)行緒")的特權(quán)等級選擇暫停, 更具體地,線程是否運(yùn)行于管理者特權(quán)等級,例如于x86架構(gòu)處理器下的目前特權(quán)等級 (current privilege level,CPL)的第0級(亦被稱為ring 0)。舉另一例來說,根據(jù)線 程的類型選擇暫停,例如線程是否為中斷處理程序(interrupt handler)。舉另一例來說, 暫停的選擇可根據(jù)是否此轉(zhuǎn)換到一新的線程的動作回應(yīng)一系統(tǒng)調(diào)用(system call)指令而 設(shè)定。舉另一例來說,微處理器搜集有關(guān)線程的前一執(zhí)行實(shí)例的信息,以及根據(jù)上述信息選 擇暫停,例如指令長度以及效能信息。舉另一例來說,根據(jù)線程的識別碼選擇暫停。線程的 識別碼(identity)可根據(jù),例如,造成轉(zhuǎn)變的事件的類型、當(dāng)事件發(fā)生時(shí)處理器的架構(gòu)狀 態(tài)、以及前述兩者的結(jié)合而決定。事件的類型可包括,例如,系統(tǒng)調(diào)用的執(zhí)行、軟件中斷指 令的執(zhí)行、內(nèi)部特權(quán)(inter-privilege)或者任務(wù)切換程序調(diào)用(task switch procedure call)的執(zhí)行、以及例外情況的檢測。此外,微處理器可在暫停預(yù)測歷史記錄累計(jì)以及使用 期間將預(yù)測歷史存儲以及還原至局部存儲器(local storage)。
[0026] 注釋:
[0027] 預(yù)測單元為微處理器的硬件、軟件、或者硬件以及軟件的結(jié)合,用以預(yù)測有關(guān)運(yùn) 行在處理器的指令流所將采取的動作。預(yù)測可包括(但非以此為限)預(yù)測分支指令是否 指示微處理器進(jìn)行分支;預(yù)測分支指令的目標(biāo)地址;預(yù)測藉由指令流(instructions of the stream)所存取的數(shù)據(jù);預(yù)測是否會發(fā)生存儲沖突(store collision)。預(yù)測單元 根據(jù)由微處理器所執(zhí)行的指令的特性的歷史記錄進(jìn)行預(yù)測,又可稱為動態(tài)預(yù)測(dynamic prediction)。當(dāng)微處理器執(zhí)行指令流時(shí),預(yù)測單元累計(jì)歷史記錄。歷史記錄可包括(但 非以此為限)無論分支指令是否指示微處理器進(jìn)行分支的執(zhí)行結(jié)果(outcome);作用分支 指令(taken buanch instruction)的目標(biāo)地址;藉由指令流所讀取或者存儲的數(shù)據(jù)的地 址;與指定快取存儲器位置的存儲指令有關(guān)的信息,例如存儲指令的地址、用以計(jì)算存儲地 址的來源的識別符(identifier)、存儲數(shù)據(jù)所依賴的指令的重排序緩沖器索引(reorder buffer index)、先前與存儲指令沖突的載入指令的地址以及重排序緩沖器索引、沖突載 入以及存儲指令之間的重排序緩沖器索引差量(delta)、沖突載入指令重復(fù)的次數(shù)的指 標(biāo)(indicator)。預(yù)測單元也可不根據(jù)歷史記錄進(jìn)行預(yù)測,又可稱為靜態(tài)預(yù)測(static prediction)〇
[0028] 微處理器的特權(quán)等級由微處理器的指令集架構(gòu)(instruction set architecture)所定義,以及控制目前所運(yùn)行的程序?qū)τ谙到y(tǒng)資源的存取,例如存儲器區(qū) 域、I/O端口以及指令集的特定指令(certain instruction)。
[0029] 線程為由微處理器所執(zhí)行的指令的序列。
[0030] 程序?yàn)榫€程,以及其相關(guān)的狀態(tài)系其他程序共同由操作系統(tǒng)所管理。操作系統(tǒng)將 處理識別符分配至程序。
[0031] 請參閱圖1,圖1是顯示微處理器100的方塊圖。微處理器100包括預(yù)測單元109。 預(yù)測單元109耦接至控制單元124以及預(yù)測歷史記錄存儲器108??刂茊卧?24耦接至引 退指令計(jì)數(shù)器(retired instruction counter) 113、效能計(jì)數(shù)器114、現(xiàn)有特權(quán)等級寄存器 (current privilege level register) 111、以及保存最佳化信息的存儲器(storage for holding optimization information) 112。在一實(shí)施例中,微處理器100包括一個(gè)或多個(gè) 功能單元的管線(未顯示),具有指令快?。╥nstruction cache)、指令轉(zhuǎn)換單元或者指令 解碼器、寄存器重命名單元(register renaming unit)、保留站(reservation station)、 數(shù)據(jù)快取、執(zhí)行單元、存儲器子系統(tǒng)(memory subsystem)以及具有重排序緩沖器的引退單 元。優(yōu)選地,微處理器100包括超標(biāo)量(superscalar)、無序執(zhí)行微架構(gòu)(out-of-order execution microarchitecture)。預(yù)測單元109可并入微處理器100的各種功能單元中或 者作為功能單元。
[0032] 預(yù)測單元109包括硬件、軟件或者硬件以及軟件的結(jié)合。預(yù)測單元109具有分支 預(yù)測單元102、數(shù)據(jù)預(yù)取單元104以及存儲沖突預(yù)測單元106,分支預(yù)測單元102包括用以 存儲預(yù)測歷史記錄132A的存儲陣列,數(shù)據(jù)預(yù)取單元104包括用以存儲預(yù)測歷史記錄132B 的存儲陣列,以及存儲沖突預(yù)測單元106包括用以存儲預(yù)測歷史記錄132C的存儲陣列。預(yù) 測歷史記錄單獨(dú)參考預(yù)測歷史記錄132A?C中的一個(gè)或者集體性參考多個(gè)預(yù)測歷史記錄 132A?C。預(yù)測單元109分別使用預(yù)測歷史記錄132A?C中的一個(gè)以作出與指令或者數(shù)據(jù) 處理有關(guān)的預(yù)測,以通過各別的操作嘗試改進(jìn)效能和(或)減少微處理器100的功率消耗。 更具體地,分支預(yù)測單元102累計(jì)指令地址的歷史記錄、方位(執(zhí)行(taken)或者未執(zhí)行)、 以及由微處理器100所執(zhí)行的分支指令的目標(biāo)地址,以致能分支預(yù)測單元102動態(tài)預(yù)測分 支指令之后續(xù)執(zhí)行狀況的方向以及目標(biāo)地址。動態(tài)分支預(yù)測技術(shù)為本【技術(shù)領(lǐng)域】所已知的分 支預(yù)測技術(shù)。數(shù)據(jù)預(yù)取單元104藉由程序指令將存取的歷史記錄累計(jì)至快取存儲器區(qū)域以 檢測存儲器存取模式(pattern),以預(yù)測未來哪個(gè)來自快取存儲器區(qū)域的數(shù)據(jù)會通過程序 進(jìn)行存取,并在程序請求數(shù)據(jù)之前將預(yù)測的數(shù)據(jù)自系統(tǒng)存儲器預(yù)取至微處理器100的快取 存儲器以減少存儲器的存取時(shí)間(因?yàn)橄到y(tǒng)存儲器的延遲大于快取存儲器的延遲)。動態(tài) 數(shù)據(jù)預(yù)取技術(shù)為本【技術(shù)領(lǐng)域】所已知的數(shù)據(jù)預(yù)取技術(shù)。存儲沖突預(yù)測單元106累計(jì)指令快取 存儲器位置的存儲指令的歷史記錄,以預(yù)測存儲沖突何時(shí)會發(fā)生。存儲沖突發(fā)生在當(dāng)較新 的載入指令指定數(shù)據(jù)以覆蓋較舊的存儲指令時(shí)。存儲沖突的預(yù)測可致能微處理器100預(yù)測 性地將數(shù)據(jù)自存儲指令轉(zhuǎn)移(forward)至載入指令,和(或)避免執(zhí)行抵觸(colliding) 載入指令使較舊的存儲指令失序。值得注意的是,上述實(shí)施例并非用以限制預(yù)測單元的上 述特定型式,但可能包括藉由微處理器100執(zhí)行以累計(jì)指令的特性的歷史記錄的其他型式 的預(yù)測單元,可有效地致能預(yù)測單元進(jìn)行有關(guān)后續(xù)執(zhí)行指令的預(yù)測或者執(zhí)行其他預(yù)測操作 以嘗試增加處理器100的效能和(或)降低其功率消耗。
[0033] 此外由各個(gè)預(yù)測單元109進(jìn)行動態(tài)預(yù)測,即為利用預(yù)測歷史記錄132A?C中的一 個(gè)進(jìn)行預(yù)測,各個(gè)預(yù)測單元109也可用以進(jìn)行靜態(tài)預(yù)測,即為不通過利用預(yù)測歷史記錄進(jìn) 行預(yù)測。舉例來說,在一實(shí)施例中,分支預(yù)測單元102對所有目標(biāo)地址為反向(backward) 的分支指令(舉例來說,偏移為負(fù)值的相關(guān)分支)進(jìn)行靜態(tài)預(yù)測,因?yàn)椴⒉恍枰魏蜗惹八?執(zhí)行指令的歷史記錄,以及并不會對所有目標(biāo)地址為前向(forward)的分支指令進(jìn)行靜態(tài) 預(yù)測。舉另一例來說,在一實(shí)施例中,當(dāng)數(shù)據(jù)預(yù)取單元104檢測到程序存取快取存儲器時(shí), 需要下一時(shí)序(sequential)的數(shù)據(jù)的快取線以進(jìn)行預(yù)測,因此數(shù)據(jù)預(yù)取單元104預(yù)取下一 時(shí)序的數(shù)據(jù)的快取線。靜態(tài)預(yù)測方法為中央處理單元的已知技術(shù)。
[0034] 在一實(shí)施例中,預(yù)測單元109利用預(yù)測歷史記錄存儲器108存儲預(yù)測歷史記錄 132A?C以響應(yīng)導(dǎo)致微處理器100自運(yùn)行一線程轉(zhuǎn)換至運(yùn)行另一線程的事件,舉例來說,自 使用者特權(quán)等級轉(zhuǎn)換至管理者特權(quán)等級,以及還原預(yù)測歷史記錄132A?C以響應(yīng)導(dǎo)致微處 理器100自管理者特權(quán)等級轉(zhuǎn)換回使用者特權(quán)等級的事件,優(yōu)選地為當(dāng)在執(zhí)行轉(zhuǎn)換至管理 者特權(quán)等級時(shí),恢復(fù)至一不同的使用者程序而非先前所運(yùn)行處理,下列將提出更詳細(xì)的描 述。
[0035] 現(xiàn)有特權(quán)等級寄存器111存儲微處理器100的現(xiàn)有特權(quán)等級。在一實(shí)施例中,微處 理器100基本上符合X86的架構(gòu),其他為Intel IA-32架構(gòu)和(或)Intel 64架構(gòu)(上述的 架構(gòu)詳述于"Intel Mand IA-32Architectures Software Developer's Manual,Combined Volumes:1,2A,2B,2C,3B and 3C, Order Number 325464-043US, May 2012, by the Intel Corporation of Santa Clara,California"中)。特別的是,在x86的實(shí)施例中,現(xiàn)有特權(quán) 等級寄存器111用以指示微處理器100是否運(yùn)行在現(xiàn)有特權(quán)等級〇、1、2或者3,即為在第0 級、第1級、第2級或者第3級。第0級為最優(yōu)先的特權(quán)等級,以及第3級為最小的特權(quán)等 級(使用者特權(quán)等級)。第〇級、第1級以及第2級為管理者特權(quán)等級。
[0036] 在一指令引退時(shí),引退指令計(jì)數(shù)器113遞增。將微處理器100開始運(yùn)行另一不同的 線程(例如離開第〇級)的引退指令計(jì)數(shù)器的值減去當(dāng)微處理器100開始運(yùn)行線程時(shí)(例 如進(jìn)入第0級)的引退指令計(jì)數(shù)器113的值,使控制單元124可根據(jù)上述的值決定有多少 指令藉由線程引退,下列將提出更詳細(xì)的敘述。在一實(shí)施例中,指令計(jì)數(shù)器113計(jì)算微指令 引退的數(shù)量(即為架構(gòu)指令,例如x86指令),然而在另一實(shí)施例中,指令計(jì)數(shù)器113計(jì)算微 指令引退的數(shù)量(即為由微處理器100的指令轉(zhuǎn)換器(instruction translator)自微指 令轉(zhuǎn)換為由微處理器100的微架構(gòu)指令集所定義的非架構(gòu)指令,以及上述非架構(gòu)指令由微 處理器100的執(zhí)行單元所執(zhí)行)。
[0037] 效能計(jì)數(shù)器114包括多個(gè)計(jì)數(shù)器,用以計(jì)算微處理器100有關(guān)效能和(或)功率 消耗的情況。在一實(shí)施例中,效能計(jì)數(shù)器114計(jì)算預(yù)測分支指令;正確地預(yù)測分支指令;非 正確地預(yù)測分支指令;由數(shù)據(jù)預(yù)取所分配的快取線;由非預(yù)取機(jī)制所分配的快取線,例如 需求載入/存儲或者直接存儲器存?。╠irect memory access,DMA)請求;程序存取至由數(shù) 據(jù)預(yù)取所分配的快取線;在使用前被驅(qū)除(evict)的由數(shù)據(jù)預(yù)取所分配的快取線;存儲沖 突預(yù)測;實(shí)際存儲沖突檢測。
[0038] 最佳化信息112用以選擇性地暫停累計(jì),以及選擇性地使用預(yù)測歷史記錄132A? C,舉例來說,在管理者等級操作期間,將詳述于與圖3的相關(guān)的實(shí)施例中。
[0039] 控制單元124包括硬件、軟件、或者硬件以及軟件的結(jié)合。根據(jù)其輸入(主要為現(xiàn) 有特權(quán)等級111、最佳化信息112、引退指令計(jì)數(shù)器113、效能計(jì)數(shù)器114、線程轉(zhuǎn)換事件類 型、以及架構(gòu)狀態(tài)),控制單元124控制預(yù)測單元109繼續(xù)或者暫停累計(jì)其所對應(yīng)的預(yù)測歷 史記錄132A?C中的一個(gè),以及利用預(yù)測歷史記錄132A?C和(或)自預(yù)測歷史記錄存 儲器108存儲/還原的預(yù)測歷史記錄132A?C進(jìn)行預(yù)測。在一實(shí)施例中,控制單元124包 括硬件狀態(tài)機(jī)器、微編碼或者硬件狀態(tài)機(jī)器與微編碼的結(jié)合。在一實(shí)施例中,微編碼包括由 微處理器100的執(zhí)行單元所執(zhí)行的指令。
[0040] 在一實(shí)施例中,用以控制微編碼的讀取的微編碼單元(未顯示)包括其讀取單元、 或者定序器(sequencer)、以及未執(zhí)行分支預(yù)測單元102,以僅預(yù)測使用者程序分支指令。 [0041] 請參閱圖2,圖2是描述圖1所示的微處理器100的操作流程圖。流程起始于方塊 202〇
[0042] 在方塊202,當(dāng)在使用者特權(quán)等級運(yùn)行線程操作時(shí)(舉例來說第3級),各個(gè)預(yù)測 單元109累計(jì)所對應(yīng)的預(yù)測歷史記錄132A?C中的一個(gè),并在微處理器100處理線程的指 令時(shí)利用預(yù)測歷史記錄132A?C進(jìn)行動態(tài)預(yù)測。流程進(jìn)入方塊212。
[0043] 在方塊212,控制單元124檢測指示微處理器100操作管理者特權(quán)等級的事件, 舉例來說,第〇級。上述事件亦導(dǎo)致微處理器100自正在運(yùn)行的線程的控制轉(zhuǎn)換至不 同的線程。上述事件的例子包括,但并非限制于指令的操作,例如系統(tǒng)調(diào)用指令(例如 X86SYSENTER/SYSCALL指令)、軟件中斷(例如X86INT指令)、或者內(nèi)部特權(quán)等級或者任務(wù) 切換程序調(diào)用指令(例如X86CALL指令);以及例外情況的檢測,例如硬件中斷(例如計(jì)時(shí) 器刻度(timer tick)、I/0裝置)或者頁面錯(cuò)誤。在一實(shí)施例中,在轉(zhuǎn)換控制至第O級線程 或者子程序(routine)之前,事件將造成微處理器100將控制轉(zhuǎn)換至操作系統(tǒng)的微編碼以 執(zhí)行各種操作(例如權(quán)限檢查)。流程進(jìn)入方塊222。
[0044] 在方塊222,響應(yīng)于方塊212的事件檢測,當(dāng)微處理器100在管理者特權(quán)等級運(yùn)行 新的線程時(shí),控制單元124控制預(yù)測單元暫停累計(jì)所對應(yīng)的預(yù)測歷史記錄132A?C,以及 暫停利用歷史記錄進(jìn)行預(yù)測。然而,預(yù)測單元109持續(xù)進(jìn)行不需使用預(yù)測歷史記錄132A? C的靜態(tài)預(yù)測。在一實(shí)施例中,控制單元124可暫停累計(jì)預(yù)測歷史記錄132A?C,以及暫停 針對部分預(yù)測單元109的預(yù)測,但針對其他單元不暫停累計(jì)以及不暫停進(jìn)行預(yù)測。除此之 夕卜,暫停以及不暫停預(yù)測單元109的決定由微處理器100動態(tài)操作。舉例來說,編程暫停以 及非暫停預(yù)測單元109的子集可藉由例如操作系統(tǒng)或者BIOS進(jìn)行編程。舉另一例子來說, 可在微處理器100的制造過程中通過熔絲,甚至通過使用者或者服務(wù)人員將子集配置或者 設(shè)置于一區(qū)域中。舉另一例子來說,可根據(jù)將運(yùn)行的特定第〇級決定子集,接下來將于圖3 所述的實(shí)施例進(jìn)行更詳細(xì)的敘述。流程進(jìn)入方塊232。
[0045] 在方塊232,控制單元124檢測指示微處理器100操作使用者特權(quán)等級(例如第3 級)的事件。上述事件亦造成微處理器100將控制自正在運(yùn)行的線程轉(zhuǎn)換至不同的線程。上 述事件的例子包括,但并非限制于指令的執(zhí)行,例如系統(tǒng)調(diào)用返回指令(例如X86SYSEXIT/ SYSRET指令)、來自中斷或者例外的返回(例如X86IRET指令)、或者來自程序指令的內(nèi)部 特權(quán)等級返回(例如X86RET指令)。在一實(shí)施例中,造成微處理器100將控制轉(zhuǎn)換至微編 碼的事件,將于將控制轉(zhuǎn)換至第3級處理之前執(zhí)行各種操作。流程進(jìn)入方塊242。
[0046] 在方塊242,預(yù)測單元109恢復(fù)累計(jì)個(gè)別的預(yù)測歷史記錄,以及于微處理器100處 理指令時(shí)利用歷史記錄132進(jìn)行預(yù)測。流程結(jié)束于方塊242。
[0047] 如前所述,若方塊242所返回的控制的第3級處理與方塊212的事件所中斷的第3 級處理相同時(shí),則預(yù)測歷史記錄132A?C應(yīng)與先前的第0級的轉(zhuǎn)變相同,即為當(dāng)?shù)?級處 理被中斷時(shí),預(yù)測歷史記錄132A?C并不會因此而改變,因?yàn)槠洳⑽幢坏?級線程所影響。 因此,很可能預(yù)測單元109將可有利于事件發(fā)生后一如往常地持續(xù)對第3級處理的線程進(jìn) 行正確的動態(tài)預(yù)測。也可能在執(zhí)行第0級線程時(shí)的預(yù)測效能將低于執(zhí)行第3級處理的預(yù)測 效能,因?yàn)榈讴柤壘€程預(yù)測僅使用靜態(tài)預(yù)測。無論如何,根據(jù)第〇級線程和(或)第3級處 理的特性,其可能希望在執(zhí)行第〇級線程時(shí),藉由犧牲效能以有利地改進(jìn)第3級的效能-由 于第3級處理預(yù)測歷史記錄的影響較少或者沒有-將支配第0級效能的損失,特別為當(dāng)?shù)?0級線程為短的和(或)不經(jīng)常運(yùn)行。
[0048] 請參閱圖3。圖3是根據(jù)一替代實(shí)施例描述圖1所示的微處理器的操作流程圖。 圖3中部分方塊與圖2相同,以及編號亦相同。優(yōu)選地,在重新設(shè)定時(shí),控制單元124初始 化信息112數(shù)據(jù)架構(gòu)將于以下做詳細(xì)的敘述。流程起始于方塊202。
[0049] 在方塊202,當(dāng)線程操作于使用者特權(quán)等級時(shí),例如第3級,各個(gè)預(yù)測單元109累 計(jì)所對應(yīng)的預(yù)測歷史記錄132A?C,以及當(dāng)微處理器100處理指令時(shí)利用預(yù)測歷史記錄 132A?C進(jìn)行預(yù)測。流程進(jìn)入方塊212。
[0050] 在方塊212,控制單元124檢測指示微處理器100操作管理者特權(quán)等級(例如第0 級)的事件,以及造成微處理器100將控制自正在運(yùn)行的線程轉(zhuǎn)換至不同的線程。流程進(jìn) 入方塊311。
[0051] 在方塊311,控制單元24嘗試識別運(yùn)行在第0級的線程,以及產(chǎn)生識別符給第0級 線程。在一實(shí)施例中,以下所述的最佳化信息112數(shù)據(jù)架構(gòu)包括由控制單元124保存在微 處理器100的私密存儲器中的表格。表格中每個(gè)登錄與不同的第0級線程識別符有關(guān)。功 能用以在檢測到線程轉(zhuǎn)換時(shí),產(chǎn)生第0級識別符以接收各種輸入,例如微處理器100的事件 類型以及狀態(tài)值。事件類型可為前述圖2的方塊212中各種事件類型中的一個(gè),但并非以 此為限。狀態(tài)值可為通用目的寄存器的值(general purpose register value)、模塊特定 寄存器的值(model specific register value)、指令指針(instruction pointer,IP),或 者第3級處理的程序計(jì)數(shù)器(PC)的值,用以進(jìn)行系統(tǒng)調(diào)用、軟件中斷、內(nèi)部特權(quán)或者任務(wù)切 換程序調(diào)用、以及與中斷或者例外有關(guān)的中斷向量數(shù)字,但并非以此為限。舉例來說,當(dāng)?shù)?3級處理對Microsoft? Windows?操作系統(tǒng)進(jìn)行系統(tǒng)調(diào)用時(shí)(例如通過x86SYSENTER 指令),Windows根據(jù)X86EAX寄存器中的值以及在某些情況下其他寄存器的值運(yùn)行不同的 線程。因此,在一實(shí)施例中,當(dāng)事件類型為系統(tǒng)調(diào)用指令時(shí),控制單元124檢查EAX寄存器 值,以及產(chǎn)生不同的第〇級識別符給不同的EAX值。其他實(shí)施例可用于其他的系統(tǒng)。在另 一例子中,控制單元124可產(chǎn)生不同的第0級識別符值給不同的中斷向量值。流程進(jìn)入方 塊 313〇
[0052] 方塊313,控制單元124查找在方塊311的最佳化信息112數(shù)據(jù)架構(gòu)中所產(chǎn)生的 第〇級識別符,以取得有關(guān)于藉由第〇級識別符所識別的第〇級線程的最佳化信息112。在 一實(shí)施例中,假設(shè)第〇級識別符不存在于最佳化信息112數(shù)據(jù)架構(gòu)中,控制單元124執(zhí)行預(yù) 設(shè)第〇級登錄動作(即為相對于進(jìn)入第〇級的預(yù)設(shè)動作有關(guān)于無論是否累計(jì)預(yù)測歷史記錄 132A?C以及利用預(yù)測歷史記錄132A?C進(jìn)行動態(tài)預(yù)測),以及在最佳化信息112數(shù)據(jù)架 構(gòu)中分配進(jìn)入給第0級識別符。在一實(shí)施例中,預(yù)設(shè)第0級登錄動作用以暫停累計(jì)預(yù)測歷 史記錄132A?C,以及利用其進(jìn)行預(yù)測。若第0級識別符存在,控制單元124決定是否根據(jù) 相關(guān)的最佳化信息112置換預(yù)設(shè)第0級登錄動作。在一實(shí)施例中,最佳化信息112包括與 第0級線程有關(guān)的長度,以及若第0級線程的長度小于既定長度,控制單元124決定暫停累 計(jì)并暫停使用預(yù)測歷史記錄132A?C,以及反之則繼續(xù)累計(jì)以及使用預(yù)測歷史記錄132A? C。在一實(shí)施例中,表示為指令的數(shù)字的長度引退于第0級線程的前一次運(yùn)行期間,利用引 退指令計(jì)數(shù)器113取得。在一實(shí)施例中,最佳化信息112包括在第0級線程的前一次執(zhí)行 實(shí)例期間,和(或)于第3級處理的前一次運(yùn)行之后至第0級線程的前一次執(zhí)行實(shí)例期間, 有關(guān)于根據(jù)預(yù)測歷史記錄132A?C所進(jìn)行預(yù)測的有效性的信息。在一實(shí)施例中,利用效能 計(jì)數(shù)器114取得有效性。流程進(jìn)入決策塊315。
[0053] 在決策塊315,控制單元124決定是否暫停累計(jì)預(yù)測歷史記錄132A?C,以及是否 暫停使用預(yù)測歷史記錄132A?C進(jìn)行預(yù)測。若是如此,流程進(jìn)入方塊222 ;反之,流程進(jìn)入 方塊321。盡管在此所述的實(shí)施例決定是否累計(jì)預(yù)測歷史記錄132A?C,以及利用根據(jù)與 線程識別符有關(guān)的最佳化訊息112所作的預(yù)測歷史記錄132A?C進(jìn)行動態(tài)預(yù)測,但可藉由 準(zhǔn)則(criteria)作出決定。舉例來說,控制單元124可根據(jù)新的線程的特性、或者特征而 不參考最佳化訊息112作出運(yùn)行轉(zhuǎn)換的決定(利用任何前述的各種輸入的結(jié)合)。也就是 說,新的線程的特征(例如事件類型和(或)與轉(zhuǎn)換至新的線程的架構(gòu)狀態(tài);特權(quán)等級,舉 例來說如相對于圖2的敘述;或者新的線程是否為中斷處理程序(handler))足以作出是否 累計(jì)預(yù)測歷史記錄132A?C的決定,以及執(zhí)行動態(tài)預(yù)測,即為是否選擇性地暫停累計(jì)預(yù)測 歷史記錄132A?C以及利用預(yù)測歷史記錄132A?C進(jìn)行動態(tài)預(yù)測。一般而言,暫停累計(jì) 預(yù)測歷史記錄132A?C以及利用預(yù)測歷史記錄132A?C進(jìn)行動態(tài)預(yù)測的方法用于明顯較 短和(或)很少運(yùn)行的線程,因?yàn)楹芸赡馨ㄉ鲜鎏卣鞯木€程具有較差的預(yù)測精準(zhǔn)度以作 為不影響其他明顯較長和(或)較常運(yùn)行的線程的預(yù)測歷史記錄132A?C的交換,將使得 其他線程具有較高的預(yù)測精準(zhǔn)度以微處理器100整體效率較高。
[0054] 在方塊222,響應(yīng)于方塊212的事件檢測,當(dāng)微處理器100運(yùn)行在管理者特權(quán)等 級時(shí),控制單元124控制預(yù)測單元109暫停累計(jì)其所對應(yīng)的預(yù)測歷史記錄132A?C,以及 暫停利用預(yù)測歷史記錄進(jìn)行預(yù)測。然而,預(yù)測單元109持續(xù)進(jìn)行不需要使用預(yù)測歷史記錄 132A?C的靜態(tài)預(yù)測。流程進(jìn)入方塊321。
[0055] 在方塊321,當(dāng)?shù)?級線程運(yùn)行時(shí),控制單元124持續(xù)搜集有關(guān)第0級線程的最佳 化信息,例如通過效能計(jì)數(shù)器的預(yù)測有效性以及自引退指令計(jì)數(shù)器113的線程長度。在一 實(shí)施例中,控制單元124搜集除了由預(yù)測單元109所進(jìn)行的動態(tài)預(yù)測之外有關(guān)于靜態(tài)預(yù)測 的預(yù)測有效性。在一實(shí)施例中,控制單元124亦搜集預(yù)測有效性信息給第3級線程。較佳 地,若靜態(tài)預(yù)測線程的效能為可接受的,則當(dāng)線程運(yùn)行時(shí),控制單元124將持續(xù)暫停預(yù)測歷 史記錄的累計(jì)以及使用,尤其是若其他線程的效能明顯改善時(shí);反之,當(dāng)線程運(yùn)行時(shí),控制 單元124將累計(jì)以及使用預(yù)測歷史記錄。流程進(jìn)入方塊232。
[0056] 在方塊232,控制單元124檢測指示微處理器100操作于使用者特權(quán)等級的事件 (例如第3級),以及將控制自正在運(yùn)行的線程轉(zhuǎn)換至不同的線程。流程進(jìn)入方塊333。
[0057] 在方塊333,控制單元124利用于方塊321所搜集的最佳化信息更新與第0級線程 有關(guān)最佳化信息112數(shù)據(jù)架構(gòu)登錄。在一實(shí)施例中,更新包括藉由較新的搜集最佳化訊息 的登錄簡單地取代最佳化訊息112。在另一實(shí)施例中,更新包括利用所搜集的最佳化訊息進(jìn) 行計(jì)算,以及利用計(jì)算更新最佳化信息112。舉例來說,控制單元124計(jì)算引退指令的數(shù)量 的平均和(或)根據(jù)第〇級線程最后的執(zhí)行過程的預(yù)測有效性。除此之外,平均可為權(quán)重 或者移動平均數(shù)(rolling average)。另外,控制單元124可過濾出極限值并自最佳化信息 112排除。除此之外,可考慮維持最佳化信息112數(shù)據(jù)架構(gòu)的各種方法。舉例來說,在一實(shí) 施例中,控制單元124僅在最佳化訊息112數(shù)據(jù)架構(gòu)保存控制單元124預(yù)置換預(yù)設(shè)第0級 登錄動作的登錄給第〇級線程;即為若控制單元124在方塊313查找第0級線程識別符,以 及在最佳化信息112數(shù)據(jù)架構(gòu)中找到第0級線程識別符,則控制單元124在決策塊315作 決定以置換預(yù)設(shè)動作。流程進(jìn)入決策塊335。
[0058] 在決策塊335,控制單元124決定是否累計(jì)以及使用于方塊222所暫停的預(yù)測歷史 記錄132A?C。若是如此,流程進(jìn)入方塊242 ;反之,則累計(jì)預(yù)測單元109以及持續(xù)累計(jì)預(yù) 測歷史記錄132A?C以及使用預(yù)測歷史記錄132A?C以進(jìn)行預(yù)測,以及流程結(jié)束。
[0059] 在方塊242,預(yù)測單元109恢復(fù)累計(jì)所對應(yīng)的預(yù)測歷史記錄132A?C,以及當(dāng)微處 理器100處理指令時(shí),利用預(yù)測歷史記錄132A?C進(jìn)行動態(tài)預(yù)測。流程結(jié)束于方塊242。
[0060] 請參閱圖4。圖4是根據(jù)一替代實(shí)施例描述圖1所示的微處理器100的操作流程 圖。圖4的一些方塊與圖2的方塊相同,以及具有相同的標(biāo)號。流程起始于方塊202。
[0061] 在方塊202,當(dāng)線程操作于使用者特權(quán)等級,例如第3級,每個(gè)預(yù)測單元109累計(jì) 所對應(yīng)的預(yù)測歷史記錄132A?C,以及當(dāng)微處理器100處理指令時(shí),利用預(yù)測歷史記錄 132A?C進(jìn)行動態(tài)預(yù)測。流程進(jìn)入方塊212。
[0062] 在方塊212,控制單元124檢測指示微處理器100操作于管理者特權(quán)等級(例如 第〇級)的事件,以及造成微處理器100將控制自正在運(yùn)行的線程轉(zhuǎn)換至不同的線程。流 程進(jìn)入方塊222。
[0063] 在方塊222,響應(yīng)至方塊212的事件檢測,當(dāng)微處理器100在管理者特權(quán)等級運(yùn)行 新的線程時(shí),控制單元124控制預(yù)測單元暫停累計(jì)所對應(yīng)的預(yù)測歷史記錄132A?C者,以 及暫停利用預(yù)測歷史記錄進(jìn)行預(yù)測。然而,預(yù)測單元109持續(xù)進(jìn)行靜態(tài)預(yù)測而不需利用預(yù) 測歷史記錄132A?C。流程進(jìn)入方塊413。
[0064] 在方塊413,控制單元124將預(yù)測歷史記錄132A?C的目前實(shí)例存儲至預(yù)測歷史 記錄存儲器108。在一實(shí)施例中,控制單元124僅存儲部分的特定預(yù)測歷史記錄132A?C以 減少執(zhí)行存儲所需的時(shí)間。舉例來說,若分支預(yù)測單元102的預(yù)測歷史記錄132A相對較大 (例如8KB),控制單元124可僅存儲大部分最近的存取登錄(例如512位)而非全部的預(yù) 測歷史記錄132A。在一實(shí)施例中,控制單元124將失效未存儲的部分預(yù)測歷史記錄132A? C。除此之外,在一實(shí)施例中,控制單元124僅存儲一些而非所有的預(yù)測單元109的預(yù)測歷 史記錄132A?C。舉例來說,相較于預(yù)測單元109的第二子集,若控制單元124認(rèn)為由第0 級線程所產(chǎn)生的中斷對預(yù)測單元109的第一子集的預(yù)測有效性造成極大的不利影響,則控 制單元124將存儲第一子集而非第二子集。優(yōu)選地,控制單元124在預(yù)測歷史記錄存儲器 108中保留對應(yīng)于不同藉由唯一的第3級識別碼所識別的第3級處理的多數(shù)登錄。在一實(shí) 施例中,第3級處理藉由其x86處理內(nèi)容(process-context)識別符所識別的第3級處理, 例如"Intel 64and IA_32Architectures Software Developer's Manual"第 3A冊第 4-46 至4-62頁第4. 10節(jié)所述的內(nèi)容。在另一實(shí)施例中,第3級處理藉由位于x86CR3控制寄存 器中的第3級處理所使用的頁面目錄的地址所識別。在一實(shí)施例中,控制單元124保留預(yù) 測歷史記錄存儲器108以作為先入先出緩沖器(first-in-first-out buffer)。在另一實(shí) 施例中,控制單元124執(zhí)行更復(fù)雜的替代方案,例如最近最少使用(least-recently-used) 或者至少頻繁使用(least-frequently-used)。優(yōu)選地,當(dāng)微處理器100的功能性單元持續(xù) 處理第0級線程的指令時(shí),將預(yù)測歷史記錄132A?C存儲至預(yù)測歷史記錄存儲器108,以及 第0級線程執(zhí)行時(shí)間很可能比預(yù)測歷史記錄存儲時(shí)間還長。然而,有利的是,因?yàn)轭A(yù)測歷史 記錄132A?C陣列并未被存?。磳懭耄┮岳塾?jì)預(yù)測歷史記錄或者進(jìn)行預(yù)測(即讀?。?使得不用于預(yù)測歷史記錄存儲以及第〇級指令處理之間爭用存儲預(yù)測歷史記錄132A?C 的存儲陣列的存取的讀取端口以及寫入端口,以處理僅進(jìn)行讀取以寫入預(yù)測歷史記錄的第 0級指令。此為有利的,因?yàn)橛靡岳塾?jì)存儲的預(yù)測歷史記錄的額外硬件的數(shù)量將被最小化, 原因?yàn)椴恍枰ù鎯﹃嚵械念~外的讀取端口。流程進(jìn)入方塊232。
[0065] 在方塊232,控制單元124檢測指示微處理器100操作在使用者特權(quán)等級(例如第 3級)的事件,以及將控制自目前所運(yùn)行的線程轉(zhuǎn)換置不同的線程。流程進(jìn)入方塊433。
[0066] 在決策塊433,控制單元124決定轉(zhuǎn)換的新的第3級線程以及控制被轉(zhuǎn)換的舊的第 3級線程的處理是否部分相同。相對于前述的方塊413,控制單元124將藉由比較兩個(gè)線程 的處理識別碼以進(jìn)行決定,例如X86PCID。若新的第3級線程處理不同于舊的第3級線程處 理,流程進(jìn)入方塊435 ;反之,流程進(jìn)入方塊242。
[0067] 在方塊435,控制單元124自預(yù)測歷史記錄存儲器108將預(yù)測歷史記錄132A?C 恢復(fù)給新的第3級處理。即為控制單元124使用新的第3級處理識別碼以在預(yù)測歷史記錄 存儲器108中尋找預(yù)測歷史記錄,以及根據(jù)第3級處理識別碼自預(yù)測歷史記錄存儲器108 載入預(yù)測單元109的預(yù)測歷史記錄132A?C。優(yōu)選地,當(dāng)微處理器100的功能性單元持續(xù) 處理自執(zhí)行第0級至第3級的微編碼的指令時(shí),執(zhí)行恢復(fù)預(yù)測歷史記錄存儲器108的預(yù)測 歷史記錄132A?C。微編碼的執(zhí)行時(shí)間可為明顯的時(shí)間周期,以及可能較執(zhí)行預(yù)測歷史記 錄132A?C的恢復(fù)所需的時(shí)間還長,此為有利的,因?yàn)轭A(yù)測歷史記錄132A?C陣列并未被 存取(即寫入)以累計(jì)預(yù)測歷史記錄或者進(jìn)行預(yù)測(即讀?。?,使得不用于預(yù)測歷史記錄 存儲以及第〇級指令處理之間爭用存儲預(yù)測歷史記錄132A?C的存儲陣列的存取的讀取 端口以及寫入端口,以處理僅進(jìn)行恢復(fù)預(yù)測歷史記錄的第〇級指令。舉例來說,在一實(shí)施例 中,微編碼單元并未處理分支預(yù)測單元102,即為分支預(yù)測單元102并未對微編碼指令進(jìn)行 預(yù)測。舉另一例來說,在一實(shí)施例中,環(huán)過渡(ring transition)微編碼并未存取系統(tǒng)存儲 器;因此,數(shù)據(jù)預(yù)取單元104并不需要對環(huán)過渡微編碼進(jìn)行數(shù)據(jù)預(yù)取,以及存儲沖突預(yù)測單 元106并不需要對環(huán)過渡微編碼進(jìn)行預(yù)測。有利的是,因?yàn)橛靡岳塾?jì)預(yù)測歷史記錄的恢復(fù) 所需的額外硬件的數(shù)量可被最小化,原因?yàn)椴恍枰诖鎯﹃嚵猩习~外的寫入端口。流 程進(jìn)入方塊242。
[0068] 在方塊242,預(yù)測單元109恢復(fù)累計(jì)所對應(yīng)的預(yù)測歷史記錄132A?C,以及當(dāng)微處 理器100處理指令時(shí),利用預(yù)測歷史記錄132A?C進(jìn)行動態(tài)預(yù)測。流程結(jié)束于方塊242。
[0069] 有利的是,新的第3級線程的指令的處理并未影響與舊的第3級線程有關(guān)的預(yù)測 歷史記錄132A?C,將使得兩個(gè)第3級線程具有較佳的預(yù)測準(zhǔn)確度。
[0070] 其他實(shí)施例可為圖3以及圖4的實(shí)施例的有效結(jié)合,使得控制單元124存儲以及 恢復(fù)與第〇級線程有關(guān)的預(yù)測歷史記錄132A?C,使控制單元124決定不暫停累計(jì)以及使 用預(yù)測歷史記錄132A?C,舉例來說,對相對長的第0級線程和(或)根據(jù)在第0級線程和 (或)第3級處理的前一執(zhí)行實(shí)例期間的預(yù)測有效性以累計(jì)以及使用預(yù)測歷史記錄132A? C的第0級線程。如上所述,當(dāng)不需要累計(jì)歷史記錄132以及使用歷史記錄132進(jìn)行預(yù)測的 期間,微處理器100自第3級轉(zhuǎn)換至第0級(以及反之亦然)可能需要大量的時(shí)間周期;因 此,在這段期間控制單元124可有效但不明顯地自預(yù)測歷史記錄存儲器124存儲/恢復(fù)相 關(guān)的預(yù)測歷史記錄132A?C,如果有的話,將降低效能。在上述的實(shí)施例中,這可能是特別 有利的,可限制于自第0級轉(zhuǎn)換至第3級以及自第3級轉(zhuǎn)換自第0級所存儲以及恢復(fù)的預(yù) 測歷史記錄132A?C的數(shù)量,以避免在完成存儲和恢復(fù)之前停止微處理器100的指令的執(zhí) 行。
[0071] 此外,盡管所述的實(shí)施例中微處理器100選擇性地暫停預(yù)測歷史記錄的累計(jì),以 及暫停利用預(yù)測歷史記錄進(jìn)行預(yù)測以響應(yīng)自一特權(quán)等級轉(zhuǎn)換至不同的特權(quán)等級的線程,在 其他實(shí)施例中微處理器100也可選擇性地暫?;蛘呋謴?fù)預(yù)測歷史記錄的累計(jì),以及使用預(yù) 測歷史記錄進(jìn)行預(yù)測以響應(yīng)線程在相同特權(quán)等級之間的轉(zhuǎn)換。舉例來說,微處理器100可 藉由檢測不包括特權(quán)等級的改變的事件以檢測線程轉(zhuǎn)換,以及決定暫停或者恢復(fù)預(yù)測歷史 記錄的累計(jì),并響應(yīng)使用預(yù)測歷史記錄進(jìn)行預(yù)測。舉例來說,微處理器100可利用一特定IP 值以及在一些具有其他架構(gòu)狀態(tài)的特定值的情況下簡單地檢測指令的執(zhí)行(例如子程序 調(diào)用(subroutine call)或者恢復(fù)指令),例如通用目的寄存器值。舉另一例子來說,微處 理器100可檢測一序列的指令和(或)IP值。
[0072] 必須了解的是,在此所述有關(guān)本發(fā)明的實(shí)施例僅用以作為示范,并非以此為限。在 計(jì)算機(jī)相關(guān)領(lǐng)域的技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),可以廣義的方式作適當(dāng)?shù)?更動和替換。舉例來說,可致能軟件,舉例來說,裝置的功能、制作、模塊、模擬、敘述和(或) 測試,以及在此所述的方法??山逵赏ㄓ玫某绦蛘Z言(例如C、C++)、硬件描述語言(HDL) (包括Verilog HDUVHDL等)、或者其他可用的程序?qū)崿F(xiàn)本發(fā)明。上述的軟件可執(zhí)行在任 意已知的計(jì)算機(jī)可執(zhí)行媒體,例如磁帶、半導(dǎo)體、磁碟或者光盤(例如⑶-R0M、DVD-R0M等), 網(wǎng)際網(wǎng)絡(luò)、有線網(wǎng)絡(luò)、無線網(wǎng)絡(luò)、或者其他通信媒介。在此所述的裝置以及方法的實(shí)施例可 包括在半導(dǎo)體知識產(chǎn)權(quán)內(nèi)核中,例如微處理器內(nèi)核(例如在HDL中實(shí)施或指定),以及在集 成電路的產(chǎn)品中轉(zhuǎn)換為硬件。此外,在此所述的裝置以及方法可通過硬件以及軟件的結(jié)合 實(shí)現(xiàn)。因此,本發(fā)明并不能限制于此所述的任意實(shí)施例,本發(fā)明的范圍以及精神根據(jù)后附的 權(quán)利要求書所定義以及限制。特別的是,本發(fā)明可通過通用目的計(jì)算機(jī)的微處理器裝置實(shí) 現(xiàn)。最后,上述的實(shí)施例以足夠的細(xì)節(jié)敘述使所屬【技術(shù)領(lǐng)域】的技術(shù)人員能藉由上述的描述, 在不脫離本發(fā)明的精神以及范圍內(nèi),可做些許結(jié)構(gòu)上以及邏輯上的改變,以實(shí)施本發(fā)明所 揭露的系統(tǒng)以及方法。
【權(quán)利要求】
1. 一種微處理器,包括: 預(yù)測單元;W及 控制單元,用W: 控制上述預(yù)測單元累計(jì)由上述微處理器所執(zhí)行的指令的特性的一歷史記錄,W及當(dāng)上 述微處理器運(yùn)行一第一線程時(shí),根據(jù)上述歷史記錄進(jìn)行與后續(xù)指令有關(guān)的預(yù)測; 檢測從運(yùn)行上述第一線程至運(yùn)行與上述第一線程相異的一第二線程之間的第一轉(zhuǎn) 變; 當(dāng)運(yùn)行上述第二線程時(shí),控制上述預(yù)測單元選擇性地暫停累計(jì)上述歷史記錄,W及選 擇性地暫停利用上述歷史記錄進(jìn)行上述預(yù)測; 控制上述預(yù)測單元將響應(yīng)于上述第一轉(zhuǎn)變的上述預(yù)測單元的上述歷史記錄的第一狀 況存儲至存儲器; 檢測從運(yùn)行上述第二線程至運(yùn)行第=線程的第二轉(zhuǎn)變; 檢測上述第一線程W及上述第=線程的處理是否部分相同; 當(dāng)上述第一線程W及上述第=線程的處理部分相同,控制上述預(yù)測單元恢復(fù)累計(jì)上述 歷史記錄及恢復(fù)利用上述歷史記錄進(jìn)行上述預(yù)測;W及 當(dāng)上述第一線程W及上述第=線程的處理部分不相同,控制上述預(yù)測單元將響應(yīng)于第 二轉(zhuǎn)變的上述存儲器的上述歷史記錄的第二狀況載入至上述預(yù)測單元,W及控制上述預(yù)測 單元恢復(fù)累計(jì)上述歷史記錄及恢復(fù)利用上述歷史記錄進(jìn)行上述預(yù)測。
2. 如權(quán)利要求1所述的微處理器,其中當(dāng)運(yùn)行在上述第二線程時(shí),上述預(yù)測單元在不 使用上述歷史記錄的狀況下進(jìn)行預(yù)測。
3. 如權(quán)利要求1所述的微處理器,其中上述控制單元用W控制上述預(yù)測單元選擇性地 暫停累計(jì)上述歷史記錄,W及選擇性地暫停利用上述歷史記錄進(jìn)行上述預(yù)測,當(dāng)運(yùn)行上述 第二線程時(shí),是根據(jù)上述第二線程是否運(yùn)行于管理者特權(quán)等級。
4. 如權(quán)利要求1所述的微處理器,其中上述控制單元用W控制上述預(yù)測單元選擇性地 暫停累計(jì)上述歷史記錄,W及選擇性地暫停利用上述歷史記錄進(jìn)行上述預(yù)測,當(dāng)運(yùn)行上述 第二線程時(shí),是根據(jù)上述第二線程是否為系統(tǒng)管理中斷處理程序。
5. 如權(quán)利要求1所述的微處理器,其中上述控制單元用W控制上述預(yù)測單元選擇性地 暫停累計(jì)上述歷史記錄,W及選擇性地暫停利用上述歷史記錄進(jìn)行上述預(yù)測,當(dāng)運(yùn)行上述 第二線程時(shí),是根據(jù)上述轉(zhuǎn)變是否響應(yīng)于由上述第一線程造成上述微處理器運(yùn)行上述第二 線程的一系統(tǒng)調(diào)用指令的執(zhí)行。
6. 如權(quán)利要求1所述的微處理器,其中上述控制單元用W控制上述預(yù)測單元選擇性地 暫停累計(jì)上述歷史記錄,W及選擇性地暫停利用上述歷史記錄進(jìn)行上述預(yù)測,當(dāng)運(yùn)行上述 第二線程時(shí),是根據(jù)捜集給上述第二線程的前一執(zhí)行實(shí)例的信息,上述信息包括在上述第 二線程的上述前一執(zhí)行實(shí)例期間由上述微處理器所引退的指令數(shù)量。
7. 如權(quán)利要求1所述的微處理器,其中上述控制單元決定上述第一線程的處理識別符 W及上述第=線程的處理識別符是否相同W決定上述第一線程W及上述第=線程是否為 上述相同處理的部分。
8. 如權(quán)利要求7所述的微處理器,其中上述處理識別符包括x86處理內(nèi)容識別符 PCIDo
9. 如權(quán)利要求1所述的微處理器,其中上述控制單元決定上述第一線程的頁面目錄地 址W及上述第=線程的頁面目錄地址是否相同W決定上述第一線程W及上述第=線程是 否為上述相同處理的部分。
10. -種操作方法,適用于微處理器,包括: 累計(jì)由上述微處理器所執(zhí)行的指令的特性的歷史記錄,W及當(dāng)上述微處理器運(yùn)行第一 線程時(shí),根據(jù)上述歷史記錄進(jìn)行與后續(xù)指令有關(guān)的預(yù)測; 檢測從運(yùn)行上述第一線程至運(yùn)行與上述第一線程相異的第二線程之間的第一轉(zhuǎn)變; 當(dāng)運(yùn)行上述第二線程時(shí),選擇性地暫停累計(jì)上述歷史記錄,W及選擇性地暫停利用上 述歷史記錄進(jìn)行上述預(yù)測; 上述預(yù)測單元將響應(yīng)于上述第一轉(zhuǎn)變的上述預(yù)測單元的上述歷史記錄的第一狀況存 儲至存儲器; 檢測從運(yùn)行上述第二線程至運(yùn)行第=線程的第二轉(zhuǎn)變; 檢測上述第一線程W及上述第=線程的處理是否部分相同; 當(dāng)上述第一線程W及上述第=線程的處理部分相同,上述預(yù)測單元恢復(fù)累計(jì)上述歷史 記錄及恢復(fù)利用上述歷史記錄進(jìn)行上述預(yù)測;W及 當(dāng)上述第一線程W及上述第=線程的處理部分不相同,上述預(yù)測單元將響應(yīng)于第二轉(zhuǎn) 變的上述存儲器的上述歷史記錄的第二狀況載入至上述預(yù)測單元,W及控制上述預(yù)測單元 恢復(fù)累計(jì)上述歷史記錄及恢復(fù)利用上述歷史記錄進(jìn)行上述預(yù)測。
【文檔編號】G06F9/38GK104461470SQ201410718882
【公開日】2015年3月25日 申請日期:2014年6月6日 優(yōu)先權(quán)日:2013年6月10日
【發(fā)明者】R.E.虎克, T.派克斯, J.M.吉爾 申請人:威盛電子股份有限公司