專利名稱:多線程計(jì)算機(jī)中用于環(huán)境切換數(shù)據(jù)預(yù)取的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)和計(jì)算機(jī)軟件,特別是多線程計(jì)算機(jī)系統(tǒng)中指令和數(shù)據(jù)的預(yù)取。
背景技術(shù):
隨著當(dāng)前社會(huì)中對計(jì)算機(jī)的不斷增長的信賴,計(jì)算機(jī)技術(shù)已經(jīng)不得不在很多前沿取得進(jìn)展以趕上增長的需要。并行性,即多個(gè)任務(wù)并行的性能是重大研發(fā)努力的一個(gè)特殊主題。
許多計(jì)算機(jī)軟件和硬件技術(shù)已經(jīng)開發(fā)出來以利于增加的并行處理。從軟件的觀點(diǎn),已經(jīng)開發(fā)出多線程操作系統(tǒng),它允許計(jì)算機(jī)程序在多個(gè)“線程”中并發(fā)執(zhí)行,使得多個(gè)任務(wù)本質(zhì)上能夠同時(shí)執(zhí)行。線程一般表示對程序的獨(dú)立的執(zhí)行路徑。例如,對于電子商務(wù)計(jì)算機(jī)應(yīng)用,不同的線程可能分配給不同的顧客,使得每個(gè)顧客的特定電子商務(wù)交易在單獨(dú)的線程中處理。
從硬件的觀點(diǎn),計(jì)算機(jī)越來越依賴多個(gè)微處理器以提供增大的工作負(fù)荷能力。進(jìn)而,已經(jīng)開發(fā)出一些微處理器,它們支持并行執(zhí)行多個(gè)線程的能力,有效地提供通過使用多個(gè)微處理器可達(dá)到的很多相同的性能增益。與只支持單一的執(zhí)行路徑的單線程微處理器相比,多線程微處理器支持多個(gè)執(zhí)行路徑,使得分配給不同的執(zhí)行路徑的不同的線程能夠并行進(jìn)行。
然而,不考慮下層的硬件支持的獨(dú)立的執(zhí)行路徑的數(shù)目,通常通過在每個(gè)執(zhí)行路徑上分配時(shí)間片給不同的線程,通常設(shè)計(jì)多線程計(jì)算機(jī)中的操作系統(tǒng)以在每個(gè)單獨(dú)的執(zhí)行路徑上執(zhí)行多個(gè)線程。雖然分配給給定的執(zhí)行路徑的線程技術(shù)上不是并行執(zhí)行的,但通過使每個(gè)線程能執(zhí)行一段時(shí)間和在每個(gè)線程間切換,每個(gè)線程能以合理和公平的方式進(jìn)行,因此保持并行的樣子。
雖然多線程在此性質(zhì)上能夠顯著地增強(qiáng)系統(tǒng)性能,但是,因?yàn)樵诮o定的執(zhí)行路徑上執(zhí)行不同線程間的切換,存在一些低效率。特別地,無論何時(shí)執(zhí)行路徑在執(zhí)行不同線程間切換,必須執(zhí)行稱為環(huán)境(context)切換的操作。通常,環(huán)境切換包括保存或要么保留以前正在執(zhí)行并且現(xiàn)在正在被切換出去的線程的工作狀態(tài),以及恢復(fù)準(zhǔn)備要執(zhí)行或切換進(jìn)來的線程的工作狀態(tài)。
線程的工作狀態(tài)包括從線程的觀點(diǎn)特征化特定的時(shí)間點(diǎn)的系統(tǒng)狀態(tài)的各種狀態(tài)信息,并且可包括其它之中的各種信息,如寄存器文件、程序計(jì)數(shù)器和其它專用寄存器的內(nèi)容。因此,通過線程被切換出去或掛起時(shí)保存工作狀態(tài),然后線程被切換進(jìn)來或恢復(fù)時(shí)恢復(fù)工作狀態(tài),線程功能上以與線程好像從未被中斷相同的方式執(zhí)行。
但是,一旦線程切換回來,在很多環(huán)境中執(zhí)行環(huán)境切換的一個(gè)不希望的副作用是高速緩存未中的發(fā)生增加。高速緩存是現(xiàn)代計(jì)算機(jī)架構(gòu)中已經(jīng)普遍利用的技術(shù),用來解決由微處理器的速度相對于微處理器用來訪問存儲的數(shù)據(jù)的存儲器設(shè)備的速度產(chǎn)生的延遲問題。
特別地,高速緩存企圖通過使用多級存儲器的代價(jià)來平衡存儲器的速度和容量。通常地,計(jì)算機(jī)依賴相對大、慢并且便宜的大規(guī)模的存儲系統(tǒng),如硬盤驅(qū)動(dòng)器或其它外部存儲設(shè)備、使用動(dòng)態(tài)隨機(jī)訪問存儲器件(DRAM’s)或其它易失性存儲器存儲器件的中間主存儲存儲器、以及一個(gè)或更多用靜態(tài)隨機(jī)訪問存儲器件(SRAM’s)等實(shí)現(xiàn)的高速的容量有限的高速緩沖存儲器或高速緩存。經(jīng)常使用多級高速緩沖存儲器,每級具有越來越快和越來越小的存儲器件。同樣地,依賴于使用的存儲器架構(gòu),高速緩沖存儲器可以由多個(gè)微處理器共享或?qū)S糜趩为?dú)微處理器,并且可以或者集成到同一塊集成電路上作為微處理器,或者在分離的集成電路上提供。
此外,一些高速緩沖存儲器可以用于存儲包含正在執(zhí)行的實(shí)際程序的指令以及正在由這些程序處理的數(shù)據(jù)。其它高速緩沖存儲器,通常是那些最靠近微處理器的,可以專門用于只存儲指令或數(shù)據(jù)。
當(dāng)計(jì)算機(jī)架構(gòu)中提供多級存儲器時(shí),通常依賴一個(gè)或多個(gè)存儲器控制器在各種存儲器級之間交換通常稱為“高速緩存行(cache line)”的來自存儲器地址段的需要的數(shù)據(jù),從而企圖最大化請求的數(shù)據(jù)存儲于微處理器可以訪問的最快的高速緩沖存儲器中的頻率。無論何時(shí)存儲器訪問請求企圖訪問未在高速緩沖存儲器中緩存的存儲器地址,發(fā)生“高速緩存未中(cache miss)”。作為高速緩存未中的結(jié)果,通常必須從相對慢的更低級的存儲器取得用于存儲器地址的高速緩存行,通常伴隨顯著的性能打擊(hit)。
高速緩存依賴時(shí)間和空間的位置以改善系統(tǒng)性能。采用另一種方式,當(dāng)取得特定的高速緩存行到高速緩沖存儲器中時(shí),很可能將再次需要來自那個(gè)高速緩存行的數(shù)據(jù),所以對同一高速緩存行中的數(shù)據(jù)的下一次訪問將導(dǎo)致“高速緩存命中(cache hit)”,并且因此不會(huì)招致性能障礙。
其它的加速與高速緩存有關(guān)的性能的方法包括如指令預(yù)取、分支預(yù)測和數(shù)據(jù)預(yù)取的技術(shù)。例如,指令預(yù)取通常在微處理器中實(shí)現(xiàn),并且企圖在需要指令之前從存儲器中取它們,使得當(dāng)真正需要指令時(shí),將充滿希望地緩存它們。通過企圖預(yù)測哪個(gè)判斷分支將可能采取,然后從預(yù)測的分支預(yù)取指令,同樣通常在微處理器中實(shí)現(xiàn)的分支預(yù)測擴(kuò)展了指令預(yù)取。通常在與微處理器分離的部件(但它仍然可以安置在同一集成電路器件上)中實(shí)現(xiàn)的數(shù)據(jù)預(yù)取,企圖檢測數(shù)據(jù)訪問的模式并基于任何檢測到的模式預(yù)取可能要需要的數(shù)據(jù)。
因此,從執(zhí)行線程的觀點(diǎn),當(dāng)特定的線程執(zhí)行時(shí),線程使用的越來越多的指令和數(shù)據(jù)將逐漸地變?yōu)榫彺娴模⑶乙虼司€程執(zhí)行得越久,線程的執(zhí)行將趨向于越有效。
但是,假定同樣的前提施加到多線程計(jì)算機(jī)中執(zhí)行的所有線程,不論何時(shí)線程因?yàn)榄h(huán)境切換被掛起,并且然后因?yàn)榱硪粋€(gè)環(huán)境切換隨后被恢復(fù),可能一些或所有掛起線程前高速緩存的指令和數(shù)據(jù)當(dāng)線程恢復(fù)時(shí)不再被高速緩存(主要因?yàn)橹虚g被執(zhí)行的其它線程需要的指令和數(shù)據(jù)的高速緩存)。然后通常發(fā)生更大數(shù)目的高速緩存未中,因此消極影響整個(gè)系統(tǒng)性能。依賴于歷史數(shù)據(jù)的預(yù)取和分支預(yù)測通常也為恢復(fù)的線程在其執(zhí)行的初始恢復(fù)時(shí)提供很少或不提供好處,因?yàn)橹噶詈蛿?shù)據(jù)的預(yù)取直到線程恢復(fù)其執(zhí)行后才能初始化。
因此,在多線程計(jì)算機(jī)中,本領(lǐng)域已經(jīng)產(chǎn)生對最小化與環(huán)境切換相聯(lián)系的不利性能影響的方法的明顯需求。
發(fā)明內(nèi)容
通過關(guān)于環(huán)境切換操作初始化恢復(fù)在線程的執(zhí)行之前可能被那個(gè)線程使用的數(shù)據(jù)的預(yù)取,本發(fā)明致力于解決這些和其它與先前技術(shù)相關(guān)聯(lián)的問題。采用另一種方式,一旦已知將對特定的線程執(zhí)行環(huán)境切換,符合本發(fā)明的實(shí)施例為那個(gè)線程初始化數(shù)據(jù)的預(yù)取,使得當(dāng)恢復(fù)線程的執(zhí)行時(shí),或者至少在正在取得到高速緩沖存儲器中的過程中,可能為線程緩存更多工作狀態(tài)。因此,在很多實(shí)例中,可以減小與環(huán)境切換相關(guān)聯(lián)的與高速緩存有關(guān)的性能障礙(penalty),并且因此可以增強(qiáng)整個(gè)系統(tǒng)性能。
特征化本發(fā)明的這些和其它優(yōu)點(diǎn)和特征在形成本發(fā)明進(jìn)一步的部分的權(quán)利要求中提出。但是,為更好地理解本發(fā)明和通過其使用得到的優(yōu)點(diǎn)和目的,應(yīng)該參考附圖和附隨描述內(nèi)容,其中描述了本發(fā)明的示范性的實(shí)施例。
圖1是包含符合本發(fā)明的環(huán)境切換預(yù)取的示范性裝置的方塊圖。
圖2是圖1的裝置中處理器通過高速緩存系統(tǒng)與主存儲器互連的方塊圖。
圖3是說明由圖1的裝置執(zhí)行的環(huán)境切換程序的程序流的流程圖。
圖4是說明圖3的環(huán)境切換程序的執(zhí)行期間發(fā)生的操作的序列的功能性時(shí)間線(timeline)。
圖5是說明對圖3中說明的環(huán)境切換程序的替換環(huán)境切換程序的程序流的流程圖。
圖6是說明圖5的環(huán)境切換程序的執(zhí)行期間發(fā)生的操作的序列的功能性時(shí)間線。
圖7是圖2中引用的數(shù)據(jù)預(yù)取器的示范性的實(shí)現(xiàn)的方塊圖。
圖8是圖2中引用的L1數(shù)據(jù)高速緩存的示范性的實(shí)現(xiàn)的方塊圖。
圖9是說明由圖1的裝置在環(huán)境切換期間執(zhí)行的示范性的初始化指令預(yù)取程序的程序流的流程圖。
圖10是說明由圖1的裝置在環(huán)境切換期間執(zhí)行的另一個(gè)示范性的初始化指令預(yù)取程序的程序流的流程圖。
圖11是說明由圖1的裝置在環(huán)境切換期間執(zhí)行的示范性的初始化數(shù)據(jù)預(yù)取程序的程序流的流程圖。
圖12是說明由圖1的裝置在環(huán)境切換期間執(zhí)行的另一個(gè)示范性的初始化數(shù)據(jù)預(yù)取程序的程序流的流程圖。
具體實(shí)施例方式
以下討論的各實(shí)施例利用環(huán)境切換預(yù)取以在線程的執(zhí)行恢復(fù)之前預(yù)取線程可能使用的數(shù)據(jù)。在這個(gè)環(huán)境中,可以認(rèn)為線程可能使用的數(shù)據(jù)包括由線程執(zhí)行的指令以及作為其執(zhí)行結(jié)果而由那些指令處理的數(shù)據(jù)。
如下面將會(huì)變得更明顯,環(huán)境切換預(yù)取可以用于關(guān)于到線程的環(huán)境切換,或者可替代地關(guān)于到另一個(gè)線程的環(huán)境切換(例如當(dāng)為之預(yù)取數(shù)據(jù)的線程將在下一次環(huán)境切換時(shí)恢復(fù)的時(shí)候)而為那個(gè)線程預(yù)取數(shù)據(jù)。此外,預(yù)取可以是基于軟件或硬件的,并且可以為指令、要由指令處理的數(shù)據(jù)或兩者執(zhí)行。同樣可以使用各種初始化預(yù)取的方法,包括發(fā)出接觸指令、對硬件預(yù)取器編程和/或?qū)懣刂茢?shù)據(jù)到緩沖器。
進(jìn)而,狀態(tài)信息的類型可以在不同的實(shí)施例中變化,可以關(guān)于保存線程的工作狀態(tài)存儲該狀態(tài)信息,并且隨后用于在環(huán)境切換期間初始化預(yù)取。例如,為預(yù)取指令可以使用如程序計(jì)數(shù)器的狀態(tài)信息、分支預(yù)測信息、硬件預(yù)取器狀態(tài)信息、和/或如標(biāo)記陣列數(shù)據(jù)的高速緩存狀態(tài)信息、最近使用(MRU)的數(shù)據(jù)和/或路線(way)預(yù)測數(shù)據(jù)(在其它之中)。同樣地,為預(yù)取由指令處理的數(shù)據(jù),可以使用如高速緩存歷史信息的狀態(tài)信息、硬件預(yù)取器狀態(tài)信息、關(guān)于數(shù)據(jù)預(yù)取使用的基地址和步幅(stride)、和/或如標(biāo)記陣列數(shù)據(jù)的高速緩存狀態(tài)信息、最近使用(MRU)的數(shù)據(jù)和/或路線預(yù)測數(shù)據(jù)(在其它之中)。進(jìn)而,環(huán)境切換期間什么時(shí)候正好初始化預(yù)取可在不同的實(shí)施例中變化,例如,恢復(fù)工作狀態(tài)前,恢復(fù)工作狀態(tài)時(shí),恢復(fù)工作狀態(tài)后,或者甚至在執(zhí)行另一個(gè)線程期間,該線程安排在為之要初始化預(yù)取的線程的恢復(fù)之前執(zhí)行。
可知在其它符合本發(fā)明的實(shí)施例中可以利用很多其它的修改和變化。因此本發(fā)明不限于以下揭示的各特定實(shí)施例。
現(xiàn)在轉(zhuǎn)向附圖,在所有的幾張圖中,同樣的數(shù)字表示同樣的部分,圖1說明包含了符合本發(fā)明的環(huán)境切換預(yù)取的計(jì)算機(jī)10。計(jì)算機(jī)10一般表示例如任何數(shù)量的多用戶計(jì)算機(jī),如網(wǎng)絡(luò)服務(wù)器、中型(midrange)計(jì)算機(jī)、大型主機(jī)(mainframe)計(jì)算機(jī)等。但是,應(yīng)該知道本發(fā)明可以在其它計(jì)算機(jī)和數(shù)據(jù)處理系統(tǒng)中實(shí)現(xiàn),例如在單用戶計(jì)算機(jī),如工作站、桌面計(jì)算機(jī)、便攜式計(jì)算機(jī)等中,或者在其它的可編程的電子設(shè)備(例如包含嵌入的控制器等),例如機(jī)頂盒、游戲機(jī)等。
計(jì)算機(jī)10一般包括一個(gè)或更多的系統(tǒng)處理器12,該處理器通過安置在高速緩存系統(tǒng)16內(nèi)的一級或更多級高速緩沖存儲器耦合到主存儲器14。進(jìn)而,主存儲器14通過系統(tǒng)輸入/輸出(I/O)系統(tǒng)18耦合到多種類型的外部設(shè)備,例如一個(gè)或更多的網(wǎng)絡(luò)20、一個(gè)或更多的工作站22和一個(gè)或更多的大規(guī)模存儲設(shè)備24。任何數(shù)目的替代計(jì)算機(jī)架構(gòu)可供選擇使用。
同樣顯示用于計(jì)算機(jī)10的典型軟件配置存在于主存儲器14中,包括能夠被一個(gè)或更多的應(yīng)用28訪問的操作系統(tǒng)26(它可以包括各種部件如內(nèi)核、設(shè)備驅(qū)動(dòng)器、實(shí)時(shí)庫等)。如下面將變得更明顯地,環(huán)境切換預(yù)取通常在整個(gè)或部分操作系統(tǒng)中實(shí)現(xiàn),并且特別是,在其線程管理和調(diào)度部件內(nèi)。此外,下面同樣將變得更明顯,環(huán)境切換預(yù)取可以用或不用專用的硬件部件和/或?qū)鹘y(tǒng)硬件部件的修正來實(shí)現(xiàn),并且特別是,純粹通過在傳統(tǒng)硬件平臺上執(zhí)行的軟件來實(shí)現(xiàn)。
一般地,為實(shí)現(xiàn)本發(fā)明的實(shí)施例而執(zhí)行的程序的軟件實(shí)現(xiàn)部分,不論實(shí)現(xiàn)為操作系統(tǒng)的部分還是特定的應(yīng)用、部件、程序、對象、模塊或指令的序列或甚至其子集,在這里將稱為“計(jì)算機(jī)程序代碼”或簡稱“程序代碼”。程序代碼通常包含一條或更多條指令,該指令在不同的時(shí)間存留于計(jì)算機(jī)中不同的存儲器和存儲設(shè)備中,當(dāng)由計(jì)算機(jī)中一個(gè)或更多個(gè)處理器讀取并執(zhí)行時(shí),使得那個(gè)計(jì)算機(jī)履行對執(zhí)行體現(xiàn)本發(fā)明的各個(gè)方面的步驟或單元必要的步驟。此外,雖然在功能全面的計(jì)算機(jī)和計(jì)算機(jī)系統(tǒng)環(huán)境下已經(jīng)和在下文中將描述本發(fā)明,但本領(lǐng)域技術(shù)人員會(huì)理解本發(fā)明的各種實(shí)施例能夠作為程序產(chǎn)品以各種形式分發(fā),并且不管實(shí)際用于執(zhí)行分發(fā)的計(jì)算機(jī)可讀信號承載媒體的特定類型,本發(fā)明同樣適用。計(jì)算機(jī)可讀信號承載媒體的例子包括但不限于其中的可記錄類型的媒體,如易失和非易失存儲器件、軟盤和其它可移動(dòng)盤、硬盤驅(qū)動(dòng)器、磁帶、光盤(例如CD-ROM、DVD等),和傳輸型媒體如數(shù)字和模擬通信鏈路。
另外,可以基于應(yīng)用識別以下描述的各種程序代碼,在該應(yīng)用內(nèi)它在本發(fā)明的特定的實(shí)施例中實(shí)現(xiàn)。但是,應(yīng)該知道使用下面的任何特定程序術(shù)語只是為了方便,并且因此本發(fā)明不應(yīng)該限定為僅僅在由這樣的術(shù)語識別和/或暗示的任何特定的應(yīng)用中使用。進(jìn)而,給定通常無數(shù)方式,其中計(jì)算機(jī)程序可組織成為例程、進(jìn)程、方法、模塊、對象等,以及程序功能可在存留在典型的計(jì)算機(jī)內(nèi)的各種軟件層間分配的各種方式(例如操作系統(tǒng)、庫、API、應(yīng)用、applet等),應(yīng)該知道本發(fā)明不限于這里描述的程序功能的特定組織和分配。
本領(lǐng)域技術(shù)人員將認(rèn)識到圖1中說明的典型環(huán)境并不打算限制本發(fā)明。實(shí)際上,本領(lǐng)域技術(shù)人員將認(rèn)識到可以使用其它替代硬件和/或軟件環(huán)境而不脫離本發(fā)明的范圍。
接下來圖2說明來自計(jì)算機(jī)10的處理器12之一與主存儲器14通過高速緩存系統(tǒng)16的互連。在說明的實(shí)現(xiàn)中,顯示高速緩存系統(tǒng)16包括3級高速緩沖存儲器,第一級(L1)包括獨(dú)立的指令和數(shù)據(jù)高速緩存30、32,配置第二和第三級(L2和L3)高速緩存34、36緩存指令和數(shù)據(jù)。如在本領(lǐng)域已知的,高速緩存30-36的每個(gè)可以集成到同一集成電路器件或芯片上作為處理器12,或者可以安排在一個(gè)或更多的外部芯片上。此外,高速緩存30-36的每個(gè)可以為處理器12專用,或者由處理器12和一個(gè)或更多另外的處理器共享。進(jìn)而,如上述,任何處理器12可以包括一個(gè)或更多提供單獨(dú)執(zhí)行路徑的核心,并且在一些實(shí)現(xiàn)中,一個(gè)或更多的高速緩存可以為單獨(dú)的內(nèi)核專用。
符合本發(fā)明,利用環(huán)境切換操作在線程的執(zhí)行恢復(fù)之前初始化那個(gè)線程可能使用的數(shù)據(jù)的預(yù)取。在這點(diǎn)上,數(shù)據(jù)的預(yù)取可以導(dǎo)致取得數(shù)據(jù)到高速緩存系統(tǒng)中任何或所有高速緩沖存儲器。
此外,可以完全在軟件中、完全在硬件中或使用硬件和軟件的結(jié)合執(zhí)行預(yù)取的初始化。在這點(diǎn)上,對于完全或部分依賴硬件的實(shí)現(xiàn),可以使用基于硬件的預(yù)取器,例如數(shù)據(jù)預(yù)取器38提供數(shù)據(jù)預(yù)取功能。另外,在一些實(shí)施例中,可希望另外包括基于硬件的指令的預(yù)取,例如使用指令預(yù)取器40。在一些實(shí)施例中,可以結(jié)合預(yù)取器38和40的功能。在其它的實(shí)現(xiàn)中,可以配置高速緩存控制器被直接控制,以在環(huán)境切換期間如所要求的而預(yù)取指令和/或數(shù)據(jù)。
基于硬件的預(yù)取器通常包括功能提供命令給高速緩存系統(tǒng)16中的高速緩存控制器和/或主存儲器14,以初始化特定的高速緩存行中的數(shù)據(jù)的取得。如下將變得更明顯地,很多傳統(tǒng)的數(shù)據(jù)預(yù)取器企圖檢測數(shù)據(jù)訪問中的模式,并根據(jù)這樣檢測到的模式預(yù)取數(shù)據(jù)。另一方面,指令預(yù)取器通常直接包含進(jìn)處理器,并且通?;谥噶盍黝A(yù)取,這常常通過預(yù)取隨后的高速緩存行到被指向的那個(gè)作為程序計(jì)數(shù)器,并可選擇地使用分支預(yù)測以從一個(gè)或更多判決路徑預(yù)取指令。
為控制基于硬件的預(yù)取器以響應(yīng)環(huán)境切換,可以使用許多不同的配置。例如,預(yù)取器可以被處理器直接可讀和可寫以實(shí)現(xiàn)基于軟件的控制。在其它實(shí)施例中,緩沖器,例如緩沖器42、44之一,可以用于存儲由預(yù)取器讀出的預(yù)取控制數(shù)據(jù)以預(yù)取數(shù)據(jù),該緩沖器本質(zhì)上可以是邏輯的或物理的。例如,在一些實(shí)施例中,軟件可以寫預(yù)取控制數(shù)據(jù)到這樣的緩沖器,并且可以配置預(yù)取器讀出預(yù)取控制數(shù)據(jù)以響應(yīng)環(huán)境切換的檢測。另外,在一些實(shí)施例中,可以使用寫緩沖器以由硬件預(yù)取器觸發(fā)預(yù)取。
在軟件中完全實(shí)現(xiàn)預(yù)取的初始化的情形,例如,通過專用指令如接觸指令(如PowerPC ISA中的dcbt)的使用,或者通過裝載或存儲指令到適當(dāng)?shù)拇鎯ζ鞯刂返膱?zhí)行(如果存儲器地址未被緩存,就由高速緩存系統(tǒng)處理它們),可以實(shí)現(xiàn)這樣的初始化。
現(xiàn)在轉(zhuǎn)向圖3,說明環(huán)境切換程序50的代表性的實(shí)現(xiàn)。程序50可以由例如多線程操作系統(tǒng)的調(diào)度邏輯執(zhí)行。程序50同樣可以由其它操作系統(tǒng)部件和/或在運(yùn)行時(shí)庫內(nèi)執(zhí)行,并且可以由許多不同的事件觸發(fā)。例如,環(huán)境切換可以由硬件或軟件定時(shí)器的超時(shí)觸發(fā),例如一旦分配給線程的時(shí)間片已經(jīng)到期。環(huán)境切換同樣可由線程主動(dòng)釋放或掛起觸發(fā),例如如果線程在等待盤訪問。環(huán)境切換同樣可以由搶先行為如較高優(yōu)先級的線程或中斷觸發(fā)。
程序50開始于塊52,保存正在執(zhí)行的當(dāng)前線程的工作狀態(tài),包括在指示線程的執(zhí)行恢復(fù)前應(yīng)該預(yù)取什么數(shù)據(jù)和/或指令時(shí)需要的任何預(yù)取控制數(shù)據(jù)。接下來,塊54決定應(yīng)該執(zhí)行哪個(gè)線程,例如使用許多已知的線程調(diào)度算法,例如round-robin算法。然后塊56為下一個(gè)線程取得存儲的預(yù)取控制數(shù)據(jù),并且使用這里討論的任何變化,塊58為下一個(gè)線程初始化數(shù)據(jù)和/或指令預(yù)取。然后塊60以本領(lǐng)域已知的通常方式恢復(fù)下一個(gè)線程的工作狀態(tài)。然后在塊62恢復(fù)下一個(gè)線程的執(zhí)行,并且程序50完成。
如圖4中所示,它說明在從線程T1到線程T2的環(huán)境切換期間按時(shí)間順序排列的進(jìn)展,恢復(fù)線程T2的工作狀態(tài)之前預(yù)取的初始化使數(shù)據(jù)和/或指令能夠與線程T2的工作狀態(tài)的恢復(fù)并行發(fā)生。同樣地,當(dāng)線程T2恢復(fù)執(zhí)行時(shí),線程使用的一些或所有數(shù)據(jù)和/或指令將被緩存,或者至少處于正在被緩存的過程中。
同樣地,圖4的環(huán)境切換期間預(yù)取的初始化發(fā)生在恢復(fù)線程T2的執(zhí)行之前,以及在為線程T2恢復(fù)工作狀態(tài)之前。但是,將會(huì)知道預(yù)取的初始化可能在其它的序列中發(fā)生。例如,預(yù)取的初始化可能在工作狀態(tài)的恢復(fù)同時(shí)或者期間、或者甚至在保存正在掛起的線程的工作狀態(tài)之前發(fā)生。另外,如由圖5的例程50′說明的,為線程的預(yù)取的初始化甚至可能在環(huán)境切換到那個(gè)線程之前發(fā)生。
特別地,例程50′說明環(huán)境切換例程的實(shí)現(xiàn),其中為線程的預(yù)取的初始化發(fā)生在到為在那個(gè)線程之前執(zhí)行而調(diào)度的另一個(gè)線程的環(huán)境切換期間,例如,緊接其之前。例程50′在塊64開始,存儲當(dāng)前線程的狀態(tài)。接下來,塊66決定下下個(gè)要執(zhí)行的線程,即這個(gè)環(huán)境切換所屬的線程已經(jīng)恢復(fù)執(zhí)行之后將被執(zhí)行的線程。然后塊68為下下個(gè)線程取得預(yù)取控制數(shù)據(jù)。其后,塊70為下下個(gè)線程初始化數(shù)據(jù)和/或指令的預(yù)取,并且塊72和74分別恢復(fù)下一個(gè)線程的狀態(tài)并初始化線程的執(zhí)行。
如可以代替塊70被執(zhí)行的塊70′所表示的,可希望在例程50′期間的其它點(diǎn),例如恢復(fù)下一個(gè)線程的狀態(tài)之后初始化預(yù)取。另外,在其它的實(shí)施例中,初始化預(yù)取可能發(fā)生在環(huán)境切換中的任何點(diǎn),并且甚至可以發(fā)生在下一個(gè)線程的執(zhí)行期間,但是在隨后的到下下個(gè)線程的環(huán)境切換之前。
因此,如圖6中所說明的,說明從線程T1到線程T2的環(huán)境切換的按時(shí)間順序排列的進(jìn)展。在這個(gè)環(huán)境切換中,決定下下個(gè)線程(這里指明為線程T3),并且在環(huán)境切換期間預(yù)取數(shù)據(jù)和/或指令。假如線程T2的執(zhí)行和到線程T3的環(huán)境切換仍然必須發(fā)生在為線程T3預(yù)取的數(shù)據(jù)和/或指令的使用之前,將會(huì)知道例程50′一般提供額外的時(shí)間以確保恢復(fù)掛起的線程的執(zhí)行時(shí)將緩存更多的必需的數(shù)據(jù)和/或指令。
同樣將會(huì)知道,在本發(fā)明的環(huán)境中,恢復(fù)線程的執(zhí)行前預(yù)取的初始化不一定導(dǎo)致在恢復(fù)線程的執(zhí)行時(shí)取數(shù)據(jù)和/或指令的過程完成,或者甚至在恢復(fù)執(zhí)行時(shí)將初始化活動(dòng)的數(shù)據(jù)傳遞。只要在這樣的恢復(fù)之前初始化預(yù)取的過程并且通常當(dāng)線程被掛起時(shí),可以預(yù)見,相對取得線程的執(zhí)行期間需要的數(shù)據(jù)/指令,與取得需要的數(shù)據(jù)和/或指令相聯(lián)系的反應(yīng)時(shí)間將會(huì)改善。
如上所述,狀態(tài)信息的類型在不同的實(shí)施例中可以變化,該狀態(tài)信息可以作為線程的工作狀態(tài)的部分存儲,并且可以用于產(chǎn)生預(yù)取的初始化中使用的預(yù)取控制數(shù)據(jù)。例如,為預(yù)取指令,可以使用狀態(tài)信息如程序計(jì)數(shù)器、分支預(yù)測信息、硬件預(yù)取器狀態(tài)信息、和/或高速緩存狀態(tài)信息如標(biāo)記陣列數(shù)據(jù)、最近使用(MRU)的數(shù)據(jù)和/或路線預(yù)測數(shù)據(jù)(除了別的以外)。同樣地,為預(yù)取由指令處理的數(shù)據(jù),可以使用狀態(tài)信息如高速緩存歷史信息、硬件預(yù)取器狀態(tài)信息、有關(guān)數(shù)據(jù)預(yù)取使用的基地址和步幅、和/或高速緩存狀態(tài)信息如標(biāo)記陣列數(shù)據(jù)、最近使用(MRU)的數(shù)據(jù)和/或路線預(yù)測數(shù)據(jù)(除了別的以外)。
例如,一個(gè)示范性的基于硬件的預(yù)取器38的實(shí)現(xiàn)包括具有調(diào)度程序塊82的預(yù)取引擎80,該調(diào)度程序塊82與更新步幅表86中的表項(xiàng)88的增加/減少控制塊84接口。特別地,每個(gè)表項(xiàng)88包括基地址值和步幅值,基地址值表示當(dāng)前要取的地址,步幅值表示從基地址增加或減去的數(shù)量以產(chǎn)生下一個(gè)要取的地址。
預(yù)取器38一般通過企圖識別存儲器地址中的訪問模式并預(yù)測基于那些模式將可能需要哪些數(shù)據(jù)來工作。更具體地,一旦確定基地址和步幅值,通過來自調(diào)度程序82的命令取基地址到高速緩存系統(tǒng),并且由增加/減少控制塊84將基地址與步幅值相加,新的基地址值被寫回到表中。另外,調(diào)度程序82在多個(gè)表項(xiàng)間仲裁,并且基于高速緩存系統(tǒng)提供的高速緩存工作負(fù)荷信息抑制發(fā)出高速緩存取請求。
表項(xiàng)88中的每個(gè)與特定的線程可能或可能不相關(guān)聯(lián)。通常由分析歷史表90確定存儲在表項(xiàng)中的初始值,該歷史表90具有表項(xiàng)92用于上次訪問的N個(gè)高速緩存行(或者可替代地上次訪問的N個(gè)地址)。流分配控制器94執(zhí)行這樣的分析并且在步幅表86中存儲適當(dāng)?shù)闹涤糜跀?shù)據(jù)訪問模式中檢測到的規(guī)則的步幅。
在說明的實(shí)施例中,關(guān)于環(huán)境切換預(yù)取,可希望存儲來自步幅表86、歷史表90或兩者的狀態(tài)信息。在這點(diǎn)上,可希望提供讀/寫控制塊96從而為處理器對預(yù)取器的訪問提供保存/恢復(fù)端口。另外,為線程初始化預(yù)取的預(yù)取控制數(shù)據(jù)可以使用保存/恢復(fù)端口更新預(yù)取器的狀態(tài),例如通過恢復(fù)表86、90任一個(gè)或兩者中特定表項(xiàng)的狀態(tài)。例如,在只有某些表項(xiàng)與特定的線程相關(guān)聯(lián)的地方,可能希望只保存和恢復(fù)那些對特定的線程有關(guān)的表項(xiàng)。
另外,可能希望提供修改任一個(gè)表中的表項(xiàng)的能力。例如,在基于步幅的預(yù)取的情況下,可能希望重做一個(gè)或更多的先前的取操作。在這樣的實(shí)例中,例如,在步幅值中存儲基地址之前,可能希望從作為環(huán)境切換的結(jié)果存儲的當(dāng)前基地址減去一個(gè)或多個(gè)步幅值。在很多實(shí)例中,這導(dǎo)致重復(fù)一個(gè)或更多的在線程的掛起之前被執(zhí)行的先前的取操作。在其它實(shí)施例中,可能希望簡單地利用歷史表識別應(yīng)該為特定的線程預(yù)取的高速緩存行。同樣將會(huì)知道,本發(fā)明可以和其它類型的硬件預(yù)取器一起使用,例如那些企圖預(yù)取鏈接的表、不規(guī)則的步幅的硬件預(yù)取器等。
作為另一個(gè)關(guān)于基于環(huán)境的預(yù)取可保存和/或恢復(fù)的狀態(tài)信息的例子,圖8更詳細(xì)地說明數(shù)據(jù)高速緩存32的一個(gè)實(shí)現(xiàn)。在這個(gè)實(shí)現(xiàn)中,數(shù)據(jù)高速緩存32是直接映射(非連帶(non-associative))的高速緩存。通過地址100訪問高速緩存,該地址100劃分為標(biāo)記、索引和偏置域102、104、106。索引104用于在表項(xiàng)112、114中分別為存儲標(biāo)記的標(biāo)記陣列108和存儲高速緩存行的數(shù)據(jù)陣列110做索引。判決塊116比較標(biāo)記陣列110中的表項(xiàng)112存儲的標(biāo)記和提供的地址的標(biāo)記域102。發(fā)現(xiàn)匹配時(shí)(指示高速緩存命中),通過塊118提供索引104給數(shù)據(jù)陣列110,產(chǎn)生存儲在索引的表項(xiàng)114的高速緩存行的輸出。未發(fā)現(xiàn)匹配時(shí)(指示高速緩存未中),塊116傳遞地址給下一級高速緩存,請求從那個(gè)高速緩存取得對于請求的地址的高速緩存行。
從環(huán)境切換預(yù)取的觀點(diǎn),可能希望取得標(biāo)記陣列108的內(nèi)容并且例如通過讀/寫控制塊120為線程存儲這樣的內(nèi)容作為狀態(tài)信息的一部分。其后,標(biāo)記數(shù)據(jù)可以用于請求如先前被緩存的而由標(biāo)記陣列識別的高速緩存行(將會(huì)知道當(dāng)希望為標(biāo)記陣列表項(xiàng)產(chǎn)生高速緩存行的時(shí)候,用于特定的標(biāo)記陣列表項(xiàng)的索引可以從它在陣列中的位置得到)。此外,當(dāng)高速緩存32實(shí)現(xiàn)為直接映射的高速緩存時(shí),在其它連帶的實(shí)施例中,或者多路高速緩存可以被使用。在這樣的實(shí)例中,可能同樣希望存儲其它高速緩存狀態(tài)數(shù)據(jù),如MRU數(shù)據(jù)和/或路線預(yù)測數(shù)據(jù)。
同樣將會(huì)知道數(shù)據(jù)和/或指令訪問模式的分析可以純粹在軟件中發(fā)生,例如通過分析指令數(shù)據(jù)流。因此本發(fā)明不限于這里討論的特定的硬件實(shí)現(xiàn)。
現(xiàn)在轉(zhuǎn)向圖9-12,顯示了符合本發(fā)明的預(yù)取初始化的四個(gè)特定實(shí)現(xiàn)。將會(huì)知道在任何給定的環(huán)境切換中可以執(zhí)行多個(gè)這樣的例程。
圖9說明了實(shí)現(xiàn)基于軟件的指令預(yù)取的初始化指令預(yù)取例程130。例程130在塊132由取得存儲于用于線程的狀態(tài)信息中的程序計(jì)數(shù)器(PC)開始。然后塊134向由PC指向的高速緩存行發(fā)出接觸指令或任何其它適當(dāng)?shù)拇鎯ζ髟L問指令。其后,塊136可選地為其它高速緩存行初始化預(yù)取。例如,可能希望為跟隨由PC識別的那個(gè)高速緩存行的下N個(gè)高速緩存行初始化預(yù)取??赡芡瑯酉M谄渌鼘?shí)施例中預(yù)取其它的執(zhí)行路徑,例如使用如分支目標(biāo)地址高速緩存(BTAC)中的包含在狀態(tài)信息中的分支預(yù)測數(shù)據(jù)。
圖10說明了實(shí)現(xiàn)基于硬件的指令預(yù)取的替代的初始化指令預(yù)取例程140。例程140在塊142由取得存儲于用于線程的狀態(tài)信息中的PC開始。然后塊142指示硬件指令預(yù)取器預(yù)取一個(gè)或更多從那個(gè)由PC確定的高速緩存行開始的高速緩存行。如上,這樣的預(yù)取可能簡單地預(yù)取鄰近的高速緩存行并且/或者基于分支預(yù)測技術(shù)預(yù)取其它高速緩存行。
圖11說明了實(shí)現(xiàn)基于步幅的數(shù)據(jù)預(yù)取的初始化數(shù)據(jù)預(yù)取例程150。例程150在塊152由從狀態(tài)信息取得基地址和步幅值開始。然后塊154通過從基地址減去一個(gè)或更多個(gè)步幅值可選地修改基地址,有效地重做先前的數(shù)據(jù)訪問。然后塊156寫(可能被修改的)基地址和步幅值到硬件數(shù)據(jù)預(yù)取器中。作為這樣的更新的結(jié)果,硬件數(shù)據(jù)預(yù)取器然后將在基地址開始著手預(yù)取。
圖12說明了執(zhí)行基于高速緩存行或記錄的預(yù)取的替代的初始化數(shù)據(jù)預(yù)取例程160。例程160在塊162由從用于線程的狀態(tài)信息取得高速緩存歷史開始,例如使用從標(biāo)記陣列和/或歷史表取得的數(shù)據(jù)。塊164然后發(fā)出接觸指令或其它適當(dāng)?shù)拇鎯ζ髟L問指令用于最后N個(gè)高速緩存行,因此有效地重復(fù)先前的線程的執(zhí)行期間發(fā)生的數(shù)據(jù)訪問活動(dòng)。
可以對說明的實(shí)施例進(jìn)行各種額外的修改而不背離本發(fā)明的精神和范圍。因此,本發(fā)明在于所附的權(quán)利要求。
權(quán)利要求
1.一種多線程計(jì)算機(jī)中執(zhí)行環(huán)境切換操作的方法,該方法包含恢復(fù)線程的執(zhí)行前初始化可能被線程使用的數(shù)據(jù)的預(yù)取。
2.根據(jù)權(quán)利要求1所述的方法,其中初始化可能被線程使用的數(shù)據(jù)的預(yù)取包括初始化可能由線程執(zhí)行的至少一個(gè)指令的預(yù)取。
3.根據(jù)權(quán)利要求1所述的方法,其中初始化可能被線程使用的數(shù)據(jù)的預(yù)取包括初始化可能被至少一個(gè)由線程執(zhí)行的指令處理的數(shù)據(jù)的預(yù)取。
4.根據(jù)權(quán)利要求1所述的方法,還包含為線程恢復(fù)工作狀態(tài);并且為其恢復(fù)工作狀態(tài)時(shí)恢復(fù)線程的執(zhí)行。
5.根據(jù)權(quán)利要求4所述的方法,其中當(dāng)為線程恢復(fù)工作狀態(tài)時(shí)執(zhí)行初始化預(yù)取。
6.根據(jù)權(quán)利要求4所述的方法,其中為線程恢復(fù)工作狀態(tài)之前執(zhí)行初始化預(yù)取。
7.根據(jù)權(quán)利要求1所述的方法,其中環(huán)境切換操作包括環(huán)境切換到為在到該線程的環(huán)境切換之前執(zhí)行而調(diào)度的另一個(gè)線程。
8.根據(jù)權(quán)利要求7所述的方法,其中在為其它線程恢復(fù)工作狀態(tài)和恢復(fù)該其它線程的執(zhí)行的至少之一期間,執(zhí)行初始化預(yù)取。
9.根據(jù)權(quán)利要求7所述的方法,其中執(zhí)行初始化預(yù)取以響應(yīng)為在其它線程的執(zhí)行后立即執(zhí)行而正在調(diào)度的線程。
10.根據(jù)權(quán)利要求1所述的方法,其中初始化預(yù)取還包括從線程取得前面的環(huán)境切換期間存儲的狀態(tài)信息。
11.根據(jù)權(quán)利要求10所述的方法,其中狀態(tài)信息包括硬件預(yù)取器狀態(tài)信息,并且其中初始化預(yù)取還包括使用硬件預(yù)取器狀態(tài)信息初始化硬件預(yù)取器。
12.根據(jù)權(quán)利要求11所述的方法,其中硬件預(yù)取器狀態(tài)信息包括基地址值。
13.根據(jù)權(quán)利要求12所述的方法,其中硬件預(yù)取器狀態(tài)信息還包括步幅值。
14.根據(jù)權(quán)利要求13所述的方法,其中初始化硬件預(yù)取器包括初始化硬件預(yù)取器以在基地址開始預(yù)取。
15.根據(jù)權(quán)利要求13所述的方法,其中初始化硬件預(yù)取器包括初始化硬件預(yù)取器以通過從基地址減去至少一個(gè)步幅值和多個(gè)步幅值而計(jì)算的地址開始預(yù)取。
16.根據(jù)權(quán)利要求11所述的方法,其中初始化硬件預(yù)取器包括初始化硬件預(yù)取器以重復(fù)在從該線程的前面的環(huán)境切換之前執(zhí)行的至少一個(gè)預(yù)取操作。
17.根據(jù)權(quán)利要求10所述的方法,其中,狀態(tài)信息識別從該線程的前面的環(huán)境切換之前訪問的至少一個(gè)高速緩存行,并且其中初始化預(yù)取還包括初始化由狀態(tài)信息識別的高速緩存行的預(yù)取。
18.根據(jù)權(quán)利要求17所述的方法,初始化由狀態(tài)信息識別的高速緩存行的預(yù)取包括執(zhí)行對高速緩存行中的地址的接觸指令。
19.根據(jù)權(quán)利要求10所述的方法,還包含關(guān)于在從該線程的環(huán)境切換期間為該線程存儲工作狀態(tài),存儲狀態(tài)信息。
20.根據(jù)權(quán)利要求10所述的方法,其中狀態(tài)信息包括高速緩存狀態(tài)信息。
21.根據(jù)權(quán)利要求20所述的方法,其中高速緩存狀態(tài)信息包括標(biāo)記陣列信息、最近使用的信息和路線預(yù)測信息的至少之一。
22.根據(jù)權(quán)利要求1所述的方法,其中初始化預(yù)取包括指示硬件預(yù)取器預(yù)取數(shù)據(jù)。
23.根據(jù)權(quán)利要求22所述的方法,其中指示由計(jì)算機(jī)中的操作系統(tǒng)執(zhí)行硬件預(yù)取器。
24.根據(jù)權(quán)利要求1所述的方法,其中初始化預(yù)取包括執(zhí)行接觸指令。
25.根據(jù)權(quán)利要求24所述的方法,其中執(zhí)行接觸指令由計(jì)算機(jī)中的操作系統(tǒng)執(zhí)行。
26.根據(jù)權(quán)利要求1所述的方法,其中初始化預(yù)取包括在緩沖器中為線程存儲預(yù)取控制數(shù)據(jù),該方法還包含從緩沖器取得預(yù)取控制數(shù)據(jù)并且執(zhí)行基于預(yù)取控制數(shù)據(jù)的預(yù)取操作。
27.根據(jù)權(quán)利要求1所述的方法,還包含取得數(shù)據(jù)到高速緩沖存儲器中以響應(yīng)初始化預(yù)取。
28.一種多線程計(jì)算機(jī)中預(yù)取數(shù)據(jù)的方法,該方法包括關(guān)聯(lián)于從第一個(gè)線程到第二個(gè)線程的環(huán)境切換,為第一個(gè)線程存儲狀態(tài)信息;從存儲的狀態(tài)信息確定第一個(gè)線程的下次執(zhí)行期間第一個(gè)線程可能使用的數(shù)據(jù);以及在第一個(gè)線程的下次執(zhí)行之前初始化第一個(gè)線程可能使用的被確定的數(shù)據(jù)的預(yù)取。
29.根據(jù)權(quán)利要求28所述的方法,其中初始化線程可能使用的被確定的數(shù)據(jù)的預(yù)取包括初始化可能由該線程執(zhí)行的至少一個(gè)指令的預(yù)取。
30.根據(jù)權(quán)利要求28所述的方法,其中初始化線程可能使用的被確定的數(shù)據(jù)的預(yù)取包括初始化可能由至少一個(gè)被線程執(zhí)行的指令處理的數(shù)據(jù)的預(yù)取。
31.根據(jù)權(quán)利要求28所述的方法,其中在環(huán)境切換到第一個(gè)線程期間初始化預(yù)取發(fā)生。
32.根據(jù)權(quán)利要求28所述的方法,其中在環(huán)境切換到另一個(gè)線程期間初始化預(yù)取發(fā)生。
33.根據(jù)權(quán)利要求32所述的方法,其中初始化預(yù)取發(fā)生在到第三個(gè)線程的環(huán)境切換期間,第三線程是為第一個(gè)線程的下次執(zhí)行前立即執(zhí)行而調(diào)度的。
34.根據(jù)權(quán)利要求28所述的方法,其中初始化預(yù)取發(fā)生在第一個(gè)線程的掛起期間。
35.一種裝置,包含至少一個(gè)處理器,配置以執(zhí)行多個(gè)線程;以及程序代碼,配置以通過恢復(fù)線程的執(zhí)行前初始化可能被多個(gè)線程中的線程使用的數(shù)據(jù)的預(yù)取,從而執(zhí)行環(huán)境切換操作。
36.根據(jù)權(quán)利要求35所述的裝置,其中,配置程序代碼,以通過初始化至少一個(gè)可能由線程執(zhí)行的指令的預(yù)取,初始化可能被線程使用的數(shù)據(jù)的預(yù)取。
37.根據(jù)權(quán)利要求35所述的裝置,其中,配置程序代碼,以通過初始化可能被至少一個(gè)由線程執(zhí)行的指令處理的數(shù)據(jù)的預(yù)取,初始化可能被線程使用的數(shù)據(jù)的預(yù)取。
38.根據(jù)權(quán)利要求35所述的裝置,其中,進(jìn)一步配置程序代碼為線程恢復(fù)工作狀態(tài)并且在為其恢復(fù)工作狀態(tài)時(shí)執(zhí)行線程。
39.根據(jù)權(quán)利要求38所述的裝置,其中,當(dāng)為線程恢復(fù)工作狀態(tài)時(shí)配置程序代碼以初始化預(yù)取。
40.根據(jù)權(quán)利要求38所述的裝置,其中,配置程序代碼以在為線程恢復(fù)工作狀態(tài)之前初始化預(yù)取。
41.根據(jù)權(quán)利要求35所述的裝置,其中,配置程序代碼以通過環(huán)境切換到為在到該線程的環(huán)境切換之前的執(zhí)行而調(diào)度的另一個(gè)線程,來執(zhí)行環(huán)境切換操作。
42.根據(jù)權(quán)利要求41所述的裝置,其中,配置程序代碼以在為其它線程恢復(fù)工作狀態(tài)和恢復(fù)其它線程的執(zhí)行的至少之一期間初始化預(yù)取。
43.根據(jù)權(quán)利要求41所述的裝置,其中,配置程序代碼初始化預(yù)取以響應(yīng)為在其它線程的執(zhí)行之后立即執(zhí)行而正在調(diào)度的線程。
44.根據(jù)權(quán)利要求35所述的裝置,其中,配置程序代碼以進(jìn)一步通過取得在從線程的前面的環(huán)境切換期間存儲的狀態(tài)信息來初始化預(yù)取。
45.根據(jù)權(quán)利要求44所述的裝置,還包含硬件預(yù)取器,其中,狀態(tài)信息包含硬件預(yù)取器狀態(tài)信息,并且其中,配置程序代碼以通過使用硬件預(yù)取器狀態(tài)信息初始化硬件預(yù)取器來初始化預(yù)取。
46.根據(jù)權(quán)利要求45所述的裝置,其中硬件預(yù)取器狀態(tài)信息包括基地址值。
47.根據(jù)權(quán)利要求46所述的裝置,其中硬件預(yù)取器狀態(tài)信息還包括步幅值。
48.根據(jù)權(quán)利要求47所述的裝置,其中,配置程序代碼以通過初始化硬件預(yù)取器以在基地址開始預(yù)取,來初始化硬件預(yù)取器。
49.根據(jù)權(quán)利要求47所述的裝置,其中,配置程序代碼以通過初始化硬件預(yù)取器以在從基地址減去至少一個(gè)步幅值和多個(gè)步幅值計(jì)算的地址開始預(yù)取,來初始化硬件預(yù)取器。
50.根據(jù)權(quán)利要求45所述的裝置,其中,配置程序代碼以通過初始化硬件預(yù)取器以重復(fù)從線程的前面的環(huán)境切換之前執(zhí)行的至少一個(gè)預(yù)取操作,來初始化硬件預(yù)取器。
51.根據(jù)權(quán)利要求44所述的裝置,其中狀態(tài)信息識別從線程的前面的環(huán)境切換之前訪問的至少一個(gè)高速緩存行,并且其中配置程序代碼以通過初始化由狀態(tài)信息識別的高速緩存行的預(yù)取,來初始化預(yù)取。
52.根據(jù)權(quán)利要求44所述的裝置,其中,進(jìn)一步配置程序代碼以關(guān)于在從線程的環(huán)境切換期間為線程存儲工作狀態(tài),存儲狀態(tài)信息。
53.根據(jù)權(quán)利要求44所述的裝置,其中狀態(tài)信息包括高速緩存狀態(tài)信息,它包括標(biāo)記陣列信息、最近使用的信息和路線預(yù)測信息的至少之一。
54.根據(jù)權(quán)利要求35所述的裝置,還包含硬件預(yù)取器,其中通過指示硬件預(yù)取器預(yù)取數(shù)據(jù),配置程序代碼以初始化預(yù)取。
55.根據(jù)權(quán)利要求35所述的裝置,其中配置程序代碼以通過執(zhí)行接觸指令初始化預(yù)取。
56.根據(jù)權(quán)利要求35所述的裝置,其中配置程序代碼為在緩沖器中的線程存儲預(yù)取控制數(shù)據(jù),并且其中在執(zhí)行預(yù)取操作中使用預(yù)取控制數(shù)據(jù)。
57.根據(jù)權(quán)利要求35所述的裝置,還包含高速緩沖存儲器,其中進(jìn)一步配置程序代碼以取得數(shù)據(jù)到高速緩沖存儲器中以響應(yīng)初始化預(yù)取。
58.一種裝置,包含至少一個(gè)高速緩沖存儲器;和電路布置,配置以執(zhí)行多個(gè)線程,并且通過恢復(fù)線程的執(zhí)行之前初始化可能被多個(gè)線程中的線程使用的數(shù)據(jù)的預(yù)取到高速緩沖存儲器中,來執(zhí)行環(huán)境切換操作。
59.根據(jù)權(quán)利要求58所述的裝置,其中可能被線程使用的數(shù)據(jù)包括至少一個(gè)可能由線程執(zhí)行的指令。
60.根據(jù)權(quán)利要求58所述的裝置,其中可能被線程使用的數(shù)據(jù)包括可能被至少一個(gè)由線程執(zhí)行的指令處理的數(shù)據(jù)。
61.根據(jù)權(quán)利要求58所述的裝置,其中電路布置包含至少一個(gè)處理器。
62.根據(jù)權(quán)利要求61所述的裝置,其中電路布置還包含由至少一個(gè)處理器執(zhí)行的操作系統(tǒng)程序代碼。
63.根據(jù)權(quán)利要求58所述的裝置,還包含耦合到高速緩沖存儲器的硬件預(yù)取器,并且其中配置電路布置以通過控制硬件預(yù)取器初始化數(shù)據(jù)的預(yù)取。
64.根據(jù)權(quán)利要求63所述的裝置,其中,進(jìn)一步配置電路布置代碼,以關(guān)于從線程的環(huán)境切換,從硬件預(yù)取器取得狀態(tài)信息,并且其中配置電路布置從而使用取得的狀態(tài)信息初始化預(yù)取。
65.根據(jù)權(quán)利要求63所述的裝置,還包含耦合到硬件預(yù)取器的緩沖器,其中配置電路布置,以通過在緩沖器中存儲數(shù)據(jù)來初始化預(yù)取,并且其中配置硬件預(yù)取器初始化預(yù)取操作以響應(yīng)存儲在緩沖器中的數(shù)據(jù)。
66.一種程序產(chǎn)品,包含程序代碼,配置以通過恢復(fù)線程的執(zhí)行前初始化可能被線程使用的數(shù)據(jù)的預(yù)取,執(zhí)行到多線程計(jì)算機(jī)中的多個(gè)線程中的線程的環(huán)境切換;以及計(jì)算機(jī)可讀信號承載媒體,用于承載程序代碼。
67.根據(jù)權(quán)利要求66所述的程序產(chǎn)品,其中計(jì)算機(jī)可讀信號承載媒體包括傳輸媒體和可記錄媒體的至少之一。
全文摘要
一種關(guān)于環(huán)境切換操作的裝置、程序產(chǎn)品和方法,初始化數(shù)據(jù)的預(yù)取,該數(shù)據(jù)在線程的執(zhí)行恢復(fù)之前可能被那個(gè)線程使用。因此,一旦已知將執(zhí)行環(huán)境切換到特定的線程,可以為那個(gè)線程預(yù)取數(shù)據(jù),使得當(dāng)恢復(fù)線程的執(zhí)行時(shí),可能為線程緩存工作狀態(tài)的更多,或者至少在正在取得到高速緩沖存儲器中的過程中,因此減小與環(huán)境切換相關(guān)聯(lián)的與高速緩存有關(guān)的性能劣化。
文檔編號G06F9/38GK1629800SQ20041009475
公開日2005年6月22日 申請日期2004年11月17日 優(yōu)先權(quán)日2003年12月18日
發(fā)明者杰弗里·P·布拉德福德, 哈羅德·F·科斯曼, 蒂莫西·J·馬林斯 申請人:國際商業(yè)機(jī)器公司