寄存器文件高速緩存的軟分區(qū)的制作方法
【專利說明】
【背景技術(shù)】
[0001]很多現(xiàn)代處理器都是多線程的,并且每一個線程都能夠在同一處理器核心上同步執(zhí)行。在多線程處理器中,在核心內(nèi)的一些資源被復(fù)制(使得存在用于每一個線程的資源的實例),并且一些資源在線程之間共享。在資源在線程之間共享的場合,其中一個線程的操作干擾其它線程的操作,性能瓶頸就可能出現(xiàn)。例如,在高速緩存資源在線程之間共享的場合,當一個線程用數(shù)據(jù)填充高速緩存時,沖突可能出現(xiàn)。當數(shù)據(jù)被添加到已經(jīng)充滿的高速緩存時,可以由其它線程(被稱為“受害者”線程)使用的數(shù)據(jù)可以被遷出(用于為新數(shù)據(jù)提供空間)。當接下來需要遷出的數(shù)據(jù)時然后需要將所述遷出的數(shù)據(jù)再次取回,并且這影響了需要數(shù)據(jù)的受害者線程的性能。對此的解決方案是為每一個線程提供單獨的高速緩存。
[0002]下面描述的實施例不限于解決已知的多線程處理器的任何或所有缺點的實現(xiàn)。
【發(fā)明內(nèi)容】
[0003]提供本
【發(fā)明內(nèi)容】
用于以簡化形式介紹下面在【具體實施方式】中進一步詳細地描述的選擇的概念。本
【發(fā)明內(nèi)容】
并不是要識別所要求保護的主題的關(guān)鍵特征或本質(zhì)特征,也不是要用于有助于確定所要求保護的主題的范圍。
[0004]描述了寄存器文件高速緩存的軟分區(qū)。通過基于在多線程亂序處理器中指令屬于的線程來對與所述指令相關(guān)聯(lián)的目的寄存器進行重命名,從而實現(xiàn)所述軟分區(qū)。寄存器重命名可以由寄存器重命名模塊來執(zhí)行,并且在實施例中,寄存器重命名模塊接收用于寄存器重命名的指令,所述指令識別與該指令相關(guān)聯(lián)的線程以及一個或多個架構(gòu)寄存器。然后基于識別出的線程將可用的物理寄存器分配給每一個識別出的架構(gòu)寄存器。在一些示例中,將在多線程亂序處理器中的物理寄存器在邏輯上劃分成組,并且基于線程到組的映射來分配物理寄存器。在另外的示例中,線程到組的映射不是固定的,而可以基于多線程亂序處理器中的一個或多個線程的活動水平來對線程到組的映射進行更新。
[0005]第一方面提供了使用寄存器重命名來在包括多個物理寄存器的多線程亂序處理器中的線程之間動態(tài)地分配分配物理寄存器以及資源的方法,所述方法包括:接收用于寄存器重命名的指令,所述指令識別架構(gòu)寄存器和與指令相關(guān)聯(lián)的線程;至少基于與所述指令相關(guān)聯(lián)的線程將來自處理器中的多個物理寄存器的可用的物理寄存器分配給架構(gòu)寄存器,其中多個物理寄存器中的每一個都被映射到在動態(tài)分配的資源中的一個或多個存儲位置;以及存儲寄存器分配的細節(jié)。
[0006]第二方面在多線程亂序處理器中提供了模塊,所述模塊被布置用于使用寄存器重命名來在處理器中的線程之間動態(tài)地分配分配物理寄存器以及資源,多線程亂序處理器包括多個物理寄存器和包括硬件邏輯的模塊,所述硬件邏輯被布置用于:至少基于與指令相關(guān)聯(lián)的線程將來自處理器中的多個物理寄存器中的可用物理寄存器分配給指令中的架構(gòu)寄存器,其中,多個物理寄存器中的每一個被映射到動態(tài)地分配的資源中的一個或多個存儲位置。
[0007]另一方面提供了以下內(nèi)容:實質(zhì)上參考附圖的圖2或4所描述的方法;實質(zhì)上參考附圖的圖1或3描述的處理器;計算機可讀存儲介質(zhì),所述計算機可讀存儲介質(zhì)具有在其上編碼的計算機可讀程序代碼,以用于生成包括本文描述的模塊的處理器;以及計算機可讀存儲介質(zhì),所述計算機可讀存儲介質(zhì)具有在其上編碼的計算機可讀程序代碼,以用于生成被配置用于執(zhí)行本文描述的方法的處理器。
[0008]本文描述的方法可以由計算機執(zhí)行,所述計算機配置有以機器可讀形式存儲在有形存儲介質(zhì)上的軟件,例如以包括計算機可讀程序代碼的計算機程序的形式,所述計算機可讀程序代碼用于配置計算機來執(zhí)行所述方法的組成部分或以包括計算機程序代碼單元的計算機程序的形式,當所述程序在計算機上運行時,所述計算機程序代碼單元適合于執(zhí)行本文所述的任何方法的所有步驟,并且其中計算機程序可以體現(xiàn)在計算機可讀存儲介質(zhì)上。有形(或非暫時性)存儲介質(zhì)的示例包括盤、拇指驅(qū)動器、存儲卡等,并且不包括傳播的信號。軟件可以適合于在并行處理器或串行處理器上執(zhí)行,使得方法步驟可以以任何適當?shù)捻樞蚧蛲瑫r執(zhí)行。
[0009]本文描述的硬件部件可以由具有在其上編碼的計算機可讀程序代碼的非暫時性計算機可讀存儲介質(zhì)生成。
[0010]這表示固件和軟件可以單獨地使用并且是有價值的。這是要包括運行或控制無智能”或標準硬件用于執(zhí)行期望功能的軟件。還是要包括“描述”或定義硬件的配置的軟件(例如,HDL(硬件描述語言)軟件,如用于設(shè)計硅芯片或用于配置通用可編程芯片的),從而用于執(zhí)行期望功能。
[0011]優(yōu)選的特征可以在適當時相結(jié)合(這對技術(shù)人員而言是顯而易見的),并且可以與本發(fā)明的任何方面相結(jié)合。
【附圖說明】
[0012]作為示例,參考下面的附圖來描述本發(fā)明的實施例,其中:
[0013]圖1是示例性多線程亂序處理器的示意圖;
[0014]圖2示出了物理寄存器分配的示例性方法的流程圖;
[0015]圖3是另一示例性多線程亂序處理器的示意圖;
[0016]圖4示出了物理寄存器分配的進一步的示例性方法的流程圖;以及
[0017]圖5示出了圖4所示的物理寄存器分配的方法中的另一示例性分配方法的流程圖。
[0018]在全部附圖中使用共同的附圖標記來指示相似的特征。
【具體實施方式】
[0019]下面僅作為示例來描述本發(fā)明的實施例。這些示例表示申請人目前已知的實施本發(fā)明的最佳方式,但是它們并不是可以實現(xiàn)本發(fā)明的唯一方式?!揪唧w實施方式】闡述了示例的功能以及用于構(gòu)造并且運行所述示例的步驟的序列。然而,相同或等效的功能和序列可以由不同的示例來完成。
[0020]如上所述,沖突可以出現(xiàn),其中在處理器(或處理器核心)內(nèi)的多個線程共享資源,例如高速緩存??梢栽谔幚砥?或處理器核心)上運行的線程之間共享的高速緩存的一個示例是寄存器文件高速緩存(RFC)。RFC是小型高速緩存(例如,在尺寸上有32個條目),其用于存儲最近寫入的寄存器,用于通過隨后的指令來使訪問這些寄存器的延遲最小化。這些最近寫入的寄存器是最可能由隨后的指令讀取的寄存器。在沒有RFC的情況下,寄存器需要從更大的寄存器文件(RF)訪問。從RF(其可以例如具有128個條目)取出寄存器與訪問RFC相比具有更高的延遲(例如,2個周期而不是I個周期);然而,RFC比RF小得多。當RFC充滿時,新條目將舊條目從RFC遷出,并且存在可以用于確定哪個條目被遷出的多個不同的策略(例如,最近最少使用或最近最少插入)。
[0021]如果所請求的寄存器在RFC中被找到,則這是高速緩存命中,并且寄存器值可以被立即返回。然而如果所請求的寄存器沒有在RFC中找到(高速緩存未命中),則從RF取出它并且引起正在請求的指令塞入并且重新發(fā)出,這招致(例如,4個或更多周期的)性能懲罰。如果RFC具有高命中率(即,產(chǎn)生高速緩存命中的所請求的寄存器的比例很高,例如95% +),則塞入的指令的數(shù)量減少并且處理器的性能提高。
[0022]亂序處理器可以通過以不同于程序的順序的序列來執(zhí)行指令來提供改進的計算性能,使得當指令的輸入數(shù)據(jù)是可用的時執(zhí)行所述指令,而不是等待程序中前面的指令執(zhí)行。然而,程序中的指令流有時可以在執(zhí)行期間(例如由于分支或跳躍指令)而改變。在這樣的情況下,分支預(yù)測器常常用于預(yù)測將采取哪個指令分支,以允許推測地取出在所預(yù)測的分支中的指令并且亂序地執(zhí)行。這意味著分支誤預(yù)測可能發(fā)生。其它推測技術(shù)(例如數(shù)據(jù)的預(yù)先取出)也可以在亂序處理器中使用來提高性能。
[0023]誤推測線程(例如,做出不正確的分支預(yù)測或不適當?shù)仡A(yù)先取出數(shù)據(jù)的線程)不執(zhí)行任何有用的工作(例如,因為在誤推測之后執(zhí)行的所有指令需要沖掉/反繞)。在這樣的誤推測線程寫入RFC的場合,它可以遷出由處理器中的另一線程(受害者線程)使用的寄存器值,并且因此影響了受害者線程的性能。
[0024]降低一個線程對另一同時執(zhí)行的線程的影響的一種方式是將單獨的資源分配給每一個線程(例如,使每一個線程具有單獨的RFC)。這意味著誤推測線程將只污染其自己的RFC。然而,當不是所有線程都是同等的活躍(例如,不活躍線程的RFC將是利用不足的,而在同一處理器核心中的活躍線程的RFC可能是滿的)時,這導(dǎo)致資源浪費。
[0025]降低一個線程對另一線程的影響的另一方法是限制線程寫入RFC的具體的方式(其中高速緩存是組相聯(lián)或完全相聯(lián)的高速緩存);然而這限制了可以實現(xiàn)的相關(guān)性并且不能應(yīng)用于直接映射的高速緩存。
[0026]在下面描述的實施例中,基于哪個線程的指令寫入物理寄存器來將物理寄存器(在RF中)分配給線程。在本文這可以被稱為智慧或智能寄存器分配。在本文描述的示例中,基于線程的索引(或ID或任何其他標識符)(即,其中線程O具有索引0,線程I具有索引1,線程m具有索引m,等)來分配物理寄存器;然而應(yīng)當認識到,等效的機制(例如,其以不同的方式來分配索引或以不同的方式來分配寄存器,同時仍然取決于哪個線程的指令正在寫寄存器)還可以用于將物理寄存器分配給線程。所述分配機制(其可以包括線程到組映射或映射標準)可以嚴格地強加或可以動態(tài)地(在運行時)放寬,用于在優(yōu)先基礎(chǔ)上操作,使得如果一個線程比同一處理器核心中的其它線程更活躍(例如,比其它線程發(fā)出更多的指令),則可以向活躍線程分配寄存器,所述寄存器否則將(即,如果分配機制是固定的)分配給另一較不活躍的線程。以這種方式使用靈活的分配機制,確?;钴S線程的執(zhí)行不被阻擋,而不管資源是否是可用的,并且同時提高了資源使用的效率(并且特別是RFC,其可以是直接映射的或是組相聯(lián)的)。
[0027]在處理器(或處理器核心)內(nèi)的物理寄存器可以被考慮為劃分(在邏輯上而不是在物理上)成組,不同的組用于不同的線程。線程和組之間的關(guān)系可以被稱為線程到組(線程-組)映射(例如,向線程A分配來自組A的寄存器,向線程B分配來自組B和C的寄存器等)。在一些示例中,寄存器的組的數(shù)量可以與在處理器核心內(nèi)的線程的數(shù)量相同。例如,可以存在兩個線程和兩