專利名稱:利用流預(yù)取歷史來改進(jìn)數(shù)據(jù)預(yù)取性能的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及數(shù)據(jù)處理領(lǐng)域,更具體來說,涉及用于在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。
背景技術(shù):
在現(xiàn)代數(shù)據(jù)處理系統(tǒng)中已采用了硬件數(shù)據(jù)預(yù)取器,以在從較低級別的高速緩存和其他數(shù)據(jù)存儲介質(zhì)中取回數(shù)據(jù)時預(yù)測并減少大量的等待時間。該等待時間是從數(shù)據(jù)存儲介質(zhì)中取回數(shù)據(jù)所需要的處理器周期的總數(shù),其已經(jīng)有了快速的增加,這是因?yàn)樘幚砥黝l率提高但在訪問數(shù)據(jù)存儲介質(zhì)所需要的時間方面沒有相應(yīng)的改進(jìn)。
針對在等待時間方面的快速增加,已采用流硬件數(shù)據(jù)預(yù)取器來檢測數(shù)據(jù)流(以單調(diào)上升或單調(diào)下降方式引用鄰近的高速緩存塊集合的存儲引用的任何序列)并開始將數(shù)據(jù)預(yù)取到預(yù)定深度,即處理系統(tǒng)當(dāng)前加載的數(shù)據(jù)之前的預(yù)定數(shù)量的高速緩存塊。流的檢測要求對于相繼行的至少兩個高速緩存丟失(miss);并且為了避免預(yù)取那些可能不需要的高速緩存行,對于新近檢測到的流進(jìn)行的預(yù)取通常適當(dāng)?shù)亻_始,并且預(yù)取的深度逐漸上升直至達(dá)到指定深度為止。
現(xiàn)代流預(yù)取器可以通過使用多個流寄存器來同時跟蹤和預(yù)取多個流,其中每個流寄存器包含標(biāo)識當(dāng)前數(shù)據(jù)流狀態(tài)的地址以及其它信息,例如流的方向、從流開始起消耗的行的數(shù)量、以及已產(chǎn)生但尚未經(jīng)調(diào)度的預(yù)取。
盡管以上描述的預(yù)取方法至今仍然工作良好,但啟動損失(兩個初始丟失)和上升階段(其中預(yù)取深度可能不足以確保將數(shù)據(jù)按時遞送到應(yīng)用)具有相關(guān)聯(lián)的性能損失,該性能損失隨著存儲器等待時間的增加而增加。旨在縮短媒體流長度的應(yīng)用僅略微受益于數(shù)據(jù)預(yù)取器,或者因?yàn)閱訐p失所致而根本沒有受益。對于這種情況,期望盡可能地減少啟動損失。
數(shù)據(jù)流預(yù)取器保持一些如前所述當(dāng)前定義在其流寄存器的任何一個中的關(guān)于數(shù)據(jù)流的歷史信息,即當(dāng)前數(shù)據(jù)地址、方向、待預(yù)取的下一行以及已產(chǎn)生但尚未發(fā)送的未決預(yù)取。然而,當(dāng)新的流替代當(dāng)前流的時候,該信息在這些字段被新的流分配覆蓋時丟失。
在應(yīng)用代碼的連續(xù)迭代中保存這些歷史信息中的一些(例如啟動數(shù)據(jù)地址)以在下一次檢測到相同數(shù)據(jù)流時使用將有助于實(shí)現(xiàn)降低啟動損失的目的。然而,對于典型應(yīng)用,這將需要很大的表格來有效地應(yīng)對在典型應(yīng)用期間所產(chǎn)生的大量數(shù)據(jù)流。例如,一個雙重嵌套(double-nested)或三層嵌套循環(huán)結(jié)構(gòu)單獨(dú)就能很容易地產(chǎn)生成千個流。
該問題的一種解決方案是允許編譯器在目標(biāo)代碼中插入特定指令,以引導(dǎo)硬件預(yù)取引擎在指定地址開始一個流并且迅速上升至期望深度。然而,該方法要求對應(yīng)用進(jìn)行重新編譯,并且局限于編譯器在編譯時間所具有的關(guān)于流以及其高速緩存的特性的不完備知識(因?yàn)殛嚵写笮⊥ǔJ请S運(yùn)行時間變化的變量)。
因此,希望提供一種機(jī)制來改進(jìn)數(shù)據(jù)處理系統(tǒng)中的預(yù)取性能,其對于沒有利用流預(yù)取指令進(jìn)行編譯過的現(xiàn)有二進(jìn)制很有效,從而在該數(shù)據(jù)處理系統(tǒng)中實(shí)現(xiàn)數(shù)據(jù)預(yù)取硬件更好的一般性使用。
發(fā)明內(nèi)容
本發(fā)明提供一種用于在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。用于在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)的方法包括通過將每個先前數(shù)據(jù)流的屬性與引起該數(shù)據(jù)流分配的存儲器訪問指令相關(guān)聯(lián)而產(chǎn)生先前數(shù)據(jù)流的屬性信息,然后記錄所產(chǎn)生的屬性信息。訪問所記錄的屬性信息,并且利用所訪問的記錄的屬性信息來修改新數(shù)據(jù)流的特性。
在所附權(quán)利要求中對確信為本發(fā)明特有的新穎特征進(jìn)行了闡述。然而,當(dāng)結(jié)合附圖進(jìn)行閱讀時,參考示意性實(shí)施方式的下列詳細(xì)描述將可以更好地理解本發(fā)明自身以及使用的優(yōu)選模式、進(jìn)一步的目的及其優(yōu)點(diǎn),附圖中圖1示出了可以在其中實(shí)現(xiàn)本發(fā)明若干方面的數(shù)據(jù)處理系統(tǒng)的網(wǎng)絡(luò)的示意圖;圖2是可以在其中實(shí)現(xiàn)本發(fā)明若干方面的數(shù)據(jù)處理系統(tǒng)的框圖;圖3示意性示出了根據(jù)本發(fā)明示例性實(shí)施方式的數(shù)據(jù)流預(yù)取器的框圖;圖4是示意性示出了根據(jù)本發(fā)明示例性實(shí)施方式的圖3中數(shù)據(jù)流歷史表中每個索引處所存儲的信息的圖;圖5示出了對于二維網(wǎng)格的Jacobi解算器的一般實(shí)現(xiàn),以幫助解釋本發(fā)明的若干方面;以及圖6是示出了根據(jù)本發(fā)明示例性實(shí)施方式的用于在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)的方法的流程圖。
具體實(shí)施例方式
現(xiàn)在參考附圖特別是參考圖1-2,提供了在其中可以實(shí)現(xiàn)本發(fā)明實(shí)施方式的數(shù)據(jù)處理環(huán)境的示例圖。應(yīng)當(dāng)理解,圖1-2僅為示例性的,其不意在聲明或暗示對在其中可以實(shí)現(xiàn)本發(fā)明的若干方面或?qū)嵤┓绞降沫h(huán)境的任何限定。在不脫離本發(fā)明的實(shí)質(zhì)和范圍的情況下,可以對所示出的環(huán)境進(jìn)行很多種修改。
現(xiàn)在參考附圖,圖1示出了可以在其中實(shí)現(xiàn)本發(fā)明若干方面的數(shù)據(jù)處理系統(tǒng)網(wǎng)絡(luò)的圖示表述。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100是一種計(jì)算機(jī)網(wǎng)絡(luò),在該網(wǎng)絡(luò)中可以實(shí)現(xiàn)本發(fā)明的若干實(shí)施方式。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100包含網(wǎng)絡(luò)102,其是用于在網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100內(nèi)彼此連接的各種裝置和計(jì)算機(jī)之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)102可以包括諸如有線、無線通信鏈路或光纜之類的連接。
在所示出的例子中,服務(wù)器104和服務(wù)器106以及存儲單元108連接至網(wǎng)絡(luò)102。此外,客戶機(jī)110、112和114連接至網(wǎng)絡(luò)102。這些客戶機(jī)110、112和114可以是例如個人計(jì)算機(jī)或網(wǎng)絡(luò)計(jì)算機(jī)。在所示出的例子中,服務(wù)器104向客戶機(jī)110、112和114提供諸如引導(dǎo)文件、操作系統(tǒng)鏡像以及應(yīng)用之類的數(shù)據(jù)。在此例中,客戶機(jī)110、112和114是服務(wù)器104的客戶機(jī)。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100可以包括未示出的附加的服務(wù)器、客戶機(jī)以及其他裝置。
在所示出的例子中,網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100是因特網(wǎng),其中網(wǎng)絡(luò)102表示的是利用傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)協(xié)議組進(jìn)行彼此間通信的網(wǎng)絡(luò)和網(wǎng)關(guān)的世界范圍的集合。在因特網(wǎng)的核心處是在主節(jié)點(diǎn)或主機(jī)(包括成千的對數(shù)據(jù)和消息進(jìn)行路由的商業(yè)、政府、教育和其他計(jì)算機(jī)系統(tǒng))之間的高速數(shù)據(jù)通信線路的骨干網(wǎng)。當(dāng)然,網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100還可以實(shí)現(xiàn)為若干不同類型的網(wǎng)絡(luò),例如內(nèi)聯(lián)網(wǎng)、局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)。圖1只意在進(jìn)行示例,而不意在對本發(fā)明的不同實(shí)施方式進(jìn)行結(jié)構(gòu)性限制。
現(xiàn)在參考圖2,示出了可以在其中實(shí)現(xiàn)本發(fā)明若干方面的數(shù)據(jù)處理系統(tǒng)的框圖。數(shù)據(jù)處理系統(tǒng)200是計(jì)算機(jī)的例子,例如圖1中的服務(wù)器104或客戶機(jī)110,實(shí)現(xiàn)針對本發(fā)明實(shí)施方式的處理的計(jì)算機(jī)可用代碼或指令可以位于該數(shù)據(jù)處理系統(tǒng)200中。
在所示出的例子中,數(shù)據(jù)處理系統(tǒng)200采用集線器體系結(jié)構(gòu),該集線器體系結(jié)構(gòu)包括北橋接器和存儲器控制器集線器(NB/MCH)202,以及南橋接器和輸入/輸出(I/O)控制器集線器(SB/ICH)204。處理單元206、主存儲器208以及圖形處理器210連接至NB/MCH202。圖形處理器210可以通過加速圖形端口(AGP)連接至NB/MCH202。
在所示出的例子中,局域網(wǎng)(LAN)適配器212連接至SB/ICH204。音頻適配器216、鍵盤和鼠標(biāo)適配器220、調(diào)制解調(diào)器222、只讀存儲器(ROM)224、硬盤驅(qū)動器(HDD)226、CD-ROM驅(qū)動器230、通用串行總線(USB)端口和其他通信端口232,以及PCI/PCIe設(shè)備234通過總線238和總線240連接至SB/ICH 204。PCI/PCIe設(shè)備可以包括例如以太網(wǎng)適配器、附加卡以及用于筆記本計(jì)算機(jī)的PC卡。PCI使用卡總線控制器,而PCIe不使用。ROM 224可以是例如快閃二進(jìn)制輸入/輸出系統(tǒng)(BIOS)。
HDD 226和CD-ROM驅(qū)動器230通過總線240連接至SB/ICH204。HDD 226和CD-ROM驅(qū)動器230可以使用例如電子集成驅(qū)動器(IDE)接口或串行高級技術(shù)附件(SATA)接口。超級I/O(SIO)裝置236可以連接至SB/ICH 204。
操作系統(tǒng)在處理單元206上運(yùn)行,協(xié)調(diào)并提供對圖2中數(shù)據(jù)處理系統(tǒng)200內(nèi)各種部件的控制。作為客戶機(jī),操作系統(tǒng)可以是商業(yè)上可獲得的操作系統(tǒng),例如MicrosoftWindowsXP(Microsoft和Windows是微軟公司在美國和/或其他國家的商標(biāo))。面向?qū)ο蟮木幊滔到y(tǒng)(例如JavaTM編程系統(tǒng))可以結(jié)合該操作系統(tǒng)運(yùn)行,并且從在數(shù)據(jù)處理系統(tǒng)200上執(zhí)行的JavaTM程序或應(yīng)用向操作系統(tǒng)提供調(diào)用(Java是SunMicrosystems公司在美國和/或其他國家的商標(biāo))。
作為服務(wù)器,數(shù)據(jù)處理系統(tǒng)200可以是例如IBMeServerTMpSeries計(jì)算機(jī)系統(tǒng),其運(yùn)行高級交互執(zhí)行(AIX)操作系統(tǒng)或LINUX操作系統(tǒng)(eServer、pSeries和AIX是國際商業(yè)機(jī)器公司在美國和/或其他國家的商標(biāo),而LINUX是Linus Torvalds在美國和/或其他國家的商標(biāo))。數(shù)據(jù)處理系統(tǒng)200可以是對稱多處理器(SMP)系統(tǒng),其在處理單元206中包括多個處理器??蛇x地,可以使用單獨(dú)的處理器系統(tǒng)。
用于操作系統(tǒng)、面向?qū)ο蟮木幊滔到y(tǒng)和應(yīng)用或程序的指令位于諸如HDD 226的存儲裝置中,可以加載到主存儲器208中以由處理單元206來執(zhí)行。處理單元206利用計(jì)算機(jī)可用程序代碼來執(zhí)行針對本發(fā)明實(shí)施方式的處理,其中所述計(jì)算機(jī)可用程序代碼可位于諸如主存儲器208、ROM 224之類的存儲器中,或位于一個或多個外圍裝置226和230中。
本領(lǐng)域普通技術(shù)人員將可以理解的是,圖1-2中的硬件可以根據(jù)實(shí)現(xiàn)的不同而發(fā)生改變。其他內(nèi)部硬件或外圍裝置,例如閃存、等同的非易失性存儲器或光盤驅(qū)動器等,可以附加地被使用或替代圖1-2中示出的硬件。而且,本發(fā)明的處理可以應(yīng)用到多處理器數(shù)據(jù)處理系統(tǒng)中。
在某些示意性實(shí)例中,數(shù)據(jù)處理系統(tǒng)200可以是個人數(shù)字助理(PDA),其配備有閃存以提供用于存儲操作系統(tǒng)文件和/或用戶生成數(shù)據(jù)的非易失性存儲器。
總線系統(tǒng)可以包括一個或多個總線,例如如圖2所示的總線238或總線240。當(dāng)然,可以利用任何類型的通信構(gòu)造或體系結(jié)構(gòu)來實(shí)現(xiàn)該總線系統(tǒng),用以在連接于該構(gòu)造或體系結(jié)構(gòu)的不同部件或裝置之間提供數(shù)據(jù)傳送。通信單元可以包括一個或多個用于傳送和接收數(shù)據(jù)的裝置,例如圖2的調(diào)制解調(diào)器222或網(wǎng)絡(luò)適配器212。存儲器可以是例如圖2中的主存儲器208、ROM 224或諸如通過NB/MCH 202找到的高速緩存。圖1-2中所示出的實(shí)例和上述實(shí)例不意在暗示任何結(jié)構(gòu)性限制。例如,數(shù)據(jù)處理系統(tǒng)200還可以是除PDA形式之外的平板計(jì)算機(jī)、膝上型計(jì)算機(jī)或者電話裝置。
本發(fā)明提供一種在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。根據(jù)本發(fā)明,數(shù)據(jù)流的簡要?dú)v史信息保存在數(shù)據(jù)流歷史表(DSHT)中,并用于在一般的數(shù)據(jù)處理設(shè)置中極大地提高數(shù)據(jù)流預(yù)取器的效率。更具體來說,本發(fā)明在數(shù)據(jù)流歷史表中記錄由一個或多個指令產(chǎn)生的數(shù)據(jù)流的特定屬性。通過使得流進(jìn)行分配的存儲訪問指令的地址來對該表中的信息加索引,或者更一般地,通過地址的散列(hash)來對該表中的信息加索引。每當(dāng)流預(yù)取器例示出新的數(shù)據(jù)流時,通過訪問并使用DSHT中的信息來改善該流預(yù)取器的響應(yīng)。
DSHT中的信息通過指示所述流可能的方向和長度以及針對當(dāng)前指令塊的臨時流的可能數(shù)量來修改新流的啟動和穩(wěn)態(tài)特性。然后,較后的信息可用于調(diào)節(jié)每個流的預(yù)取深度,從而使性能最大化,同時使可能不消耗(需要)的行的預(yù)取最小化。然后,當(dāng)程序消耗流的時候,數(shù)據(jù)流預(yù)取器利用最近的信息來更新DSHT。本發(fā)明因此為數(shù)據(jù)流預(yù)取器提供了一種自適應(yīng)能力,其改進(jìn)了未經(jīng)重編譯的應(yīng)用的性能使其包括軟件數(shù)據(jù)預(yù)取控制指令。除了引導(dǎo)預(yù)取器的現(xiàn)有軟件提示之外,還提供了一種強(qiáng)大的能力,其中可以使用編譯器和應(yīng)用編碼器來優(yōu)化應(yīng)用的性能。
圖3是示意性示出根據(jù)本發(fā)明示例性實(shí)施方式的數(shù)據(jù)流預(yù)取器的框圖。預(yù)取器整體上由參考數(shù)字300來表示,該預(yù)取器包括具有深度控制的流預(yù)取器,例如,如2005年2月10日提交的共同未決以及共同轉(zhuǎn)讓的美國專利申請序列號No.11/054,889(代理人卷號No.AUS920041083US1)和11/054,871(代理人卷號No.AUS920041084US1)所述,其公開在此通過參考引入。
在圖3中通過流寄存器和預(yù)取表302以及流控制邏輯塊304來表示流預(yù)取硬件,該流預(yù)取硬件基于數(shù)據(jù)操作數(shù)加載地址306以及相關(guān)高速緩存丟失信息308和與數(shù)據(jù)操作數(shù)的高速緩存行有關(guān)的加載丟失隊(duì)列(LMQ)信息310來獲取和預(yù)取數(shù)據(jù)流。
根據(jù)本發(fā)明,數(shù)據(jù)流歷史表(DSHT)312以及相關(guān)的控制邏輯整體上由參考數(shù)字314來表示,其包括在預(yù)取器300中。DSHT 312保存與指令范圍相對應(yīng)的一個或多個流的簡明特征,并通過316所表示的該指令范圍的地址散列來加索引。
在本發(fā)明的示例式實(shí)施方式中,該散列包括指令地址位42至55。在此情況中,256B指令塊(例如32個四字節(jié)指令)中所有加載指令將由DSHT 312中的一個條目來表示,并且該表將用16384個條目唯一地覆蓋達(dá)4MB大小的程序。需要注意的是,較大的程序在表中將沒有唯一的映射,但即使在發(fā)生混淆這種很稀少的情況下,對程序也沒有功能上的副作用;唯一的結(jié)果是涉及應(yīng)用的性能。以此方式,其與分支歷史表相似。具有較少數(shù)量條目(例如4096個條目)的表將仍然為大量的工作量提供正面結(jié)果,因此可以對照平均性能改進(jìn)而權(quán)衡所述表的大小。
圖4是示意性示出根據(jù)本發(fā)明示例性實(shí)施方式的DSHT 312中每個索引所存儲的信息的圖。該索引通常由參考數(shù)字400來表示,并且包括流方向字段402、每個流的飽和行計(jì)數(shù)字段404以及飽和并發(fā)流計(jì)數(shù)字段406。后兩個字段的寬度將取決于實(shí)現(xiàn)細(xì)節(jié),但通常可以分別是至少4比特寬和3比特寬。
當(dāng)流預(yù)取分配邏輯304確定應(yīng)當(dāng)在流寄存器302中建立新的流條目時,那么除了其正常的動作之外,將指令地址散列316用于在DSHT312中加索引以訪問對下述預(yù)取流的方式進(jìn)行修改的信息。DSHT訪問被保存在DSHT輸出緩沖器318中直至出現(xiàn)了對不同指令塊的表訪問為止。如果在遇到另一個指令塊之前在同一指令塊中啟動了多個流(對于循環(huán)結(jié)構(gòu)來說通常是這樣的情況),那么利用并發(fā)流邏輯320對此塊中流的數(shù)量進(jìn)行計(jì)數(shù)。在此情況中,DSHT輸出緩沖器318保護(hù)與該指令范圍相對應(yīng)的先前信息使其免受由最近創(chuàng)建的流所導(dǎo)致的任何更新。隨著應(yīng)用的進(jìn)展以及流的消耗,利用當(dāng)前流長度(高速緩存行)、方向以及并發(fā)流計(jì)數(shù)來更新DSHT 312,如326所示。
根據(jù)包含啟動流的加載指令的代碼塊來識別流是非常有效的,因?yàn)榇蠖鄶?shù)流自身以循環(huán)結(jié)構(gòu)(應(yīng)用代碼中的for while、或do結(jié)構(gòu))出現(xiàn)。對于很多應(yīng)用來說,相對較少的循環(huán)集合在應(yīng)用執(zhí)行時產(chǎn)生大量的流實(shí)例;即使每次應(yīng)用執(zhí)行循環(huán)嵌套時流的開始數(shù)據(jù)地址和特定特征可能發(fā)生改變,經(jīng)常的情況是循環(huán)中流的關(guān)鍵特征與最后一次執(zhí)行時相似。換言之,流的方向、長度和消耗速率的最佳預(yù)測是最為接近的過去。因此,如果保存了諸如流方向、長度和并發(fā)流的數(shù)量(其影響消耗速率)之類的關(guān)鍵特征,那么它們可以非常有效地推測性地用于下一次循環(huán)調(diào)用。
為了解釋起見,現(xiàn)在參考圖5,其示出了對二維網(wǎng)格的Jacobi(雅可比)解算機(jī)的一般實(shí)現(xiàn),以幫助解釋本發(fā)明的若干方面。盡管圖5中示出的代碼是整個應(yīng)用的一小部分代碼,但大部分的計(jì)算時間將花費(fèi)在該進(jìn)程中。
具體來說,在do while循環(huán)中有兩個關(guān)鍵的嵌套循環(huán)集合;第一嵌套的do j=1,m和do i=1,n僅將陣列從陣列u復(fù)制到陣列uold。第二循環(huán)(也是計(jì)算上更復(fù)雜的循環(huán))利用陣列uold中的舊求解以及陣列f中的值在網(wǎng)格上執(zhí)行Jacobi迭代。需要注意的是,內(nèi)部i循環(huán)的每次迭代具有開始于陣列中不同位置的數(shù)據(jù)流,但其具有相同的方向(上升)和長度(n)。而且,第一循環(huán)集合最多具有一個流,而第二循環(huán)集合具有與陣列f和uold相關(guān)聯(lián)的多個流。
對于第一循環(huán),基于DSHT中一個的并發(fā)流計(jì)數(shù),流分配邏輯將進(jìn)行更深的預(yù)取(即在當(dāng)前被加載的行之前預(yù)取更多的行),以避免由于存儲器等待時間而導(dǎo)致的拖延。第二循環(huán)中流的確切數(shù)量將是陣列大小和機(jī)器高速緩存大小的函數(shù),但是對于程序的給定實(shí)例而言,并發(fā)流的數(shù)量對于代碼進(jìn)入的大多數(shù)次數(shù)來說是保持相同的。例如,如果機(jī)器高速緩存的大小不足以包含在陣列的4個列(uold(,j-1),uold(,j),uold(,j+1),f(,j),其中冒號表示i從1到n)中的數(shù)據(jù),那么在內(nèi)部循環(huán)i的每次迭代中就有四個流有效。在此情況中,流分配邏輯對每個流的預(yù)取深度將減小,從而結(jié)合的來自所有四個流的預(yù)取將使等待時間與存儲器匹配。沒有此信息的話,硬件將使用相同深度來預(yù)取所有的流,這將導(dǎo)致數(shù)量無效的預(yù)取請求或使得性能折衷。需要注意的是,對于頻繁地遇到僅跨越幾個高速緩存行的系列加載的應(yīng)用而言,DSHT將把應(yīng)用到這些初生流上的預(yù)取配置文件調(diào)節(jié)到最小或零。
圖6是示出了根據(jù)本發(fā)明示例性實(shí)施方式的用于在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)的方法的流程圖。該方法整體上由參考數(shù)字600來表示,其描述了程序的執(zhí)行過程。
該方法開始于獲取并解碼指令(步驟602),并且確定是否為加載(步驟604)。如果其不是加載(步驟604的輸出為否),那么該方法返回步驟602。如果其是加載(步驟604的輸出為是),那么將加載指令的地址位的子集隨同實(shí)際數(shù)據(jù)地址一起發(fā)送至流預(yù)取單元(步驟606)。
作為流預(yù)取器正常動作的一部分,針對每個流寄存器中的所有當(dāng)前流數(shù)據(jù)地址來運(yùn)行加載數(shù)據(jù)地址,并且確定是否存在匹配(步驟608)。如果存在匹配(在步驟608的輸出為是),那么流的狀態(tài)是前進(jìn)的并且產(chǎn)生預(yù)取(步驟610),并且利用當(dāng)前流屬性以及并發(fā)流計(jì)數(shù)信息來更新所述DSHT(步驟624)。
在不存在匹配的情況下(在步驟608的輸出為否),確定加載地址是否進(jìn)一步滿足命中(hit)/丟失信息(步驟612),并且在丟失的情況下(在步驟612的輸出為否),針對加載丟失隊(duì)列(LMQ)中的當(dāng)前地址進(jìn)行比較(步驟614)。如果所述地址對應(yīng)于不是當(dāng)前流一部分的行并且沒有使L1高速緩存或LMQ丟失(在步驟612或614的輸出為是),那么該方法返回步驟602。如果該地址對應(yīng)于不是當(dāng)前流一部分的行并且已使L1數(shù)據(jù)高速緩存和LMQ丟失(在步驟614的輸出為否),那么例示出新的流,并且進(jìn)行檢查以查看對應(yīng)于加載指令的指令地址散列是否與在其之前的那個相同(步驟616)。如果不相同(在步驟616的輸出為否),那么利用指令地址位作為索引來訪問DSHT,以讀出從早期執(zhí)行這些指令起就已經(jīng)對應(yīng)于這些指令塊的先前流的信息,并且清除并發(fā)流計(jì)數(shù)(步驟618)。
如果指令散列與先前的那個匹配(在步驟616的輸出為是),那么從緩存器中獲取期望的信息,其中該緩存器包含對DSHT的最新訪問以及指示在對應(yīng)于該指令塊的DSHT中增加的針對該條目的流的數(shù)量的字段(步驟620)。來自緩存器的信息用于開始(或者可能抑制)對流的預(yù)取。在啟動了流或更新現(xiàn)存流之后,分配流(步驟622),在對應(yīng)于啟動加載指令的指令散列的位置處更新DSHT(步驟624)并且該方法返回步驟602。
本發(fā)明因此提供了一種在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。用于在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)的方法包括通過將每個先前數(shù)據(jù)流的屬性與導(dǎo)致數(shù)據(jù)流分配的存儲訪問指令相關(guān)聯(lián)而產(chǎn)生先前數(shù)據(jù)流的屬性信息,然后記錄所產(chǎn)生的屬性信息。訪問所記錄的屬性信息,并且利用所訪問的記錄的屬性信息來修改新數(shù)據(jù)流的特性。
本發(fā)明可以采用完全硬件形式的實(shí)施方式、完全軟件形式的實(shí)施方式或包含硬件和軟件單元二者的實(shí)施方式。在優(yōu)選的實(shí)施方式中,本發(fā)明以軟件來實(shí)現(xiàn),其包括但不限于固件、駐留軟件、微代碼等等。
而且,本發(fā)明可以采用計(jì)算機(jī)程序產(chǎn)品的形式,可以從提供程序代碼的計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)來存取該計(jì)算機(jī)程序產(chǎn)品,其中該程序代碼可以由計(jì)算機(jī)或任何指令執(zhí)行系統(tǒng)使用或與之相聯(lián)系。為了說明起見,計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可以是任何能夠包含、存儲、通信、傳播或傳送由指令執(zhí)行系統(tǒng)、設(shè)備或裝置使用或與之相聯(lián)系的程序的有形設(shè)備。
該介質(zhì)可以是電子、磁性、光學(xué)、電磁、紅外或半導(dǎo)體系統(tǒng)(或設(shè)備或裝置)或傳播介質(zhì)。計(jì)算機(jī)可讀介質(zhì)的例子包括半導(dǎo)體或固態(tài)存儲器、磁帶、可移動計(jì)算機(jī)盤、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、剛性磁盤和光盤。光盤的當(dāng)前例子包括壓縮盤-只讀存儲器(CD-ROM)壓縮盤-讀/寫存儲器(CD-R/W)和DVD。
適用于存儲和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少一個通過系統(tǒng)總線直接或間接耦合至存儲器單元的處理器。該存儲器單元可以包括程序代碼實(shí)際執(zhí)行期間所使用的本地存儲器、海量存儲器以及為至少某些程序代碼提供臨時存儲的高速緩存存儲器,以減少在執(zhí)行期間必須從海量存儲器中獲取代碼的次數(shù)。
輸入/輸出或I/O裝置(包括但不限于鍵盤、顯示器、定位裝置等)可以直接或通過介入I/O控制器來耦合至系統(tǒng)。
網(wǎng)絡(luò)適配器也可以耦合至該系統(tǒng),以使得數(shù)據(jù)處理系統(tǒng)能夠通過介入私用或公共網(wǎng)絡(luò)而耦合至其他數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機(jī)或存儲裝置。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器以及以太網(wǎng)卡僅是當(dāng)前可用類型的網(wǎng)絡(luò)適配器中的一些。
為了示意和描述的目的而呈現(xiàn)了本發(fā)明的描述,并不意在窮盡或以所公開的方式來限制本發(fā)明。很多改動和變化對于本領(lǐng)域技術(shù)人員來說都是顯而易見的。選擇并描述這些實(shí)施方式是為了最好地解釋本發(fā)明的原理、實(shí)際應(yīng)用,并使得其他本領(lǐng)域技術(shù)人員能夠,其實(shí)施方式具有適用于所構(gòu)思的特定使用的各種變化。
權(quán)利要求
1.一種用于在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)的方法,該方法包括通過將每個先前數(shù)據(jù)流的屬性與導(dǎo)致所述先前數(shù)據(jù)流的分配的數(shù)據(jù)存儲訪問指令相關(guān)聯(lián)而產(chǎn)生所述先前數(shù)據(jù)流的屬性信息;記錄所述產(chǎn)生的屬性信息;訪問所述記錄的屬性信息;以及利用所述訪問的記錄的屬性信息來修改新數(shù)據(jù)流的特性。
2.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中,通過將每個先前數(shù)據(jù)流的屬性與導(dǎo)致所述先前數(shù)據(jù)流的分配的存儲訪問指令相關(guān)聯(lián)而產(chǎn)生所述先前數(shù)據(jù)流的屬性信息包括根據(jù)不重疊的鄰近指令組對先前數(shù)據(jù)流的數(shù)據(jù)流屬性進(jìn)行分組,其中該不重疊的鄰近指令組包含導(dǎo)致所述數(shù)據(jù)流的分配的所述數(shù)據(jù)存儲訪問指令。
3.根據(jù)權(quán)利要求2所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,進(jìn)一步包括將每個指令組中流的數(shù)量相加以找到針對每個指令組的先前數(shù)據(jù)流的并發(fā)數(shù)量,用于指示針對處于其執(zhí)行狀態(tài)的應(yīng)用的臨時流的可能數(shù)量。
4.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中,利用所述訪問的記錄的屬性信息來修改新數(shù)據(jù)流的特性包括基于臨時流的可能長度和可能數(shù)量來調(diào)節(jié)對所述新數(shù)據(jù)流進(jìn)行預(yù)取的深度。
5.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中,利用所述訪問的記錄的屬性信息來修改新數(shù)據(jù)流的特性包括通過指示所述新數(shù)據(jù)流的可能方向和長度來修改所述新數(shù)據(jù)流的啟動和穩(wěn)態(tài)特性。
6.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,進(jìn)一步包括當(dāng)消耗了新的數(shù)據(jù)流時利用最近的信息來更新所述記錄的屬性信息。
7.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中,記錄所述產(chǎn)生的屬性信息包括在數(shù)據(jù)流歷史表中記錄由指令組所產(chǎn)生的至少一個先前數(shù)據(jù)流的產(chǎn)生的屬性信息。
8.根據(jù)權(quán)利要求7所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,進(jìn)一步包括通過在首次分配所述至少一個先前數(shù)據(jù)流時的相關(guān)指令組的地址散列來在所述數(shù)據(jù)流歷史表中對所述記錄的產(chǎn)生的屬性信息加索引,并且其中,訪問所述記錄的屬性信息包括利用所述索引來訪問所述記錄的屬性信息。
9.根據(jù)權(quán)利要求8所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中,所述索引包括流方向字段、每個流的飽和行計(jì)數(shù)字段以及飽和并發(fā)流計(jì)數(shù)字段。
10.一種用于在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的數(shù)據(jù)預(yù)取器,包括屬性產(chǎn)生機(jī)構(gòu),用于通過將每個先前數(shù)據(jù)流的屬性與導(dǎo)致所述先前數(shù)據(jù)流的分配的數(shù)據(jù)存儲訪問指令相關(guān)聯(lián)而產(chǎn)生所述先前數(shù)據(jù)流的屬性信息;數(shù)據(jù)流歷史表,用于記錄所述產(chǎn)生的屬性信息;訪問機(jī)構(gòu),用于訪問所述數(shù)據(jù)流歷史表中的所述記錄的屬性信息;以及修改機(jī)構(gòu),用于利用所述訪問的記錄的屬性信息來修改新數(shù)據(jù)流的特性。
11.根據(jù)權(quán)利要求10所述的數(shù)據(jù)預(yù)取器,其中,所述屬性產(chǎn)生機(jī)構(gòu)包括分組機(jī)構(gòu),用于根據(jù)不重疊的鄰近指令組對先前數(shù)據(jù)流的數(shù)據(jù)流屬性進(jìn)行分組,其中該不重疊的鄰近指令組包含導(dǎo)致所述先前數(shù)據(jù)流的分配的所述數(shù)據(jù)存儲訪問指令。
12.根據(jù)權(quán)利要求11所述的數(shù)據(jù)預(yù)取器,進(jìn)一步包括求和機(jī)構(gòu),用于將每個指令組中流的數(shù)量相加以找到針對每個指令組的先前數(shù)據(jù)流的并發(fā)數(shù)量,用于指示針對處于其執(zhí)行狀態(tài)的應(yīng)用的臨時流的可能數(shù)量。
13.根據(jù)權(quán)利要求12所述的數(shù)據(jù)預(yù)取器,其中,所數(shù)修改機(jī)構(gòu)包括用于基于臨時流的可能長度和可能數(shù)量來調(diào)節(jié)對新數(shù)據(jù)流進(jìn)行預(yù)取的深度的機(jī)構(gòu)。
14.根據(jù)權(quán)利要求10所述的數(shù)據(jù)預(yù)取器,進(jìn)一步包括更新機(jī)構(gòu),用于當(dāng)消耗了新的數(shù)據(jù)流時利用最近的信息來更新所述記錄的屬性信息。
15.根據(jù)權(quán)利要求10所述的數(shù)據(jù)預(yù)取器,進(jìn)一步包括索引機(jī)構(gòu),用于通過在首次分配至少一個先前數(shù)據(jù)流時的相關(guān)指令組的地址散列來在所述數(shù)據(jù)流歷史表中對所述記錄的產(chǎn)生的屬性信息加索引,其中,所述訪問機(jī)構(gòu)利用所述索引來訪問所述記錄的屬性信息,并且其中,所述索引包括流方向字段、每個流的飽和行計(jì)數(shù)字段以及飽和并發(fā)流計(jì)數(shù)字段。
全文摘要
公開了一種用于在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。在數(shù)據(jù)處理系統(tǒng)中預(yù)取數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)的方法包括通過將每個先前數(shù)據(jù)流的屬性與導(dǎo)致數(shù)據(jù)流分配的存儲訪問指令相關(guān)聯(lián)而產(chǎn)生先前數(shù)據(jù)流的屬性信息;然后記錄所產(chǎn)生的屬性信息。訪問所記錄的屬性信息;以及利用所訪問的記錄的屬性信息來修改新數(shù)據(jù)流的行為。
文檔編號G06F17/30GK101030215SQ20071000827
公開日2007年9月5日 申請日期2007年1月26日 優(yōu)先權(quán)日2006年2月28日
發(fā)明者弗朗西斯·帕特里克·奧康奈爾, 小約翰·巴里·格里斯韋爾 申請人:國際商業(yè)機(jī)器公司