微處理器加速的代碼優(yōu)化器的制造方法
【專利摘要】一種用于加速微處理器的代碼優(yōu)化的方法。該方法包括使用指令提取部件來提取傳入的微指令序列并且向解碼部件傳送所提取的宏指令用于解碼成微指令。通過將微指令序列重排序成包括多個依賴代碼組的優(yōu)化的微指令序列來執(zhí)行優(yōu)化處理。向微處理器流水線輸出優(yōu)化的微指令序列用于執(zhí)行。優(yōu)化的微指令序列的副本存儲到序列高速緩存中,用于在后續(xù)命中優(yōu)化的微指令序列時的后續(xù)使用。
【專利說明】微處理器加速的代碼優(yōu)化器
[0001]有關申請的交叉引用
[0002]本申請與Mohammad A.Abdallah 提交于 2010 年 I 月 5 日、名稱為"APPARATUS ANDMETHOD FOR PROCESSING COMPLEX INSTRUCTION FORMATS IN A MULTITHREADED ARCHITECTURESUPPORTING VARIOUS CONTEXT SWITCH MODES AND VIRTUALIZATION SCHEMES"的共同未決、共同轉讓的美國專利申請第2010/0161948號有關,并且將其完全結合于此。
[0003]本申請與Mohammad A.Abdallah 提交于 2008 年 12 月 19 日、名稱為"APPARATUSAND METHOD FOR PROCESSING AN INSTRUCTION MATRIX SPECIFYING PARALLEL IN DEPENDENTOPERATIONS"的共同未決、共同轉讓的美國專利申請第2009/0113170號有關,并且將其完全結合于此。
[0004]本申請與Mohammad A.Abdallah 提交于 2010 年 9 月 17 日、名稱為"SINGLE CYCLEMULT 1-BRANCH PREDICTION INCLUDING SHADOW CACHE FOR EARLY FAR BRANCH PREDICTION"共同未決、共同轉讓的美國專利申請第61/384,198號有關,并且將其完全結合于此。
[0005]本申請與Mohammad A.Abdallah 提交于 2011 年 3 月 25 日、名稱為"EXECUTINGINSTRUCTION SEQUENCE CODE BLOCKS BY USING VIRTUAL CORES INSTANTIATED BYPARTITIONABLE ENGINES"的共同未決、共同轉讓的美國專利申請第61/467,944號有關,并且將其完全結合于此。
【技術領域】
[0006]本發(fā)明總體上涉及數(shù)字計算機系統(tǒng)、更具體地涉及一種用于選擇包括指令序列的指令的系統(tǒng)和方法。
【背景技術】
[0007]要求處理器處置相互依賴的多個任務或者完全獨立的多個任務。這樣的處理器的內部狀態(tài)通常由可以在每個特定程序執(zhí)行瞬間保持不同值的寄存器構成。在每個程序執(zhí)行瞬間,內部狀態(tài)映像被稱為處理器的架構狀態(tài)。
[0008]在切換代碼執(zhí)行以運行另一函數(shù)(例如另一線程、進程或者程序)時,必須保存機器/處理器的狀態(tài),從而新函數(shù)可以利用內部寄存器以構建它的新狀態(tài)。一旦終止新函數(shù),然后可以丟棄它的狀態(tài),并且將恢復先前上下文的狀態(tài)并且執(zhí)行重建。這樣的切換過程被稱為上下文切換并且尤其對于運用大量(例如64、128、256個)寄存器和/或無序執(zhí)行的現(xiàn)代架構通常包括數(shù)十或者數(shù)百個周期。
[0009]在線程認知硬件架構中,對于硬件通常支持用于有限數(shù)目的由硬件支持的線程的多個上下文狀態(tài)。在這一情況下,硬件重復用于每個支持的線程的所有架構狀態(tài)元件。這消除對于在執(zhí)行新線程時的上下文切換的需要。然而這仍然具有多個缺點、即為在硬件中支持的每個附加線程重復所有架構狀態(tài)元件(即寄存器)的面積、功率和復雜性。此外,如果軟件線程數(shù)目超過顯式支持的硬件線程的數(shù)目,則仍然必須執(zhí)行上下文切換。
[0010]這隨著在需要大量線程的精細粒度基礎上需要并行而變得普遍。具有重復上下文狀態(tài)硬件存儲的硬件線程認知架構無助于非線程式軟件代碼而僅減少用于線程式軟件的上下文切換數(shù)目。然而那些線程通常被構造用于谷粒平行性并且造成用于啟動和同步的繁重軟件開銷從而讓精細粒度并行、比如函數(shù)調用和循環(huán)并行執(zhí)行而沒有高效線程啟動/自動生成。這樣的描述的開銷伴隨有難以使用現(xiàn)有技術的用于非顯式/易于并行化/線程化的軟件代碼的編譯器或者用戶并行化技術的這樣的代碼的自動并行化。
【發(fā)明內容】
[0011]在一個實施例中,將本發(fā)明實施為一種用于加速微處理器中的代碼優(yōu)化的方法。該方法包括使用指令提取部件來提取傳入的宏指令序列并且向解碼部件傳送所提取的宏指令用于解碼成微指令。通過將微指令序列重排序成包括多個依賴代碼組的優(yōu)化的微指令序列來執(zhí)行優(yōu)化處理。然后向微處理器流水線輸出優(yōu)化的微指令序列用于執(zhí)行。優(yōu)化的微指令序列的副本被存儲在序列高速緩存中用于在后續(xù)命中優(yōu)化的微指令序列時的后續(xù)使用。
[0012]前文為
【發(fā)明內容】
、因此必然地包含簡化、概括和省略的細節(jié);因而本領域技術人員將理解
【發(fā)明內容】
僅為示例而未旨在于以任何方式限制。僅如權利要求限定的本發(fā)明的其它方面、發(fā)明特征和優(yōu)點將在以下闡述的非限制具體描述中變得清楚。
【專利附圖】
【附圖說明】
[0013]在附圖的各圖中通過示例而非通過限制來舉例說明本發(fā)明,并且在附圖中,相似標號指代相似元素。
[0014]圖1示出根據(jù)本發(fā)明的一個實施例的微處理器的分配/發(fā)布級的概況圖。
[0015]圖2示出對根據(jù)本發(fā)明的一個實施例的優(yōu)化過程進行圖示的概況圖。
[0016]圖3示出根據(jù)本發(fā)明的一個實施例的多步驟優(yōu)化過程。
[0017]圖4示出根據(jù)本發(fā)明的一個實施例的多步驟優(yōu)化和指令移動過程。
[0018]圖5示出根據(jù)本發(fā)明的一個實施例的示例硬件優(yōu)化過程的步驟的流程圖。
[0019]圖6示出根據(jù)本發(fā)明的一個實施例的備選示例硬件優(yōu)化過程的步驟的流程圖。
[0020]圖7示出對根據(jù)本發(fā)明的一個實施例的分配/發(fā)布級的CAM匹配硬件和優(yōu)先級編碼硬件的操作進行示出的圖。
[0021]圖8示出對根據(jù)本發(fā)明的一個實施例的在分支之前的優(yōu)化的調度進行圖示的圖。
[0022]圖9示出對根據(jù)本發(fā)明的一個實施例的在存儲之前的優(yōu)化的調度進行圖示的圖。
[0023]圖10示出根據(jù)本發(fā)明的一個實施例的示例軟件優(yōu)化過程的圖。
[0024]圖11示出根據(jù)本發(fā)明的一個實施例的SMD基于軟件的優(yōu)化過程的流程圖。
[0025]圖12示出根據(jù)本發(fā)明的一個實施例的示例SMD基于軟件的優(yōu)化過程的操作步驟的流程圖。
[0026]圖13示出根據(jù)本發(fā)明的一個實施例的基于軟件的依賴性廣播過程。
[0027]圖14示出對根據(jù)本發(fā)明的一個實施例如何使用指令的依賴性分組以構建依賴指令的可變有界組的進行示出的示例流程圖。
[0028]圖15示出對根據(jù)本發(fā)明的一個實施例的指令的分級調度進行描繪的流程圖。
[0029]圖16示出對根據(jù)本發(fā)明的一個實施例的三時隙依賴性指令組的分級調度進行描繪的流程圖。
[0030]圖17示出對根據(jù)本發(fā)明的一個實施例的三時隙依賴性指令組的分級移動窗口調度進行描繪的流程圖。
[0031]圖18示出根據(jù)本發(fā)明的一個實施例如何向多個計算引擎分配指令的可變大小的依賴鏈(例如可變有界組)。
[0032]圖19示出對根據(jù)本發(fā)明的一個實施例的向調度隊列的塊分配和三時隙依賴性指令組的分級移動窗口調度進行描繪的流程圖。
[0033]圖20示出根據(jù)本發(fā)明的一個實施例如何在引擎上執(zhí)行依賴代碼塊(例如依賴性組或者依賴性鏈)。
[0034]圖21示出根據(jù)本發(fā)明的一個實施例的多個引擎及其部件的概況圖,這些部件包括全局前端提取和調度器和寄存器文件、全局互連以及用于多核處理器的片段式存儲器子系統(tǒng)。
[0035]圖22示出根據(jù)本發(fā)明的一個實施例的多個分段、多個分段式公共分區(qū)調度器和互連以及進入分段的端口。
[0036]圖23示出根據(jù)本發(fā)明的一個實施例的示例微處理器流水線的圖。
【具體實施方式】
[0037]雖然已經(jīng)與一個實施例結合來描述本發(fā)明,但是本發(fā)明未旨在于限于這里闡述的具體形式。恰好相反,它旨在于覆蓋如可以在如所附權利要求限定的本發(fā)明的范圍內合理包括的這樣的備選、修改和等同。
[0038]在以下具體描述中,已經(jīng)闡述許多具體細節(jié)、比如具體方法順序、結構、單元和連接。然而將理解無需利用這些和其它具體細節(jié)以實現(xiàn)本發(fā)明的實施例。在其它境況中,已經(jīng)省略或者尚未具體描述公知結構、單元或者連接以免不必要地模糊本描述。
[0039]在說明書內對“一個實施例”或者“實施例”的引用旨在于指示與該實施例結合描述的特定特征、結構或者特性包含于本發(fā)明的至少一個實施例中。在說明書內的各處出現(xiàn)短語“在一個實施例中”未必都指代相同實施例,并且分離或者備選實施例未與其它實施例互斥。另外,描述各種特征可以被一些實施例而未被其它實施例表現(xiàn)。相似地,描述各種要求可以對于一些實施例、但是并非其它實施例的要求。
[0040]在對計算機存儲器內的數(shù)據(jù)位的操作的流程、步驟、邏輯塊、處理和其它符號表示方面呈現(xiàn)以下具體描述的一些部分。這些描述和表示是在數(shù)據(jù)處理領域中的技術人員用來向本領域中的其他技術人員最有效傳達他們的工作的實質的手段。這里并且通常設想流程、計算機執(zhí)行的步驟、邏輯塊、過程等是促成所需結果的自一致步驟或者指令序列。該步驟是需要物理操控物理量的步驟。這些量盡管未必但是通常采用計算機可讀存儲介質的電信號或磁信號的形式并且能夠在計算機系統(tǒng)中被存儲、傳送、組合、比較和另外操作。已經(jīng)證實主要出于普遍用法的原因而將這些信號稱為位、值、單元、符號、字符、項、數(shù)等有時是方便的。
[0041]然而應當謹記這些和相似術語中的所有術語將與適當物理量關聯(lián)并且僅為應用于這些量的方便標簽。除非如從以下討論中清楚的那樣另有具體明示,理解貫穿本發(fā)明利用術語、比如“處理”或者“訪問”或者“寫入”或者“存儲”或者“重復”等的討論指代計算機系統(tǒng)或者相似電子計算設備的動作和過程,該計算機系統(tǒng)或者電子計算設備將在計算機系統(tǒng)的寄存器和存儲器以及其它計算機可讀介質內的表示為物理(電子)量的數(shù)據(jù)操控和變換成在計算機系統(tǒng)存儲器或者寄存器或者其它這樣的信息存儲、傳輸或者顯示設備內的相似地表示為物理量的其它數(shù)據(jù)。
[0042]在一個實施例中,將本發(fā)明實施為一種用于加速微處理器中的代碼優(yōu)化的方法。該方法包括使用指令提取部件來提取傳入的微指令序列并且向解碼部件傳送所提取的宏指令用于解碼成微指令。通過將微指令序列重排序成包括多個依賴代碼組的優(yōu)化的微指令序列來執(zhí)行優(yōu)化處理。該優(yōu)化的微指令序列被輸出至微處理器流水線用于執(zhí)行。優(yōu)化的微指令序列的副本被存儲在序列高速緩存中用于在向優(yōu)化的微指令序列后續(xù)命中時的后續(xù)使用。
[0043]圖1示出根據(jù)本發(fā)明的一個實施例的微處理器100的分配/發(fā)出級的概況圖。如圖1中所示,微處理器100包括提取部件101、本機解碼部件102以及指令調度和優(yōu)化部件110和微處理器的其余流水線105。
[0044]在圖1的實施例中,宏指令由提取部件101提取并且由本機解碼部件102解碼成本機微指令,該本機解碼部件然后向微指令高速緩存121以及指令調度和優(yōu)化器部件110提供該本機微指令。在一個實施例中,所提取的宏指令包括通過預測某些分支而組裝的指令序列。
[0045]宏指令序列由本機解碼部件102解碼成結果微指令序列。這一微指令序列然后通過復用器103向指令調度和優(yōu)化部件110傳輸。該指令調度和優(yōu)化器部件通過例如通過對微指令序列的某些指令重排序來執(zhí)行優(yōu)化處理用于更高效執(zhí)行而工作。這產(chǎn)生然后通過復用器104向其余流水線105(例如分配、派發(fā)、執(zhí)行和引退級等)傳送的優(yōu)化的微指令序列。該優(yōu)化的微指令序列造成指令的更快和更高效執(zhí)行。
[0046]在一個實施例中,宏指令可以是來自高級指令集架構的指令,而微指令是低級機器指令。在另一實施例中,宏指令可以是來自多個不同指令集架構(例如與CISC相似、x86、與RISC相似、MIPS、SPARC、ARM、與虛擬相似、JAVA等)的客戶指令,而微指令是低級別機器指令或者不同本機指令集架構的指令。相似地,在一個實施例中,宏指令可以是架構的本機指令,并且微指令可以是該相同架構的已經(jīng)重排序和優(yōu)化的本機微指令。例如X86宏指令和X86微代碼化的微指令。
[0047]在一個實施例中,為了加速頻繁遇到的代碼(例如熱代碼)的執(zhí)行性能,在微指令高速緩存121內高速緩存頻繁遇到的微指令序列的副本,并且在序列高速緩存122內高速緩存頻繁遇到的優(yōu)化的微指令序列的副本。在代碼被提取、解碼、優(yōu)化和執(zhí)行時,可以通過描繪的驅逐和填充路徑130根據(jù)序列高速緩存的大小來驅逐或者提取某些優(yōu)化的微指令序列。這一驅逐和填充路徑允許向微處理器的存儲器分級(例如LI高速緩存、L2高速緩存、特殊可緩沖存儲器范圍等)和從微處理器的存儲器分級傳送優(yōu)化的微指令序列。
[0048]應當指出在一個實施例中可以省略微指令高速緩存121。在這樣的實施例中,通過在序列高速緩存122內存儲優(yōu)化的微指令序列來提供熱代碼的加速。例如通過省略微指令高速緩存121而節(jié)省的空間可以例如用來實現(xiàn)更大序列高速緩存122。
[0049]圖2示出對根據(jù)本發(fā)明的一個實施例的優(yōu)化過程進行圖示的概況圖。圖2的左手側示出如例如從本機解碼部件102或者微指令高速緩存121接收的傳入的微指令序列。在第一次接收這些指令時,它們未被優(yōu)化。
[0050]優(yōu)化過程的一個目的是對相互依賴的指令進行定位和標識并且將它們移入它們的相應依賴性組中,從而它們可以更高效執(zhí)行。在一個實施例中,可以一起派發(fā)依賴指令組,從而它們可以更高效執(zhí)行,因為它們的相應源和目的被一起分組用于本地。應當指出這一優(yōu)化過程可以使用在無序處理器以及依序處理器二者中。例如在依序處理器中,指令被依序地派發(fā)。然而可以到處移動它們,從而如以上描述的那樣在相應組中放置依賴指令,使得組然后可以獨立執(zhí)行。
[0051]例如傳入指令包括加載、操作和存儲。例如指令I包括如下操作,在該操作中將源寄存器(例如寄存器9和寄存器9)相加并且將結果存儲在寄存器5中。因此,寄存器5是目的而寄存器9和寄存器5是源。以這一方式,16個指令的序列如圖所述包括目的寄存器和源寄存器。
[0052]圖2的實施例實施指令重排序以創(chuàng)建依賴性組,其中屬于組的指令相互依賴。為了實現(xiàn)這一點,執(zhí)行關于16個傳入指令的加載和存儲執(zhí)行危險校驗的算法。例如存儲在無依賴性校驗的情況下就不能移動過去更早的加載。存儲不能傳遞更早存儲。加載在無依賴性校驗的情況下就不能傳遞更早加載。加載可以傳遞加載。指令可以通過使用重命名技術來傳遞在先路徑預測的分支(例如動態(tài)構造的分支)。在非動態(tài)預測的分支的情況下,指令移動需要考慮分支的范圍。以上規(guī)則中的每個規(guī)則可以通過添加虛擬依賴性來實施(例如通過向指令人為添加虛擬源或者目的以施行規(guī)則)。
[0053]仍然參照圖2,如以上描述的那樣,優(yōu)化過程的目的是對依賴指令進行定位并且將它們移入公共依賴性組。這一過程必須根據(jù)危險校驗算法來完成。優(yōu)化算法尋找指令依賴性。指令依賴性還包括真實依賴性、輸出依賴性和反依賴性。
[0054]算法通過首先尋找真實依賴性來開始。為了標識真實依賴性,比較16指令序列的每個目的與在16指令序列中更晚出現(xiàn)的其它后續(xù)源。真實依賴于更早指令的后續(xù)指令被標記“_1”以表明它們的真實依賴性。這在圖2中由在16指令序列上從左向右進行的指令編號示出。例如考慮指令編號4,比較目的寄存器R3與后續(xù)指令的源,并且每個后續(xù)源被標記“_1”以指示該指令的真實依賴性。在這一情況下,指令6、指令7、指令11和指令15被標記“ _1”。
[0055]算法然后尋找輸出依賴性。為了標識輸出依賴性,比較每個目的與其它后續(xù)指令的目的。并且對于16個指令中的每個指令,匹配的每個后續(xù)目的被標記“1_”(例如有時稱為紅色目的)。
[0056]算法然后尋找反依賴性。為了標識反依賴性,對于16個指令中的每個指令,比較每個源與更早指令的源以標識匹配。如果匹配出現(xiàn),則在考慮之下的指令標記它本身為“1_” (例如有時稱為紅色指令)。
[0057]以這一方式,算法填充用于16個指令的序列的行和列的依賴性矩陣。依賴性矩陣包括標記,這些標記指示用于16個指令中的每個指令的不同依賴性類型。在一個實施例中,通過使用CAM匹配硬件和適當廣播邏輯在一個周期中填充依賴性矩陣。例如目的可以通過其余指令向下廣播以與后續(xù)指令的源比較(例如真實依賴性)以及與后續(xù)指令的目的比較(例如輸出依賴性),而目的可以通過先前指令向上廣播以與在先指令的源比較(例如反依賴性)。[0058]優(yōu)化算法使用依賴性矩陣以選擇將哪些指令一起移入公共依賴性組。希望真實相互依賴的指令被移向相同組。寄存器重命名用來消除反依賴性以允許移動那些反依賴指令。該移動根據(jù)以上描述的規(guī)則和危險校驗來完成。例如存儲在無依賴性校驗的情況下就不能移動過去更早的加載。存儲不能傳遞更早存儲。加載在無依賴性校驗的情況下就不能傳遞更早存儲。加載可以穿遞加載。指令可以通過使用重命名技術來傳遞在先路徑預測的分支(例如動態(tài)構造的分支)。在非動態(tài)預測的分支的情況下,指令移動需要考慮分支的范圍。注意該描述。
[0059]在一個實施例中,可以實施優(yōu)先級編碼器以確定哪些指令獲得移動以與其它指令分組。優(yōu)先級編碼器將根據(jù)依賴性矩陣提供的信息工作。
[0060]圖3和圖4示出根據(jù)本發(fā)明的一個實施例的多步驟優(yōu)化過程。在一個實施例中,優(yōu)化過程是迭代的,因為在指令通過移動它們的依賴性列在第一傳遞中被移動之后,重填充并且再次檢查依賴性矩陣尋找移動指令的新機會。在一個實施例中,重復這一依賴性矩陣填充過程三次。這在圖4中被示出,該圖示出已經(jīng)被移動、然后再次被檢查尋找移動其它指令的機會的指令。在16個指令中的每個指令的右手側上的編號序列示出指令在過程開始時所在的組和指令在過程完成時所在的組而在它們之間有居間組編號。例如圖4示出指令6如何初始地在組4中、但是被移動在組I中。
[0061]以這一方式,圖2至圖4圖示根據(jù)本發(fā)明的一個實施例的優(yōu)化算法的操作。應當指出雖然圖2至圖4圖示分配/發(fā)布級,但是也可以在本地調度器/派發(fā)級中實施這一功倉泛。
[0062]圖5示出根據(jù)本發(fā)明的一個實施例的示例硬件優(yōu)化過程500的步驟的流程圖。如在圖5中描繪的那樣,流程圖示出根據(jù)本發(fā)明的一個實施例的如在微處理器的分配/發(fā)布級中實施的優(yōu)化過程的操作步驟。
[0063]過程500在步驟501中開始,在該步驟中使用指令提取部件(例如來自圖1的提取部件20)來提取傳入宏指令序列。如以上描述的那樣,提取的指令包括通過預測某些指令分支而組裝的序列。
[0064]在步驟502中,將提取的宏指令向解碼部件傳送用于解碼成微指令。該宏指令序列根據(jù)分支預測而解碼成微指令序列。在一個實施例中,微指令序列然后在微指令高速緩存中存儲。
[0065]在步驟503中,然后通過將包括微指令的序列重排序成依賴性組對微指令序列執(zhí)行優(yōu)化處理。重排序由指令重排序部件(例如指令調度和優(yōu)化器部件110)實施。在圖2至圖4中描述這一過程。
[0066]在步驟504中,優(yōu)化的微指令序列是向微處理器流水線的輸出用于執(zhí)行。如以上描述的那樣,將優(yōu)化的微指令序列向機器的其余部分轉發(fā)用于執(zhí)行(例如其余流水線105)。
[0067]并且后續(xù)在步驟505中,將優(yōu)化的微指令序列的副本在序列高速緩存中存儲用于在向該序列后續(xù)命中時的后續(xù)使用。以這一方式,序列高速緩存實現(xiàn)在后續(xù)命中優(yōu)化的微指令序列時訪問那些序列、由此加速熱代碼。
[0068]圖6示出根據(jù)本發(fā)明的一個實施例的備選示例硬件優(yōu)化過程600的步驟的流程圖。如在圖6中描繪的那樣,流程圖示出根據(jù)本發(fā)明的一個備選實施例的如在微處理器的分配/發(fā)布級中實施的優(yōu)化過程的操作步驟。
[0069]過程600在步驟601中開始,在該步驟中使用指令提取部件(例如來自圖1的提取部件20)來提取傳入宏指令序列。如以上描述的那樣,提取的指令包括通過預測某些指令分支而組裝的序列。
[0070]在步驟602中,將提取的宏指令向解碼部件傳送用于解碼成微指令。將宏指令序列根據(jù)分支預測解碼成微指令序列。在一個實施例中,微指令序列然后在微指令高速緩存中存儲。
[0071]在步驟603中,將所解碼的微指令在微指令序列高速緩存中存儲成序列。根據(jù)基本塊邊界形成微指令高速緩存中的序列以開始。這些序列在這一點未被優(yōu)化。
[0072]在步驟604中,然后通過將包括微指令的序列重排序成依賴性組對微指令序列進行優(yōu)化處理。重排序由指令重排序部件(例如指令調度和優(yōu)化器部件110)實施。在圖2至圖4中描述這一過程。
[0073]在步驟605中,優(yōu)化的微指令序列是向微處理器流水線的輸出用于執(zhí)行。如以上描述的那樣,將優(yōu)化的微指令序列向機器的其余部分轉發(fā)用于執(zhí)行(例如其余流水線105)。
[0074]并且后續(xù)在步驟606中,將優(yōu)化的微指令序列的副本在序列高速緩存中存儲用于在向該序列后續(xù)命中時用于后續(xù)使用。以這一方式,序列高速緩存實現(xiàn)在后續(xù)命中優(yōu)化的微指令序列時訪問那些序列、由此加速熱代碼。
[0075]圖7示出對根據(jù)本發(fā)明的一個實施例的分配/發(fā)布級的CAM匹配硬件和優(yōu)先級編碼硬件的操作進行示出的圖。如在圖7中描繪的那樣,從左側向CAM陣列中廣播指令的目的。示出三個示例指令目的。更淺色陰影的CAM(例如綠色)用于真實依賴性匹配和輸出依賴性匹配,因此將該目的向下廣播。更深色陰影(例如藍色)用于反依賴性匹配,因此將目的向上廣播。這些匹配如以上描述的那樣填充依賴性矩陣。在右側上示出優(yōu)先級編碼器,并且它們通過掃描CAM行以發(fā)現(xiàn)第一匹配“_1”或者“1_”來工作。如以上在圖2-圖4的討論中描述的那樣,該過程可以實施為迭代。例如,如果“_1”被“1_”阻塞,則可以將該目的重命名和移動。
[0076]圖8示出對根據(jù)本發(fā)明的一個實施例的在分支之前的優(yōu)化的調度指令進行圖示的圖。如圖8中所示,與傳統(tǒng)準時編譯器實例并排描繪硬件優(yōu)化的示例。圖8的左手側示出原有未優(yōu)化的代碼,該代碼包括偏置的未取得的分支“Branch C to LI”。圖8的中間列示出傳統(tǒng)準時編譯器優(yōu)化,其中將寄存器重命名并且將指令移動在分支之前。在這一示例中,準時編譯器插入補償代碼以考慮分支偏置判決錯誤的那些場合(例如其中將分支實際取得而不是未取得)。對照而言,圖8的右列示出硬件展開的優(yōu)化。在這一情況下,將寄存器重命名并且將指令移動在分支之前。然而應當指出未插入補償代碼。硬件保持對分支偏置判決是否為真的追蹤。在錯誤預測的分支的情況下,硬件自動退回它的狀態(tài)以便執(zhí)行正確的指令序列。硬件優(yōu)化器解決方案能夠避免使用補償代碼,因為在那些情況下,在未命中預測分支時,硬件跳轉至存儲器中的原有代碼并且從該原有代碼執(zhí)行正確序列而刷新未命中預測的指令序列。
[0077]圖9示出對根據(jù)本發(fā)明的一個實施例的在存儲之前的優(yōu)化調度加載進行圖示的圖。如圖9中所示,與傳統(tǒng)準時編譯器示例并排描繪硬件優(yōu)化的示例。圖9的左手側示出包括存儲“R3〈_LD[R5] ”的原有未優(yōu)化的代碼。圖9的中間列示出傳統(tǒng)準時編譯器優(yōu)化,其中將寄存器重命名并且將加載移動在存儲之前。在這一示例中,準時編譯器插入補償代碼以考慮加載指令的地址與存儲指令的地址混淆的場合(例如其中將加載移動在存儲之前是不適合的)。對照而言,圖9的右列示出硬件展開的優(yōu)化。在這一情況下,將寄存器重命名并且也將加載移動在存儲之前。然而應當指出未插入補償代碼。在將加載移動在存儲之前是錯誤的情況下,硬件自動退回它的狀態(tài)以便執(zhí)行正確的指令序列。硬件優(yōu)化器解決方案能夠避免使用補償代碼,因為在那些情況下,在未命中預測地址混淆校驗分支的情況下,硬件跳轉至存儲器中的原有代碼并且從該原有代碼執(zhí)行正確序列而刷新未命中預測的指令序列。在這一情況下,序列假設無混淆。應當指出在一個實施例中,在圖9中圖解的功能可以由圖1的指令調度和優(yōu)化器部件110實施。相似地,應當指出在一個實施例中,在圖9中描繪的功能可以由以下在圖10中描述的軟件優(yōu)化器1000實施。
[0078]此外,關于動態(tài)地展開的序列,應當指出指令可以通過使用重命名來傳遞在先路徑預測的分支(例如動態(tài)構造的分支)。在非動態(tài)預測的分支的情況下,指令移動應當考慮分支的范圍??梢栽谙M某潭壬险归_循環(huán),并且可以跨越整個序列應用優(yōu)化。例如這可以通過將跨越分支移動的指令的目的寄存器重命名來實施。這一特征的益處之一是無需補償代碼或者分支范圍的廣泛分析。這一特征因此大量加速和簡化優(yōu)化過程。
[0079]關于分支預測和指令序列的組裝的附加信息可以在Mohammad A.Abdallah提交于2010 年 9 月 17 日的、名稱為"SINGLE CYCLE MULT 1-BRANCH PREDICTION INCLUDING SHADOWCACHE FOR EARLY FAR BRANCH PREDICTION"的、共同轉讓的美國專利申請第61/384,198號中發(fā)現(xiàn),并且將其完全結合于此。
[0080]圖10示出根據(jù)本發(fā)明的一個實施例的示例軟件優(yōu)化過程的圖。在圖10的實施例中,指令調度和優(yōu)化器部件(例如圖1的部件110)被基于軟件的優(yōu)化器1000替代。
[0081]在圖10的實施例中,軟件優(yōu)化器1000執(zhí)行由基于硬件的指令調度和優(yōu)化器部件Iio執(zhí)行的優(yōu)化處理。軟件優(yōu)化器在存儲器分級(例如L1、L2、系統(tǒng)存儲器)中維護優(yōu)化的序列的副本。這允許軟件優(yōu)化器維護與在序列高速緩存中存儲的優(yōu)化的序列的匯集比較的大得多的優(yōu)化的序列的匯集。
[0082]應當指出軟件優(yōu)化器1000可以包括在存儲器分級中駐留的代碼作為向優(yōu)化器的輸入和從優(yōu)化過程的輸出二者。
[0083]應當指出在一個實施例中可以省略微指令高速緩存。在這樣的實施例中,僅高速緩存優(yōu)化的微指令序列。
[0084]圖11示出根據(jù)本發(fā)明的一個實施例的SMD基于軟件的優(yōu)化過程的流程圖。圖11的頂部示出基于軟件的優(yōu)化器如何檢查輸入指令序列的每個指令。圖11示出SMD比較如何可以用來匹配一個與許多(例如SMD字節(jié)比較第一源“Srcl”與所有第二源字節(jié)“Scr2”)。在一個實施例中,SrcI包含任何指令的目的寄存器,并且Src2包含來自每個其它后續(xù)指令的一個源。對于每個目的完成與所有后續(xù)指令源匹配(例如真實依賴性校驗)。這是指示用于指令的希望組的按對匹配。在每個目的與每個后續(xù)指令目的之間完成匹配(例如輸出依賴性校驗)。這是可以用重命名化解的阻塞匹配。在每個目的與每個在先指令源之間完成匹配(例如反依賴性匹配)。這是可以通過重命名化解的阻塞匹配。結果用來填充依賴性矩陣的行和列。[0085]圖12示出根據(jù)本發(fā)明的一個實施例的示例SMD基于軟件的優(yōu)化過程1200的操作步驟的流程圖。該過程1200在圖9的流程圖的上下文中描述。
[0086]在步驟1201中,通過使用基于軟件的優(yōu)化器實例化的存儲器來訪問輸入指令序列。
[0087]在步驟1202中,使用SMD指令用通過使用SMD比較指令序列從輸入指令序列抽取的依賴性信息來填充依賴性矩陣。
[0088]在步驟1203中,從右向左掃描矩陣的行尋找第一匹配(例如依賴性標記)。
[0089]在步驟1204中,分析第一匹配中的每個第一匹配以確定匹配的類型。
[0090]在步驟1205中,如果第一標記的匹配是阻塞依賴性,則對于這一目的完成重命名。
[0091]在步驟1206中,標識用于矩陣的每行的所有第一匹配并且將用于該匹配的對應列移向給定的依賴性組。
[0092]在步驟1207中,重復掃描過程若干次以對包括輸入序列的指令重排序以產(chǎn)生優(yōu)化的輸出序列。
[0093]在步驟1208中,將優(yōu)化的指令序列向微處理器的執(zhí)行流水線輸出用于執(zhí)行。
[0094]在步驟1209中,將優(yōu)化的輸出序列存儲在序列高速緩存中用于后續(xù)消耗(例如加速熱代碼)。
[0095]應當指出可以使用SMD指令來串行完成軟件優(yōu)化。例如可以通過一次處理一個指令從而掃描指令的源和目的(例如從在序列中的更早指令到后續(xù)指令)來實施優(yōu)化。軟件使用SMD指令以根據(jù)以上描述的優(yōu)化算法和SMD指令并行比較當前指令源和目的與在先指令源和目的(例如檢測真實依賴性、輸出依賴性和反依賴性)。
[0096]圖13示出根據(jù)本發(fā)明的一個實施例的基于軟件的依賴性廣播過程。圖13的實施例示出處理指令組而未以如以上描述的完全并行硬件實現(xiàn)方式為代價的示例軟件調度過程的流程圖。然而圖13的實施例仍然可以使用SMD以并行處理更小指令組。
[0097]圖13的軟件調度過程進行如下。首先,該過程初始化三個寄存器。該過程取得指令編號并且將它們加載到第一寄存器中。該過程然后取得目的寄存器編號并且將它們加載到第二寄存器中。該過程然后取得第一寄存器中的值并且根據(jù)第二寄存器中的位置編號將它們向第三結果寄存器中的位置廣播。該過程然后在第二寄存器中從左向右改寫,最左側值將在廣播去往結果寄存器中的相同位置的那些實例中改寫右側值。第三寄存器中的尚未寫入的位置被繞過。這一信息用來填充依賴性矩陣。
[0098]圖13的實施例也示出可以將輸入指令序列處理為多組的方式。例如可以將16輸入指令序列處理為第一組8個指令和第二組8個指令。利用第一組,將指令編號加載第一寄存器中,將指令目的編號加載到第二寄存器中,并且根據(jù)第二寄存器中的位置編號(例如組廣播)將第一寄存器中的值向第三寄存器(例如結果寄存器)中的位置廣播。第三寄存器中的尚未寫入的位置被繞過。第三寄存器現(xiàn)在變成用于處理第二組的基礎。例如來自組I的結果寄存器現(xiàn)在變成用于處理組二的結果寄存器。
[0099]利用第二組,將指令編號加載到第一寄存器中,將指令目的編號加載到第二寄存器中,并且根據(jù)第二寄存器中的位置編號將第一寄存器中的值向第三寄存器(例如結果寄存器)中的位置廣播。在第三寄存器中的位置可以改寫在處理第一組期間寫入的結果。第三寄存器中的尚未寫入的位置被繞過。以這一方式,第二組更新來自第一組的基礎并且由此產(chǎn)生用于處理第三組的新基礎并且以此類推。
[0100]在第二組中的指令可以繼承在第一組的處理中生成的依賴性信息。應當指出無需處理整個第二組以更新結果寄存器中的依賴性。例如可以在第一組的處理中生成用于指令12的依賴性,然后處理第二組中的指令直至指令11。這更新結果寄存器為直至指令12的狀態(tài)。在一個實施例中,掩碼可以用來防止用于第二組的其余指令(例如指令12至16)的更新。為了確定用于指令12的依賴性,檢查結果寄存器尋找R2和R5。將用指令I更新R5,并且將用指令11更新R2。應當指出在處理組2的全部的情況下將用指令15更新R2。
[0101]此外,應當指出可以相互獨立處理第二組的所有指令(指令9-16)。在這樣的情況下,第二組的指令僅依賴于第一組的結果寄存器。一旦根據(jù)第一組的處理更新結果寄存器,則第二組的指令可以并行處理。以這一方式,可以接連并行處理指令組。在一個實施例中,使用SMD指令(例如SMD廣播指令)來處理每組、由此并行處理所述每組中的所有指令。
[0102]圖14示出對根據(jù)本發(fā)明的一個實施例可以如何使用指令的依賴性分組以構建依賴指令的可變有界組進行示出的示例流程圖。在圖2至圖4的描述中,組大小被約束,在那些情況下每組三個指令。圖14示出如何可以將指令重排序成可變大小組,該可變大小組然后可以向多個計算引擎進行分配。例如圖14示出4個引擎。由于組可以根據(jù)它們的特性而大小可變,所以引擎I可以被分配例如比引擎2更大的組。這可以例如在引擎2具有如下指令情況下出現(xiàn),該指令未具體依賴于該組中的其它指令。
[0103]圖15示出對根據(jù)本發(fā)明的一個實施例的指令的分級調度進行描繪的流程圖。如以上描述的那樣,指令的依賴性分組可以用來構建可變有界組。圖15示出如下特征,其中各種依賴性級存在于依賴性組內。例如指令I未依賴于這一指令序列內的任何其它指令、因此使指令I成為LO依賴性級。然而指令4依賴于指令1、因此使指令4成為LI依賴性級。以這一方式,如圖所示將指令序列的指令中的每個指令指派依賴性級。
[0104]每個指令的依賴性級由第二級分級調度器用來以確保資源可用于執(zhí)行依賴指令這樣的方式派發(fā)指令。例如在一個實施例中,將LO指令加載到第二級調度器1-4處理的指令隊列中。加載LO指令使得它們在隊列中的每個隊列前面,加載LI指令使得它們在隊列中的每個隊列中跟隨、L2指令跟隨它們并且以此類推。這在圖15中由從LO至Ln的依賴性級示出。調度器1-4的分級調度有利地利用在時間上局部和指令到指令依賴性以用最優(yōu)方式做出調度判決。
[0105]以這一方式,本發(fā)明的實施例提示用于指令序列的指令的依賴性組時隙分配。例如為了實施無序微架構,指令序列的指令的派發(fā)是無序的。在一個實施例中,在每個周期上校驗指令準備就緒。如果先前已經(jīng)派發(fā)它依賴于的所有指令,則指令準備就緒。調度器結構通過校驗那些依賴性來工作。在一個實施例中,調度器是統(tǒng)一的調度器,并且在統(tǒng)一的調度器結構中執(zhí)行所有依賴性校驗。在另一實施例中,跨越多個引擎的執(zhí)行單元的派發(fā)隊列分布調度器功能。因此,在一個實施例中,調度器是統(tǒng)一的,而在另一實施例中,調度器是分布的。利用這兩種解決方案,每個周期按照派發(fā)指令的目的來校驗每個指令源。
[0106]因此,圖15示出如本發(fā)明的實施例執(zhí)行的分級調度。如以上描述的那樣,首先將指令分組以形成依賴性鏈(例如依賴性組)。這些依賴性鏈的形成可以通過軟件或者硬件靜態(tài)或者動態(tài)完成。一旦這些依賴性鏈已經(jīng)形成,可以向引擎分布/派發(fā)它們。以這一方式,依賴性分組允許無序調度的有序形成的組。依賴性分組也向多個引擎(例如核或者線程)上分布整個依賴性組。依賴性分組也有助于如以上描述的分級調度,其中依賴指令在第一步驟中被分組、然后在第二步驟中被調度。
[0107]應當指出在圖14-圖19中圖解的功能可以與用來對指令進行分組的任何方法(例如是否在硬件、軟件等中實施分組功能)獨立地工作。此外,圖14-圖19中所示依賴性分組可以包括獨立組的矩陣,其中每組還包括依賴指令。此外,應當指出調度器也可以是引擎。在這樣的實施例中,調度器1-4中的每個調度器可以被并入于它的相應引擎內(例如如圖22中所示,其中每個分段包括公共分區(qū)調度器)。
[0108]圖16示出對根據(jù)本發(fā)明的一個實施例的三時隙依賴性指令組的分級調度進行描繪的流程圖。如以上描述的那樣,指令的依賴性分組可以用來構建可變有界組。在這一實施例中,依賴性組包括三個時隙。圖16示出甚至在三時隙依賴性組內的各種依賴性級。如以上描述的那樣,指令I未依賴在這一指令序列內的任何其它指令、因此使指令I成為LO依賴性級。然而指令4依賴于指令1、因此使指令4成為LI依賴性級。以這一方式,如圖所示將指令序列的指令中的每個指令指派依賴性級。
[0109]如以上描述的那樣,每個指令的依賴性級由第二級分級調度器用來以確保資源可用于執(zhí)行依賴指令這樣的方式來派發(fā)指令。將LO指令加載到第二級調度器1-4處理的指令隊列中。如圖6中從LO至Ln的依賴性級所示,加載LO指令使得它們在隊列中的每個隊列前面,加載LI指令使得它們在隊列中的每個指令中跟隨、L2指令跟隨它們并且以此類推。應當指出組編號四(例如從頂部起的第四組)即使它是分離組仍然在L2開始。這是因為指令7依賴指令4,指令4依賴指令1,由此向指令7給予L2依賴性。
[0110]以這一方式,圖16示出如何在調度器1-4中的給定的調度器上一起調度每三個依賴指令。在第一級組后面調度第二級組,然后旋轉該組。
[0111]圖17示出對根據(jù)本發(fā)明的一個實施例的三時隙依賴性指令組的分級移動窗口調度進行描繪的流程圖。在這一實施例中,經(jīng)由統(tǒng)一的移動窗口調度器實施用于三時隙依賴性組的分級調度。移動窗口調度器處理隊列中的指令以用確保資源可用于執(zhí)行依賴指令這樣的方式來派發(fā)指令。如以上描述的那樣,向第二級調度器1-4處理的指令隊列中加載LO指令。如圖17中從LO至Ln的依賴性級所示,加載LO指令使得它們在隊列中的每個隊列前面,加載LI指令使得它們在隊列中的每個隊列中跟隨,L2指令跟隨它并且以此類推。移動窗口圖示如何可以從隊列中的每個隊列派發(fā)LO指令,即使它們可以在一個隊列而不是另一隊列中。以這一方式,移動窗口調度器如圖17中所示隨著隊列從左向右流動而派發(fā)指令。
[0112]圖18示出根據(jù)本發(fā)明的一個實施例如何向多個計算引擎分配指令的可變大小依賴鏈(例如可變有界組)。
[0113]如圖18中描繪的那樣,處理器包括指令調度器部件10和多個引擎11-14。該指令調度器部件生成代碼塊和繼承矢量以支持在它們的相應引擎上執(zhí)行依賴代碼塊(例如可變有界組)。依賴代碼塊中的每個依賴代碼塊可以屬于相同邏輯核/線程或者不同邏輯核/線程。指令調度器部件將處理依賴代碼塊以生成相應繼承矢量。這些依賴代碼塊和相應繼承矢量如圖所示向特定引擎11-14分配。全局互聯(lián)30支持跨越引擎11-14中的每個引擎的必需通信。應當指出如以上在圖14的討論中描述的用于指令的依賴性分組以構建依賴指令的可變有界組的功能由圖18的實施例的指令調度器部件10實施。
[0114]圖19示出對根據(jù)本發(fā)明的一個實施例的向調度隊列的塊分配和三時隙依賴性指令組的分級移動窗口調度進行描繪的流程圖。如以上描述的那樣,可以經(jīng)由統(tǒng)一的移動窗口調度器實施用于三時隙依賴性組的分級調度。圖19示出依賴性組如何變成向調度隊列中加載的塊。在圖19的實施例中,可以在每個隊列中加載兩個獨立組作為半塊。這在圖19的頂部被示出,其中組I形成向第一調度隊列中加載的一個半塊并且組4形成另一半塊。
[0115]如以上描述的那樣,移動窗口調度器處理隊列中的指令以用確保資源可用于執(zhí)行依賴指令這樣的方式分派指令。圖19的底部示出如何向第二級調度器處理的指令隊列中加載LO指令。
[0116]圖20示出根據(jù)本發(fā)明的一個實施例如何在引擎11-14上執(zhí)行依賴代碼塊(例如依賴性組或者依賴性鏈)。如以上描述的那樣,指令調度器部件生成代碼塊和繼承矢量以支持在它們的相應引擎上執(zhí)行依賴代碼塊(例如可變有界組、三時隙組等)。如以上在圖19中描述的那樣,圖20還示出如何可以向每個引擎中加載兩個獨立組作為代碼塊。圖20示出如何向引擎11-14派發(fā)這些代碼塊,其中依賴指令在每個引擎的堆疊(例如串聯(lián)連接)的執(zhí)行單元上執(zhí)行。例如在圖20的左上部上的第一依賴性組或者代碼塊中,向引擎11派發(fā)指令,其中按照它們的依賴性的順序在執(zhí)行單元上堆疊它們,從而在LI上面堆疊L0,在L2上進一步堆疊LI。在這樣做時,LO的結果流向LI的執(zhí)行單元,LI然后可以流向L2的執(zhí)行。
[0117]以這一方式,圖20中所示依賴性組可以包括獨立組的矩陣,其中每組還包括依賴指令。組獨立的益處是有能力并行派發(fā)和執(zhí)行它們以及最小化對于跨越在引擎之間的互連的通信的需要這樣的屬性。此外,應當指出圖11-14中所示執(zhí)行單元可以包括CPU或者GPU。
[0118]根據(jù)本發(fā)明的實施例,應當理解指令根據(jù)它們的依賴性被抽象化成依賴性組或者塊或者指令矩陣。根據(jù)指令的依賴性對它們進行分組有助于具有更大指令窗口(例如更大輸入指令序列)的更簡化調度過程。如以上描述的分組去除指令變化并且統(tǒng)一地抽象化這樣的變化、由此允許實施簡單、同構和統(tǒng)一調度決策做出。以上描述的分組功能增加調度器的吞吐量而未增加調度器的復雜性。例如在用于四個引擎的調度器中,調度器可以派發(fā)四組,其中每組具有三個指令。在這樣做時,調度器在派發(fā)12個指令之時僅處置超定標器復雜性的四個通道。另外,每個塊可以包含并行獨立組,這進一步增加派發(fā)的指令數(shù)目。
[0119]圖21示出根據(jù)本發(fā)明的一個實施例的多個引擎及其部件的概況圖,這些部件包括全局前端提取和調度器和寄存器文件、全局互連以及用于多核處理器的分段式存儲器子系統(tǒng)。如在圖21中描繪的那樣,示出四個存儲器片段101-104。存儲器片段化分級跨越每個存儲器分級(例如LI高速緩存、L2高速緩存和加載存儲緩沖器)相同??梢酝ㄟ^存儲器全局互連IlOa在LI高速緩存中的每個LI高速緩存、L2高速緩存中的每個L2高速緩存和加載存儲緩沖器中的每個加載存儲緩沖器之間交換數(shù)據(jù)。
[0120]存儲器全局互連包括路由矩陣,該路由矩陣允許多個核(例如地址計算和執(zhí)行單元121-124)訪問可以在片段式高速緩存分級中的任何點(例如LI高速緩存、加載存儲緩沖器和L2高速緩存)存儲的數(shù)據(jù)。圖21還描繪地址計算和執(zhí)行單元121-124可以通過存儲器全局互連IlOa來訪問片段101-104中的每個片段的方式。[0121]執(zhí)行全局互連IlOb相似地包括路由矩陣,該路由矩陣允許多個核(例如地址計算和執(zhí)行單元121-124)訪問可以在分段式寄存器文件中的任何分段式寄存器文件存儲的數(shù)據(jù)。因此,該核具有通過存儲器全局互連IlOa或者執(zhí)行全局互連IlOb對在片段中的任何片段中存儲的數(shù)據(jù)和對在分段中的任何分段中存儲的數(shù)據(jù)的訪問。
[0122]圖21還示出全局前端提取和調度器,該全局前端提取和調度器對于整個機器的視圖并且管理寄存器文件分段和片段式存儲器子系統(tǒng)的利用。地址生成包括用于片段定義的基礎。全局前端提取和調度器通過向每個片段分配指令序列來工作。
[0123]圖22示出根據(jù)本發(fā)明的一個實施例的多個片段、多個片段是公共分區(qū)調度器互連和以及進入片段的端口。如圖在圖22中描繪的那樣,示出每個分段具有公共分區(qū)調度器。該公共分區(qū)調度器通過調度在它的相應分段內的指令來工作。這些指令是從全局前端提取和調度器輪流接收的。在這一實施例中,該公共分區(qū)調度器被配置為與全局前端提取和調度器配合工作。還示出該分段具有4個讀取寫入端口,這些讀取寫入端口提供對操作數(shù)/結果緩沖器、線程式寄存器文件和公共分區(qū)或者調度器的讀取/寫入訪問。
[0124]在一個實施例中,實施非集中式訪問過程用于使用互連,并且本地互連運用保留加法器和門限限制器來控制對每個爭用的資源——在這一情況下為進入每個分段的端口——的訪問。在這樣的一個實施例中,核需要保留必需總線并且保留必需端口。
[0125]圖23示出根據(jù)本發(fā)明的一個實施例的示例微處理器流水線2300的圖。微處理器流水線2300包括提取模塊2301,該提取模塊實施如以上描述的用于標識和抽取包括執(zhí)行的指令的過程的功能。在圖23的實施例中,提取模塊跟隨有解碼模塊2302、分配模塊2303、派發(fā)模塊2304、執(zhí)行模塊2305和引退模塊2306。應當指出微處理器流水線2300僅為實施以上描述的本發(fā)明的實施例的功能的流水線的一個示例。本領域技術人員將認識可以實施包括以上描述的解碼模塊的功能的其它微處理器流水線。
[0126]出于說明的目的,前文描述參照具體實施例,其未旨在于窮舉或者限制本發(fā)明。與以上教導一致的許多修改和變化是可能的。選擇和描述實施例以便最好地說明本發(fā)明的原理及其實際應用以便使本領域其他技術人員能夠借助如可以與本發(fā)明和各種實施例的特定使用相適的各種修改最好地利用本發(fā)明和各種實施例。
【權利要求】
1.一種用于在微處理器中加速代碼優(yōu)化的方法,包括: 使用指令提取部件來提取傳入的微指令序列; 向解碼部件傳送所提取的宏指令用于解碼成微指令; 通過將所述微指令序列重排序成包括多個依賴代碼組的優(yōu)化的微指令序列來執(zhí)行優(yōu)化處理; 向微處理器流水線輸出所述優(yōu)化的微指令序列用于執(zhí)行;以及將所述優(yōu)化的微指令序列的副本存儲到序列高速緩存中,用于在后續(xù)命中優(yōu)化的微指令序列時的后續(xù)使用。
2.根據(jù)權利要求1所述的方法,其中將所解碼的微指令的副本存儲到微指令高速緩存中。
3.根據(jù)權利要求1所述的方法,其中使用所述微處理器的分配和發(fā)布級來執(zhí)行所述優(yōu)化處理。
4.根據(jù)權利要求3所述的方法,其中所述分配和發(fā)布級還包括將所述微指令序列重排序成所述優(yōu)化的微指令序列的指令調度和優(yōu)化器部件。
5.根據(jù)權利要求1所述的方法,其中所述優(yōu)化處理還包括動態(tài)地展開微指令序列。
6.根據(jù)權利要求1所述 的方法,其中通過多次迭代來實施所述優(yōu)化處理。
7.根據(jù)權利要求1所述的方法,其中通過寄存器重命名過程來實施所述優(yōu)化處理以實現(xiàn)所述重排序。
8.一種微處理器,包括: 指令提取部件,用于提取傳入的微指令序列; 解碼部件,耦合到所述指令提取部件以接收所提取的宏指令序列并且解碼成微指令序列; 分配和發(fā)布級,耦合到所述解碼部件以接收所述微指令序列并且通過將所述微指令序列重排序成包括多個依賴代碼組的優(yōu)化的微指令序列來執(zhí)行優(yōu)化處理; 微處理器流水線,耦合到所述分配和發(fā)布級以接收和執(zhí)行所述優(yōu)化的微指令序列;以及 序列高速緩存,耦合到所述分配和發(fā)布級以接收和存儲所述優(yōu)化的微指令序列的副本,用于在后續(xù)命中所述優(yōu)化的微指令序列時的后續(xù)使用。
9.根據(jù)權利要求8所述的微處理器,其中將所解碼的微指令的副本存儲到微指令高速緩存中。
10.根據(jù)權利要求8所述的微處理器,其中使用所述微處理器的分配和發(fā)布級來執(zhí)行所述優(yōu)化處理。
11.根據(jù)權利要求10所述的微處理器,其中所述分配和發(fā)布級還包括將所述微指令序列重排序成所述優(yōu)化的微指令序列的指令調度和優(yōu)化器部件。
12.根據(jù)權利要求8所述的微處理器,其中所述優(yōu)化處理還包括動態(tài)地展開微指令序列。
13.根據(jù)權利要求8所述的微處理器,其中通過多次迭代來實施所述優(yōu)化處理。
14.根據(jù)權利要求8所述的微處理器,其中通過寄存器重命名過程來實施所述優(yōu)化處理以實現(xiàn)所述重排序。
15.一種用于在微處理器中加速代碼優(yōu)化的方法,包括: 通過使用在存儲器中實例化的基于軟件的優(yōu)化器來訪問輸入的微指令序列; 使用SIMD指令以用從所述輸入的微指令序列抽取的依賴性信息來填充依賴性矩陣;掃描所述依賴性矩陣的多個行,以通過將所述微指令序列重排序成包括多個依賴代碼組的優(yōu)化的微指令序列來執(zhí)行優(yōu)化處理; 向微處理器流水線輸出所述優(yōu)化的微指令序列用于執(zhí)行;以及將所述優(yōu)化的微指令序列的副本存儲到序列高速緩存中,用于在后續(xù)命中優(yōu)化的微指令序列時的后續(xù)使用。
16.根據(jù)權利要求15所述的方法,其中優(yōu)化處理還包括掃描所述依賴性矩陣的所述多個行以標識匹配指令。
17.根據(jù)權利要求16所述的方法,其中優(yōu)化處理還包括分析所述匹配指令以確定所述匹配指令是否包括阻塞依賴性,并且其中執(zhí)行重命名以去除所述阻塞依賴性。
18.根據(jù)權利要求17所述的方法,其中將與所述依賴性矩陣的每行的第一匹配對應的指令移入對應的依賴性組中。
19.根據(jù)權利要求15所述的方法,其中將所述優(yōu)化的微指令序列的副本存儲到所述微處理器的存儲器分級中。
20.根據(jù)權利要求19所述的方法,其中所述存儲器分級包括LI高速緩存和L2高速緩存。
21.根據(jù)權利要求20所述的方法,其中所述存儲器分級還包括系統(tǒng)存儲器。
22.—種微處理器,包括: 指令提取部件,用于提取傳入的微指令序列; 解碼部件,耦合到所述指令提取部件以接收所提取的宏指令序列并且解碼成微指令序列; 分配和發(fā)布級,耦合到所述解碼部件以接收所述微指令序列并且通過將所述微指令序列重排序成包括多個依賴代碼組的優(yōu)化的微指令序列來執(zhí)行優(yōu)化處理; 微處理器流水線,耦合到所述分配和發(fā)布級以接收和執(zhí)行所述優(yōu)化的微指令序列;序列高速緩存,耦合到所述分配和發(fā)布級以接收和存儲所述優(yōu)化的微指令序列的副本,用于在后續(xù)命中所述優(yōu)化的微指令序列時的后續(xù)使用;以及硬件部件,用于移動在所述傳入的微指令序列中的指令。
23.根據(jù)權利要求22所述的微處理器,其中將至少一個寄存器重命名并且將至少一個指令移動到分支之前而未插入補償代碼。
24.根據(jù)權利要求23所述的微處理器,其中所述硬件部件保持對分支偏置判決是否為真的追蹤,并且其中在錯誤預測的分支的情況下,所述硬件部件自動退回狀態(tài)以便執(zhí)行正確的指令序列。
25.根據(jù)權利要求24所述的微處理器,其中所述硬件部件在錯誤預測的分支的情況下跳轉至存儲器中的原有代碼以執(zhí)行所述正確的指令序列。
26.根據(jù)權利要求25所述的微處理器,其中所述硬件部件在錯誤預測的分支的情況下引起未命中預測的指令序列的刷新。
【文檔編號】G06F9/30GK104040491SQ201180076248
【公開日】2014年9月10日 申請日期:2011年11月22日 優(yōu)先權日:2011年11月22日
【發(fā)明者】M·阿布達拉 申請人:索夫特機械公司