欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于生成預(yù)測助手線程的種子-目標(biāo)點的方法和設(shè)備的制作方法

文檔序號:6377913閱讀:322來源:國知局
專利名稱:用于生成預(yù)測助手線程的種子-目標(biāo)點的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及用于多線程處理器的助手線程,尤其涉及用于生成預(yù)測助手線程(speculative helper thread)并確定與相應(yīng)的非預(yù)測主線程相關(guān)的預(yù)測助手線程的進展的方法和設(shè)備。
背景技術(shù)
消費者不斷地需要更快的計算機。同步多線程(SMT)是一種對處理器的芯片區(qū)域影響有限但能提升其吞吐性能的有效方法。SMT通過并行執(zhí)行多個處理線程來增加處理器的吞吐量。不過,許多軟件應(yīng)用程序都沒有從SMT中受益。
此外,處理器和存儲器速度之間的差距仍在擴大。結(jié)果,計算機性能越來越由高速緩存層次的效率決定。預(yù)取是一種公知的用于提高高速緩存層次的效率的有效方法。不過,處理器的工作負荷通常會導(dǎo)致嚴重的高速緩存未命中。


圖1是包含三個控制流區(qū)域的程序片斷的示意圖。
圖2是顯示用于生成預(yù)測助手線程的一個示例流程的流程圖。
圖3是顯示用于生成特征信息(profile information)的一個示例流程的流程圖。
圖4是調(diào)用示例程序的示例控制流圖。
圖5是預(yù)取松弛的一個典型圖。
圖6是圖4中所顯示的示例程序的示例控制流圖。
圖7是顯示用于所揭示的系統(tǒng)的環(huán)境的計算機系統(tǒng)的框圖。
圖8是圖7中所顯示的多處理器的更加詳細的框圖。
具體實施例方式
總體上,揭示了一種采用預(yù)測線程級并行來使高速緩存預(yù)取更為高效的體系架構(gòu)機制。雖然這里所顯示的例子涉及由于指令高速緩存(I型高速緩存)未命中和預(yù)取所致的性能損失,本領(lǐng)域內(nèi)具有普通技術(shù)水準的人很容易明白,這里所揭示的技術(shù)可用于任何類型的助手線程。例如,這里所揭示的技術(shù)可用于數(shù)據(jù)高速緩存預(yù)取。
特別地,描述了一個用于優(yōu)化助手線程的算法,該算法采用多線程化的硬件,通過執(zhí)行明智及時(或者“預(yù)知”)的指令和(或)數(shù)據(jù)預(yù)取來提高應(yīng)用程序性能。特征信息用來識別由于I型高速緩存未命中導(dǎo)致性能損失的代碼區(qū)域。對于軟件應(yīng)用程序中識別出的每個目標(biāo)點,識別出一個對應(yīng)的種子點(spawn point),該種子點可以作為啟動用于指令預(yù)取的助手線程執(zhí)行的觸發(fā)點。一旦識別出一個種子-目標(biāo)對,一個助手線程即被生成并附加到原始的應(yīng)用程序二進制文件(即,主線程)中。當(dāng)在運行時在主線程中遇到一個種子點時,助手線程即被生成以在空閑線程環(huán)境中開始執(zhí)行。助手線程的執(zhí)行將沿著目標(biāo)點之后的短路徑為預(yù)期的I型高速緩存的未命中有效地預(yù)取指令。
圖1是表示包括三個不同的控制流區(qū)域的一個示例性的主線程118程序片斷的示意圖。在所顯示的例子中,緊隨目標(biāo)點104之后的后綴區(qū)域102被預(yù)測由于指令高速緩存未命中要遭受嚴重的性能損失。為說明簡單起見,種子點108之前的區(qū)域106被稱作前綴區(qū)域106,而種子點108和目標(biāo)點104之間的區(qū)域110被稱作中綴區(qū)域110。
高效的指令預(yù)取得益于后綴區(qū)域102中的分支的精確解析。因此,一個助手線程112可以包括兩個執(zhí)行階段。具體來講,助手線程112的執(zhí)行可以包括一個預(yù)計算階段114和一個預(yù)取階段116。在預(yù)計算階段114期間,助手線程112在開始執(zhí)行后綴區(qū)域102中的預(yù)取階段116之前,先在中綴區(qū)域110中確定一個或多個live-in值。助手線程112在預(yù)計算階段114期間執(zhí)行的指令對應(yīng)于主線程位于落在種子點108和目標(biāo)點104之間的中綴區(qū)域110中的指令的一個子集(稱作“后向片(backwardslice)”)。在預(yù)取階段116期間,助手線程112執(zhí)行后綴區(qū)域102中的代碼。預(yù)取階段116中代碼的執(zhí)行既為后綴區(qū)域102中的助手線程112解析控制流,又為主線程118預(yù)取指令。
優(yōu)選地,對于一個給定的目標(biāo)點104,種子點108的選定既要在目標(biāo)點104前面足夠遠的地方,以便為預(yù)取指令提供足夠的松弛,又不要太遠,以至于驅(qū)除駐留在高速緩存中的仍對主線程118有用的指令,從而潛在地導(dǎo)致整體性能的降低。類似地,預(yù)取那些似乎主線程118要馬上遇到,而實際上很久以后才會遇到的指令,也會降低性能。因此,最好是在種子點108和目標(biāo)點104之間有足夠長的距離,但是在種子點108和目標(biāo)點104之間又有很強的控制流相關(guān)性。如果控制流圖中的兩個點中一個的執(zhí)行預(yù)示著另一個執(zhí)行的概率也很高,這兩個點即是強控制流相關(guān)的。
控制流相關(guān)性包含兩個因子從種子點108到達目標(biāo)點104的前向概率,和種子點108領(lǐng)先于目標(biāo)點104的逆轉(zhuǎn)(或“后驗”)概率。前面的屬性確保助手線程112的預(yù)測執(zhí)行不會由于主線程118實際的控制流沒有經(jīng)過目標(biāo)點104而是徒然的。不過,是后者量化了助手線程112的潛在價值。
用于定義與之相關(guān)聯(lián)的助手線程112的合適種子-目標(biāo)點108、104的識別被揭示為一個優(yōu)化問題。優(yōu)化技術(shù)利用從特征數(shù)據(jù)導(dǎo)出的統(tǒng)計信息將運行時程序行為建模為一個離散馬爾可夫(Markov)過程。這個公式使得可以通過有效的計算方法對和助手線程112的執(zhí)行相關(guān)的重要的統(tǒng)計量做精確的估計。由此導(dǎo)致了將在下面詳細說明的種子-目標(biāo)對108、104選擇算法。該算法可以由諸如Itanium處理器系列(IPE)體系等任何處理器體系實現(xiàn)。
該馬爾可夫模型公式用于量化當(dāng)主線程118到達一個給定的種子點108時,生成一個在給定的目標(biāo)點104開始的在前運行的指令預(yù)取線程的價值。尤其是,路徑表示被用于有效計算某個信息,該信息描述與在程序二進制文件中的任何兩個點之間的執(zhí)行有關(guān)的預(yù)期程序行為。計算的信息包括(i)假定到了程序中的第一點的情況下,到達程序中的第二點的概率,(ii)將在程序中的兩點之間執(zhí)行的指令數(shù)的統(tǒng)計期望值(例如,平均數(shù)),(iii)當(dāng)在兩點之間遍歷時,所需的指令存儲空間,(iv)給定程序中的當(dāng)前執(zhí)行點的情況下,提前執(zhí)行了一個特定的基礎(chǔ)塊的概率,和(v)對較早的塊發(fā)生的執(zhí)行時間接近程度的度量。
對于一個控制流圖,其中節(jié)點表示基礎(chǔ)塊,邊沿表示基礎(chǔ)塊之間的過渡,過程內(nèi)的程序執(zhí)行用一個離散的馬爾可夫鏈來建模?;A(chǔ)塊表示狀態(tài)。狀態(tài)過渡用控制流圖中的分支結(jié)果的概率來表示。這些概率基于邊沿特征信息,該信息表示在假定分支結(jié)果獨立的前提下,一個塊流向另一個塊或者從另一個塊流出的可能性。正如本領(lǐng)域內(nèi)具有普通技術(shù)水準的人所知曉的那樣,馬爾可夫鏈可用狀態(tài)和過渡概率來構(gòu)造,過渡概率表示采用通過原始控制流圖的一個特殊的路徑段(具有給定長度)的聯(lián)合概率(例如,從塊A開始,分支到塊B,然后分支到塊C的概率)。
對于過程間的控制流,對限制過渡進/出過程的過程調(diào)用的效果進行了建模,以便一個過程必須返回到其調(diào)用者。尤其是,當(dāng)表示當(dāng)前狀態(tài)的基礎(chǔ)塊以一個過程調(diào)用結(jié)束時,在首先等待通常過渡時間(與當(dāng)前基礎(chǔ)塊相關(guān)聯(lián))過去后,進行了一個從馬爾可夫模型向過程間的模型的過渡。當(dāng)進入與一個過程的退出塊相關(guān)聯(lián)的狀態(tài)時,控制返回到調(diào)用塊。
為了建模指令存儲器的效果,采用了一個兩級指令存儲器層次。存儲器包括一個具有最近最少使用(LRU)替代策略的有限容量完全相關(guān)指令高速緩存,以便所有的未命中要么是冷啟動未命中,要么是容量未命中。該模型的簡化沒有以任何方式限制種子-目標(biāo)選擇算法只適合用于具有這樣的存儲器配置的計算機系統(tǒng),相反,這種簡化有助于包括具有任意級高速緩存(統(tǒng)一的或獨立的)與任意程度相關(guān)聯(lián)性的高速緩存層次的系統(tǒng)的分析。在下面的方程式中,符號“$”用于表示可以保存在指令高速緩存中的指令數(shù)。注意,程序的控制流路徑完全確定了該高速緩存的內(nèi)容。通過考慮由控制流的統(tǒng)計模型給定的所有這些路徑的概率,(原則上)就可能獲得在程序中的一個特定點當(dāng)模型進入給定狀態(tài)(基礎(chǔ)塊)時,任何特定指令處于高速緩存中的概率。在這里的公式中,計算的是和此概率相關(guān)的量(期望路徑覆蓋區(qū))。為了估計指令高速緩存中的內(nèi)容,采用了一個一條指令的高速緩存線容量。為了利用空間局部性,真實的指令高速緩存將采用幾個指令的線容量。
Tarjan的快速路徑表示算法解決了單一源路徑問題。我們通過找到路徑表示映射提高了Tarjan的快速路徑表示算法的效率。這些映射將控制流圖中兩個點之間的所有路徑的廣義的求和運算轉(zhuǎn)化成了表示這些路徑的一個公式的運算。這個公式相當(dāng)重要,它用一個十分緊湊閉包形式的表達式描述了一個可能無窮的集合。為了說明作為所用轉(zhuǎn)換的基礎(chǔ)的映射,首先介紹下列標(biāo)準術(shù)語(類似于Tarjan在他的有關(guān)路徑表示算法的書中所使用的)是有幫助的?!胺较驁D”G(V,E)包括V中的頂點v,和E中的邊沿e=(u,v),這里u是邊沿e的頭,v是邊沿e的尾,所以u和v都在V中。邊沿被看作是從頭至尾的連線。在許多情形中,都對邊沿加標(biāo)注以獲得一個“標(biāo)注方向圖”。給定一個有限字母表∑,具有元素α∈∑,且不與符號{Λ,,(,)}相交,“Λ”、“”和α∈∑是最小的正規(guī)表達式,如果R1和R2是正規(guī)表達式,那么“(R1∪R2)”、“(R1·R2)”和“(R1)*”則是復(fù)合正規(guī)表達式。符號Λ表示空串,表示空集,∪表示并,·表示級聯(lián),*表示級聯(lián)下的傳遞閉包。
方向圖G(V,E)上的“路徑表示”P(x,y)是概括了G中的頂點x和y之間的所有路徑的E中邊沿集上的一個規(guī)范表示。路徑表示有一個“起點”x和一個“終點”y。所有的路徑表示都有一個唯一定義的起點和終點。當(dāng)按照Tarjan的快速路徑算法所做的那樣構(gòu)造時,路徑表示將按照唯一的方法枚舉x和y之間每條不同的路徑。這樣的路徑表示被稱作是“明確的”。當(dāng)并運算符的行為不是等冪的(即,x∪x=x不必為真)時,為了獲得正確的結(jié)果,需要明確的路徑表示。由P(x,y)枚舉的所有的路徑的集合用σ(P(x,y))表示。在本公布資料中將σ(P(x,y))稱作x和y之間的路徑集。“開放路徑表示”Po(x,y)表示從x到y(tǒng)的所有路徑的集合,這樣,y僅出現(xiàn)在每條路徑的終點(當(dāng)且僅當(dāng)x=y(tǒng)時,出現(xiàn)在路徑的起點)。
圖2顯示了一個用于為指令高速緩存預(yù)取生成一個或多個預(yù)測助手線程112的示例流程200。優(yōu)選地,流程200用一個或者多個軟件程序來具體實現(xiàn),這些軟件程序保存在一個或多個存儲器上,并由一個或多個處理器按照公知的方式執(zhí)行。不過,流程200的某些或者全部塊可以人工完成。盡管流程200是以圖2中所顯示的流程圖為例進行說明的,本領(lǐng)域內(nèi)具有普通技術(shù)水準的人很容易明白,也可以采用許多其他的方法來完成流程200。例如,可以更改許多塊的次序,可以改變一個或者多個塊的操作,可以組合和(或)取消一些塊。
通常,示例流程200根據(jù)下面詳細描述的特征數(shù)據(jù)和一系列運算來選擇種子-目標(biāo)對108、104。接著,為給一個軟件應(yīng)用程序預(yù)取軟件指令,流程200生成在選定的種子點108開始啟動的助手線程代碼。生成的助手線程代碼接下來被附加到軟件應(yīng)用程序上以創(chuàng)建多線程的軟件應(yīng)用程序。
所顯示的示例流程200通過加載一個軟件應(yīng)用程序和相關(guān)聯(lián)的特征信息來開始啟動(塊202)。典型情況下,軟件應(yīng)用程序和相關(guān)聯(lián)的特征信息從硬盤驅(qū)動器116加載到主存儲器108中。特征信息可以由一個高速緩存特征提取(cache profiling)程序生成,然后被讀取來識別由于I型高速緩存未命中導(dǎo)致性能降低的代碼區(qū)域(塊204)。另選地,特征信息可以由基于硬件的特征提取器和(或)代碼檢查技術(shù)生成。在一個例子中,只有特定的塊被作為目標(biāo)(例如,占所有指令高速緩存未命中的前90%的塊)。
圖3中顯示了用于生成特征信息的示例流程300。優(yōu)選地,流程300用一個或者多個軟件程序來具體實現(xiàn),這些軟件程序保存在一個或多個存儲器上,并由一個或多個處理器按照公知的方式執(zhí)行。特征信息302通常由一個或多個機器和執(zhí)行檢查(execution pass)生成。在圖3中,流程300包括兩個編譯器執(zhí)行的檢查304、306,還包括一個通常由用戶(例如軟件編程人員)啟動的測試運行308。在第一個檢查304期間,編譯器(例如圖6中的709)作為輸入接收需要編譯的源代碼310。編譯器接著生成對應(yīng)于源代碼310的機器二進制代碼312。除去用于源代碼310的指令的二進制代碼外,機器二進制代碼312還包括額外的二進制代碼,在機器代碼312運行期間,該額外代碼可使統(tǒng)計信息被收集和保存在特征信息302和調(diào)用圖314中。當(dāng)用戶啟動機器二進制代碼312的測試運行308時,就會生成特征302和調(diào)用圖314。在正常的編譯檢查306期間,采用特征302作為編譯器的輸入,同時生成了二進制代碼文件。例如,在標(biāo)準的編譯器檢查306期間,特征信息302可為編譯器使用,以有助于諸如預(yù)測分支預(yù)報(speculative branch prediction)之類的性能增強。
檢查304、306和測試運行308中的每一個對于方法300都是可選的。本領(lǐng)域內(nèi)的熟練人員都將明白,任何生成由特征302表示的信息的方法都可采用,圖3中所顯示的動作304、306和308僅為示例目的而提供。本領(lǐng)域內(nèi)的熟練人員還將明白,這里所述的方法300可在一個另選的實施例中應(yīng)用于一個二進制文件。即,可以為一個二進制文件而非一個高級的源代碼文件生成特征302,也可以采用這樣的基于二進制的特征作為輸入來進行特征分析。
返回到圖2中,一旦讀取了特征信息,流程200就為識別出的代碼區(qū)域確定了多個潛在的種子-目標(biāo)對108、104(塊206)。在一個例子中,為識別出的代碼區(qū)域確定多個潛在的種子-目標(biāo)對108、104包括與每個潛在的種子-目標(biāo)對108、104相關(guān)聯(lián)的“到達概率“的確定。馬爾可夫模型中兩個狀態(tài)x和y之間的“到達概率”RP(x,y)可以在形式上定義為,給定當(dāng)前狀態(tài)為x,在將來的某個時刻遇到狀態(tài)y的概率。如果從x到y(tǒng)的到達概率超過一個給定的閾值(例如95%),點y就被稱作是點x的“控制準獨立”點。
(過程內(nèi)的)到達概率可以通過用過渡概率標(biāo)注一給定過程的馬爾可夫模型中的所有過渡來確定。當(dāng)x≠y時,在計算路徑表示之前首先將離開y的邊沿的概率設(shè)為零,來對RP(x,y)進行計算。
給定路徑表示R1和R2,二者概率分別為p和q,下面要用的運算符解釋如下,其中方括號表示所包括的路徑表示的值。
級聯(lián)[R1·R2]=pq并 [R1∪R2]=p+q閉包[R1*]=11-p]]>當(dāng)計算到達概率時,空集(即,“沒有路徑存在”)被解釋為零,而空串Λ(即,表示從一個節(jié)點到其自身的不包括控制流邊沿而只包括基礎(chǔ)塊自身的無效路徑(trivial path)的集合)被解釋為1。這里所述的公式對于x和y之間的任何特殊路徑的概率在所有路徑上進行求和計算。
注意,忽略有限精度運算的限制,如果用于定義邊沿概率的特征信息表示一個具有明確的退出塊的真實程序執(zhí)行的分支特征,不會發(fā)生被0除的情況。(理論上,被零除表示存在一個無限循環(huán)。)本領(lǐng)域內(nèi)的熟練人員將明白,另一種方案是擴充用于計算中間結(jié)果以包括無窮大的數(shù)字系統(tǒng),以及定義0和無窮大相乘等于0。
圖4顯示了一個示例的控制流片斷。從塊a(402)到塊X(404)的到達概率的確定如下所述。
P(a,X)=A·((B·C∪D·E)·F)*·B[P(a,X)]=0.98·(11.0-(0.1(0.0‾)+0.90(1.0))·(0.999))·0.10≅0.97]]>當(dāng)x=y(tǒng)時,路徑表示P(x,x)是x和它自身之間只包括x作為終點的所有路徑的閉包。為了保持定義的連貫性,對于x=y(tǒng)的情形,閉包運算符的作用必須取消。這樣,從x到x的到達概率(即,從x出發(fā)并且返回x的概率)可采用下面的關(guān)系式來確定RP(x,x)=[P(x,x)]-1[P(x,x)]]]>注意,對于x≠y的情形,該到達概率的公式允許x在y之前出現(xiàn)多次。也可以這樣定義到達概率通過在計算P(x,y)之前,將進入x的邊沿的概率設(shè)為0,以便只包括那些x在每條路徑的開始出現(xiàn)的執(zhí)行結(jié)果。下面將采用這種最后到開始(last-to-first)到達概率RPLF(x,y)來計算后驗概率。
接下來,要考慮過程間到達概率。尤其是,假定y處于由包含x的過程調(diào)用的過程中,程序目前位于x處,假定包含該特殊實例x的過程調(diào)用返回之前必須到達y,考慮到達y的概率。這個到達概率可以通過把在自底向上遍歷包含y的過程和被x調(diào)用的過程之間的調(diào)用圖的過程中遇到的每個過程的入口到達y的概率相加來獲得。
對于每個訪問過的過程,表示用于該過程的馬爾可夫鏈的圖被添加了一個表示到達y的事件的附加狀態(tài)Q,并且對于每個表示一個基礎(chǔ)塊的狀態(tài)(該基礎(chǔ)塊對一個被調(diào)用的過程進行過程調(diào)用,而該被調(diào)用過程可以進而到達y),這樣的狀態(tài)將由兩個狀態(tài)取代。指向原始狀態(tài)的流入邊沿到達這兩個狀態(tài)中的第一個狀態(tài),流出邊沿則從新狀態(tài)中的第二個狀態(tài)發(fā)出。最后,這兩個狀態(tài)由一個概率為1減去從被調(diào)用者的入口到達y的概率的邊沿連接起來。第一狀態(tài)還被用一個邊沿連接到Q,該邊沿具有從被調(diào)用者的入口到達y的到達概率。接著,通過計算從入口狀態(tài)到新狀態(tài)的到達概率來確定從過程的入口到達y的概率。對于包含x的過程,將使用同樣的變換,所不同的是,不是計算從入口到Q的到達概率,而是計算從x到Q的到達概率。如果從x到y(tǒng)的遍歷包含遞歸,可以通過求解一組聯(lián)立方程來對上面概括的流程加以修改,其中通過用一個符號變量來表示到達y的概率來形成所述方程。
一旦確定了多個潛在的種子-目標(biāo)對108、104,就要進行一個或多個種子-目標(biāo)選擇計算208,以便選擇一個或多個種子-目標(biāo)對??稍诿總€種子-目標(biāo)對108、104上進行的一個計算是確定與每個潛在的種子-目標(biāo)對108、104相關(guān)聯(lián)的后驗概率(塊210)。給定當(dāng)前狀態(tài)是Y的情況下,在兩個狀態(tài)X和Y之間的后驗概率PPr(X|Y)可在形式上定義為自從狀態(tài)Y(如果存在)上次發(fā)生以來,先前訪問過狀態(tài)X的概率。選擇一個對于給定目標(biāo)具有低的后驗概率的種子點108是低效的,因為該種子點將只為目標(biāo)的少數(shù)發(fā)生觸發(fā)預(yù)取線程。因此,選擇既有高的后驗概率又有高的到達概率的種子點108就很有意義。
過程內(nèi)的后驗概率可以通過考慮關(guān)于時間反轉(zhuǎn)版的馬爾可夫鏈模型的最后到開始到達概率問題來計算。通過逆轉(zhuǎn)控制流邊沿,并且用前任領(lǐng)先后任的頻率,而非用后任跟隨前任的頻率來加以標(biāo)注,可以獲得時間反轉(zhuǎn)版的模型。對于x≠y的情形,從x到x的前任的邊沿,以及從y到y(tǒng)的后任的邊沿(指原始邊沿方向)被設(shè)置為零。
例如,考慮圖4中的控制流片斷。給定當(dāng)前塊是X(404)的情況下,塊a(402)被執(zhí)行的后驗概率通過計算下面的方程得到,其中將Cr設(shè)置為零,上標(biāo)r表示所關(guān)注的是與圖的反轉(zhuǎn)相關(guān)聯(lián)的邊沿標(biāo)注。
P(a,X)=Br·(Fr·(Cr·Br∪Er·Dr))*·Ar因此,[P(a,X)]=1.00·(11.0-(0.999)·(0.0‾(1.0)+1.0(0.9)))·0.001≅0.01]]>所以,在塊X的任何實例之前訪問塊a(402)的后驗概率大約是0.01。直觀上,這個結(jié)果可從以下觀察得出,即,每次進入循環(huán),塊X(404)大約執(zhí)行100次,所以,循環(huán)開始以后,任何時候我們看到塊X(404)時,其是第一個實例的概率大約是0.01。
另一個可以對每個種子-目標(biāo)對108、104進行的計算是,與每個潛在的種子-目標(biāo)對108、104相關(guān)聯(lián)的路徑長度的確定(塊212)。給定一系列分支結(jié)果,路徑長度是指令數(shù)的和,或者是執(zhí)行每個訪問到的基礎(chǔ)塊所花的時間長度的和(例如,指令數(shù)乘以每個基礎(chǔ)塊每條指令的周期(CPI),或許可以通過諸如IntelVtuneTM性能分析器(PerformanceAnalyzer)之類的基于采樣的特征提取工具采樣確定)。假定程序執(zhí)行是在兩個點x和y之間進行時,通過將一個元組與每個邊沿相關(guān)聯(lián)來估計期望路徑長度(或平均路徑長度)。元組中的第一個元素表示從前任分支到后任的概率,第二個元素表示前任的長度。類似地,對于路徑表示R1和R2,采用相關(guān)元組<p,X>和<q,Y>,這里,元組的第一個元素表示所有路徑的概率的和,而元組的第二個元素表示期望要執(zhí)行指令的數(shù)量。用于組合這些元組來計算路徑表示的規(guī)則是級聯(lián)[R1·R2]=<pq,X+Y>
并[R1∪R2]=<p+q,pX+qYp+q>]]>閉包[R1*]=<11-p,pX1-p>]]>例如,考慮圖4中的控制流片斷。將除去塊c(406)之外的每個塊的長度均設(shè)為10。對于塊c(406),對foo()的過程調(diào)用的期望路徑長度被包括在內(nèi)。假設(shè)該路徑長度為40,那么塊c(406)的總路徑長度就是50。然后,在首先設(shè)置與C相關(guān)聯(lián)的值為<0,10>后,通過采用上面給定的映射,計算下列路徑表示,可以得出從塊a(402)到塊X(404)的期望路徑長度。
P(a,X)=A·((B·C∪D·E)·F)*·B更詳細地,將有以下結(jié)果[B·C]=<0,20> =<0.9,60>=<0.9,60> =<0.8991,70>
注意,最終元組中的第一個元素是從塊a(402)到塊X(404)的到達概率。計算從入口塊到過程退出的期望路徑長度概括了一個過程調(diào)用的期望路徑長度。該過程的所有調(diào)用點都增加了這個值。
另一種可以對每個種子-目標(biāo)對108、104進行的計算是與每個潛在的種子-目標(biāo)對108、104相關(guān)聯(lián)的路徑長度方差的確定(塊214)。一個變量的統(tǒng)計方差是描述該變量偏離其平均值程度的一個量。既然程序在兩個點之間可以沿許多條路徑執(zhí)行,為了更加精確地量化一個種子-目標(biāo)對108、104的期望價值,能夠量化該方差是很有價值的。例如,當(dāng)在兩個種子點108之間進行選擇時,選擇一個具有較少平均松弛并且有較小方差的種子點108是有好處的,因為這樣做,有可能減少具有比平均松弛大的實例的相消性干擾。
經(jīng)過詳細的統(tǒng)計學(xué)推導(dǎo),可以得出以下用于路徑長度方差的映射 在上面的表格中,v和w表示分別由R1和R2概括的路徑的路徑長度方差(對于只包含一個單一邊沿的路徑表示,其值降為零);X和Y是由R1和R2概括的路徑的期望路徑長度;p和q是根據(jù)到達概率映射而計算得到的概率。如同到達概率和期望路徑長度的情形一樣,流出目標(biāo)的邊沿在映射計算前被設(shè)為具有零概率。
為了應(yīng)用這些映射,將一個三元組與每個邊沿相關(guān)聯(lián)。元組中的第一個元素表示從前任分支到后任的概率,第二個元素表示前任的長度,最后一個元素表示方差。類似地,路徑表示R1和R2分別與元組<p,X,v>和<q,Y,w>相關(guān)聯(lián)。和前面一樣,在路徑表示計算前,離開y的邊沿被設(shè)置為零概率。
另一個可以對每個種子-目標(biāo)對108、104進行的計算是確定與每個種子-目標(biāo)對108、104相關(guān)聯(lián)的“預(yù)取松弛”為正的估計概率(塊216)。對于一個給定的種子-目標(biāo)對108、104,并且假定助手線程112正確地遵循了主線程118到達目標(biāo)時所要遵循的控制流,“預(yù)取松弛”是從助手線程112發(fā)出指令預(yù)取時和主線程118試圖取相同的指令時之間的執(zhí)行周期的差。
指令i的一個特定實例(作為由在s生成的目標(biāo)為t的助手線程112的目標(biāo))的預(yù)取松弛,在該程序遵循一個特定的執(zhí)行路徑的情況下,可以用下面的表達式給出,式中d(x,y)是x和y之間的距離(根據(jù)所執(zhí)行的指令的數(shù)量來度量);o(s,t)表示在s處的線程生成(thread spawing)和用于t處的live-in預(yù)計算的開銷;CPIm(s,t)表示在s和t的特定實例間運行的主線程118每取一個指令的平均周期數(shù);CPIm(t,i)表示在t和i的特定實例間運行的主線程118每取一個指令的平均周期數(shù);CPIh(t,i)表示在t和i的特定實例間運行的助手線程112每取一個指令的平均周期數(shù)。
slack(i,s,t)=CPIm(s,t)·d(s,t)+(CPIm(t,i)-CPIh(t,i))·d(t,i)-o(s,t)如果具有正的預(yù)取松弛,由助手線程進行的給定指令預(yù)取可以降低主線程118中的目標(biāo)指令的取指等待時間。高效的預(yù)取通常可以增加主線程118中每個周期平均執(zhí)行的指令數(shù)(IPC),但不會增加助手線程112中每個周期平均執(zhí)行的指令數(shù)。結(jié)果,當(dāng)CPIh(t,i)保持恒定時,CPIm(t,i)將降低,這導(dǎo)致了一個上限值,該上限值限定了指令預(yù)取助手線程112可以在主線程118趕上它之前以多大的提前量運行。尤其是,當(dāng)滿足下面條件時,主線程118將趕上助手線程112d(t,i)=CPIm(s,t)·(d(s,t)-o(s,t))CPIh(t,i)-CPIm(t,i)]]>圖5給出了一個預(yù)取松弛的圖示。在圖5中,實線502表示主線程118的進度,點線504表示在由于線程創(chuàng)建和預(yù)計算114所致的開銷o(s,t)之后,指令預(yù)取助手線程112的進度。該圖顯示了一個特定指令i的松弛。當(dāng)主線程118趕上助手線程112時,助手線程112將停止提供有用的預(yù)取松弛。該點506是點線504和實線502相交之處。在上面的方程中計算得到的距離對應(yīng)于塊508的高度。
注意,對應(yīng)于助手線程112的兩個階段114、116的中綴片110(如圖1中所顯示),強烈依賴于種子108到目標(biāo)104的路徑長度。這是因為,增加種子點108和目標(biāo)點104之間的程序執(zhí)行量將增加操作的量,這些操作會潛在地影響在目標(biāo)點104之后,但在助手線程112結(jié)束點之前的分支結(jié)果。詳細考慮片容量(即,采用某種形式的程序分片)的一個替換方式是,假設(shè)增加種子108到目標(biāo)104的平均指令路徑長度是有益的,直至路徑長度超過某個由經(jīng)驗而定的到達主存儲器的等待時間的常數(shù)倍。
另一個可在每個種子-目標(biāo)對108、104上進行的計算是確定與每個種子-目標(biāo)對108、104相關(guān)聯(lián)的“期望路徑覆蓋區(qū)”(塊218)。路徑的指令存儲器覆蓋區(qū)是保存給定路徑上的所有指令所需的最小容量的指令存儲器,其中假定用完全相關(guān)聯(lián)存儲器結(jié)構(gòu)中的指令地址來保存指令。根據(jù)該定義,“期望路徑覆蓋區(qū)”是在程序中的兩個點之間遍歷時所用的平均指令存儲器覆蓋區(qū)。采用期望路徑覆蓋區(qū)作為種子-目標(biāo)對108、104選擇流程的一部分,有助于避免選擇永遠不會執(zhí)行有用指令預(yù)取的種子點108,因為這些種子點預(yù)取的指令可能在需要它們之前會被從指令高速緩存中驅(qū)除,或者已經(jīng)可能駐留在高速緩存中。
假設(shè)x和y位于同一過程中,并且忽略過程調(diào)用的影響,下面的方程顯示了x和y之間的期望存儲器覆蓋區(qū)。式中,Pr(p|x→y)是假定程序從x到y(tǒng)遍歷并且直到遍歷結(jié)束只進入y一次的條件下,路徑p被遵循的概率;f(p)是路徑p的指令存儲器覆蓋區(qū);σ(P0(x,y))是所有從x到y(tǒng)并且只在終點包括y的路徑的集合。
F(x,y)=Σp∈σ(P0(x,y))Pr(p|x→y)·f(p)]]>上式等價于 其中,size(v)是基礎(chǔ)塊v中的指令數(shù),RPβ(x,y)定義如下 RPα(x,v|⫬y)]]>表示,假定沒有路徑經(jīng)過y的情況下,從x到v的到達概率,定義如下 這個值可以通過前面所顯示的正常到達概率的計算方法計算得到,不同的是,從y出發(fā)的邊沿的概率被設(shè)為零(包括那些從v出發(fā)的邊沿,如同用于正常到達概率的計算那樣)。RPα(x,v|⫬y)]]>的值可以用RP(x,v)來近似,這可以加速種子-目標(biāo)選擇過程,代價是精度上的一些損失。
一個入口s被正好調(diào)用n次的過程h()的期望覆蓋區(qū)是 圖6中顯示了一個示例過程foo()600。在此例子中,過程600包括第一塊602、第二塊604和第三塊606。在從塊a(402)向塊X(404)遍歷時,在塊X只被訪問一次,并且給定塊c(406)至少被訪問一次的情況下,可以按照如下步驟來計算塊c(圖4中的406)的期望執(zhí)行頻率(即,塊c被執(zhí)行的次數(shù))。首先,注意此值是一個幾何隨機變量。這個幾何隨機變量根據(jù)給定程序執(zhí)行在塊c中開始的情況下,在到達塊X(404),或者經(jīng)過y410退出相關(guān)的區(qū)域之前,程序執(zhí)行再次訪問塊c(406)的概率來定義。這個概率p可以通過采用上面所給的到達概率映射,在首先將與流出塊X(404)的邊沿相關(guān)聯(lián)的概率設(shè)為零后,計算P0(c,c)來得到。
返回到圖2,可用上面所述的一個或多個計算方法來選擇種子-目標(biāo)對108、104(塊220)。在一個例子中,路徑長度(由塊212計算)和路徑長度方差(由塊214計算)可用于估計路徑長度落入一特定范圍的概率。接著可用此概率來確定預(yù)取松弛(由塊216計算)超過一特定周期數(shù)的概率。也可用此概率來確定在主線程118中一個給定的助手線程112可能結(jié)束以便釋放線程資源的點。這一計算對于確保及時預(yù)取是有用的,并且可用于確定在給定位置處的并發(fā)助手線程112的數(shù)量,從而降低由于沒有足夠的線程資源來生成另一個助手線程112而導(dǎo)致種子點108被忽略的概率。
對于一個給定的目標(biāo)t,可以通過計算一個指示種子點效率的度量值來選擇一組獨立的種子點。尤其是,一給定種子點s的value(s,t)可以作為下面幾個因子的乘積來計算1.第一個因子是種子s領(lǐng)先目標(biāo)t的可能性,用后驗概率PPr(s|t)來量化表示。
2.第二個因子是助手線程將要預(yù)取的高速緩存未命中的期望數(shù)。一種對此近似的方法是,通過采用主線程的每個指令的估計周期(CPI_m),助手線程的每個指令的估計周期(CPI_h),以及種子和目標(biāo)之間的平均路徑長度(M),結(jié)合路徑長度方差(V)來進行。下面提供了一個示例算法“postfix_size”,該算法假定種子-目標(biāo)路徑長度服從正態(tài)分布。

3.第三個因子是預(yù)取的指令在被使用前沒有被驅(qū)除的概率。一種近似計算該值的方法是采用從種子到目標(biāo)的期望路徑覆蓋區(qū)來進行

4.第四個因子是預(yù)取的指令尚未在高速緩存中的概率。一種近似計算該值的方法是使用從目標(biāo)到種子的期望路徑覆蓋區(qū)來進行 5.第五個因子是種子-目標(biāo)對不會在邏輯上導(dǎo)致在程序中的任何地方并發(fā)運行超過最大期望數(shù)的助手線程的概率。如果更新正在運行的助手線程的估計數(shù)量可以導(dǎo)致多于所允許的數(shù)量的線程在程序中的任何地方并發(fā)運行,可將該值估計為0;如果不是這樣,則估計為1。
為了弄清選定的助手線程的效果,對剩余的期望高速緩存未命中和在主程序中的每個塊處運行的助手線程的數(shù)保持了運行評估。這些評估影響了助手線程種子-目標(biāo)對的選擇,確保不選擇那些會使運行線程數(shù)超過最大允許數(shù)量的種子點,或者不選擇那些使用于其目標(biāo)區(qū)域的指令高速緩存未命中覆蓋的預(yù)設(shè)閾值水平被超過的種子點。
I型高速緩存覆蓋(I-cache coverage)可以通過計算一個用于給定種子-目標(biāo)對的助手線程預(yù)取一個給定塊的概率來確定。下面給出了這樣做的一個示例算法“update_icache_coverage”。
在程序中的每個點并發(fā)運行的助手線程的數(shù)量,可以通過計算用于一新選定的種子-目標(biāo)對的助手線程將仍從該種子點開始執(zhí)行一段給定距離,然后采用示例算法“update_max_helpers”更新先前的估計的概率來確定。


用于選擇目標(biāo)104的過程可以通過根據(jù)估計的殘余指令高速緩存未命中來排列塊然后選擇“最差的塊”來開始。對于最差的塊,通過檢查到達最差的塊的期望路徑長度小于一個閾值距離,且這種情況具有高后驗概率的前任,一組潛在的目標(biāo)就找到了。對于按照PPr(t|w)*M(t,w)(即,后驗概率和平均路徑長度)降序排列的每個目標(biāo)t,選擇那些RP(s,t)大于一個閾值(比如95%)的種子點sa(t)。通過在集合sa(t)中按照到t的期望路徑長度的降序排列,每次選擇一個種子點s,計算為該目標(biāo)選擇的種子點Sb(t)。如果種子點s被已經(jīng)在Sb(t)中的另一個具有更高值的種子點所隱含,則s被摒棄。如果s不隱含Sb(t)中的另一個種子,則將其添加到Sb(t)中。如果s隱含Sb(t)中的另一個種子r,并且具有較高值,那么把r從集合Sb(t)中去除。如果集合Sb(t)為空,考慮下一個預(yù)期的目標(biāo),直至找到一個非空的種子點集,或者該算法放棄查找以給定塊為目標(biāo)的助手線程112的嘗試。
例如,考慮圖4中的控制流圖片段。假設(shè)foo()具有圖6中所給的控制流圖,并且每個基礎(chǔ)塊的長度為10。在此例中,根據(jù)高速緩存特征提取,可知塊X(404)遭受了許多高速緩存未命中。用主程序?qū)⒁扇〗o定路徑的概率來標(biāo)注每個邊沿。問題是在這個圖中,何處是生成助手線程112來預(yù)取塊X(404)的最佳位置?首先要注意的事情是,所顯示的例子中的所有塊與塊X(404)是高度控制流相關(guān)的。例如,盡管從a(402)直接到X(404)的概率只是0.098,在離開區(qū)域前,沿著邊沿x(406)或y(408)中的一條,控制流從塊a(402)離開并至少到達X(404)一次的概率仍為0.971。即便如此,并不需要所有種子點108是同樣必要有效的。
有兩個因子可以區(qū)分概率種子點108和目標(biāo)點104之間的期望路徑長度,和在遍歷到塊X(404)的路徑之后,高速緩存未命中可能發(fā)生的概率。有意義的是由foo()600在導(dǎo)向塊X(404)的路徑上消耗的期望指令存儲器。如果foo()600和塊b(412)、c(406)和d(414)一起適配于指令高速緩存中,那么在塊a(402)處啟動塊X(404)的一個預(yù)取就很好,因為從塊a(402)到塊X(404)的期望路徑長度近似于九次循環(huán)迭代。另一方面,如果過程foo()600非常大,那么從任何塊直接以塊X(404)為目標(biāo)來生成助手線程112就沒有意義,因為在主線程118到達塊X(404)之前,由于從分支(416)過渡到塊(404)的概率較低,將要取出的指令幾乎必將被對foo()600的調(diào)用從高速緩存中驅(qū)除出去。另一方面,如果我們選擇在塊b(412)處開始執(zhí)行助手線程112,可以避免這個問題,因為在塊a(402)的結(jié)尾處對分支的評估將確定是否預(yù)取塊X(404)。
由于對foo()600的過程調(diào)用,從任意塊到塊X(404)所采取的路徑的指令存儲器覆蓋區(qū)超過高速緩存的容量具有很高的概率。結(jié)果,選定的是一個用于塊X(404)的前任的種子點108,而非用于塊X(404)的種子點108。以此方式,助手線程112的執(zhí)行決定是否預(yù)取塊X(404)。在這個例子中,實際上有兩個這樣的位置塊b(412)和塊d(414),二者都可能是具有到塊X(404)的較短的最小路徑長度的的前任,不過,b(412)更好,因為對于塊X(404)的任何給定實例,它有更多機會領(lǐng)先于目標(biāo)塊X(404)。可以通過計算在到達塊X(404)的情況下,已執(zhí)行塊了b(412)的后驗概率,并且將此結(jié)果與在到達塊X(404)的情況下,已執(zhí)行了塊d(414)的后驗概率來對比,將上述事實量化。不過,應(yīng)該選取能導(dǎo)致足夠的松弛以便有效預(yù)取塊X(404)中的指令的種子點108。如果塊d(414)相對較大,就可能有足夠的松弛來預(yù)取從塊d(414)的起點處開始的塊X(404)。
當(dāng)然,本領(lǐng)域內(nèi)具有普通技術(shù)水準的人很容易明白,也可以采用其他的選擇算法。例如,在決定一個或者多個種子-目標(biāo)對之前,可以挑選和(或)取消選擇多個種子-目標(biāo)點。此外,可以采用一個或多個以上類型的計算來在應(yīng)用程序中的合適位置處插入預(yù)取指令。例如,如果編譯器或者傳遞后(post-pass)工具確定一個具體的加載指令有可能錯過,可以用一個松弛計算(塊216)來幫助為預(yù)取指令確定一個好的位置。目前實際應(yīng)用的簡化推斷的一個示例是簡單地將從預(yù)期位置到加載指令的支配路徑上的塊的長度相加。不過,這里所揭示的系統(tǒng)可以考慮“弱支配”路徑來更精確地確定松弛,潛在地可以做出更好的預(yù)取指令位置的選擇。簡言之,可以使用到達概率計算(塊206)和(或)后驗概率計算(塊210)來改進這種選擇。
返回到圖2,一旦選定了一個種子-目標(biāo)對108、104,流程200將生成一個助手線程112(塊222),并將該助手線程112附加到軟件應(yīng)用程序中(塊224)。該助手線程112在選定的種子點108處開始啟動來預(yù)取軟件應(yīng)用程序的軟件指令。
圖7中顯示了可以實現(xiàn)上面描述的流程的計算機系統(tǒng)700的框圖。計算機系統(tǒng)700可以是個人計算機(PC)、個人數(shù)字助理(PDA)、互聯(lián)網(wǎng)設(shè)備、蜂窩電話,或者任何其他計算設(shè)備。在一個例子中,計算機系統(tǒng)700包括由電源703供電的主處理單元702。主處理單元702可以包括多處理器單元704,它通過系統(tǒng)互連706與一個主存儲器設(shè)備708和一個或多個接口電路710電氣耦聯(lián)了起來。在一個例子中,系統(tǒng)互連706是地址/數(shù)據(jù)總線。當(dāng)然,本領(lǐng)域內(nèi)具有普通技術(shù)水準的人很容易明白,也可以采用除去總線之外的互連來將多處理器單元704與主存儲器設(shè)備708連接起來。例如,可以采用一個或多個專用的線和(或)一個十字頭(crossbar)來將多處理器單元704與主存儲器設(shè)備708連接起來。
多處理器單元704可以是任何公知類型的處理器,例如IntelPentium微處理器系列、Intel Itanium微處理器系列,和(或)IntelXScale處理器系列的處理器。此外,多處理器704可以包括任何公知類型的高速緩沖存儲器,例如靜態(tài)隨機存取存儲器(SRAM)。主存儲器設(shè)備708可以包括動態(tài)隨機存取存儲器(DRAM)和(或)任何其他形式的隨機存取存儲器。例如,主存儲器設(shè)備708可以包括雙倍數(shù)據(jù)速率隨機存取存儲器(DDRAM)。主存儲器設(shè)備708也可以包括非易失存儲器。在一個例子中,主存儲器設(shè)備708保存了一個由多處理器單元704按照公知方式執(zhí)行的一個軟件程序。主存儲器設(shè)備708也可保存一個由多處理器704執(zhí)行的編譯器程序709。
接口電路710可以用任何公知類型的接口標(biāo)準(例如,以太網(wǎng)接口和(或)通用串行總線(USB)接口)來實現(xiàn)??梢詫⒁粋€或多個輸入設(shè)備712連接到接口電路710,以便向主處理單元702輸入數(shù)據(jù)和命令。例如,輸入設(shè)備712可以是鍵盤、鼠標(biāo)、觸摸屏、跟蹤板、跟蹤球、isopoint,和(或)語音識別系統(tǒng)。
通過一個或多個接口電路710,也可將一個或多個顯示器、打印機、揚聲器和(或)其他輸出設(shè)備714連接到主處理單元702上。顯示器714可以是陰極射線管(CRT)、液晶顯示器(LCD),或者任何其他類型的顯示器。顯示器714可以生成主處理單元702運行期間生成的數(shù)據(jù)的可視表示。可視表示可以包括用于人工輸入的提示符、計算值、檢測數(shù)據(jù)等。
計算機系統(tǒng)700還可以包括一個或多個存儲設(shè)備716。例如,計算機系統(tǒng)700可以包括一個或多個硬盤驅(qū)動器、光盤(CD)驅(qū)動器、數(shù)字多媒體光盤驅(qū)動器(DVD),和(或)其他的計算機介質(zhì)輸入/輸出(I/O)設(shè)備。
計算機系統(tǒng)700也可以通過和網(wǎng)絡(luò)718相連與其他設(shè)備交換數(shù)據(jù)。網(wǎng)絡(luò)連接可以是任何類型的網(wǎng)絡(luò)連接,例如以太網(wǎng)連接、數(shù)字用戶線(DSL)、電話線、同軸電纜等。網(wǎng)絡(luò)718可以是任何類型的網(wǎng)絡(luò),例如互聯(lián)網(wǎng)、電話網(wǎng)、電纜網(wǎng),和(或)無線網(wǎng)絡(luò)。
圖8中顯示了多處理器單元704的一個更加詳細的框圖。所顯示的多處理器704包括通過互連806電氣耦聯(lián)起來的一個或多個處理內(nèi)核802和一個或多個高速緩存804。處理器802和(或)高速緩存804經(jīng)由一個存儲器控制器808通過系統(tǒng)互連706與主存儲器708通信。
每個處理器802都可以用諸如Intel XScale處理器等任何類型的處理器來實現(xiàn)。每個高速緩存804都可以采用任何類型的存儲器,例如靜態(tài)隨機存取存儲器(SRAM)來構(gòu)建。互連706可以是任何類型的互連,例如總線、一個或多個專用線和(或)一個十字頭。多處理器704的每個組件可以在相同的芯片或者分立的芯片上。例如,主存儲器708可以位于一個分立芯片上。
盡管以上內(nèi)容揭示的是除去其他組件,包括在硬件上執(zhí)行的軟件的示例系統(tǒng),需要明白的是,這樣的系統(tǒng)僅僅是說明性的,不應(yīng)看作對本發(fā)明的限制。例如,可以預(yù)期,所揭示的硬件和軟件組件中的任一個或者全部可以只用專用硬件來實現(xiàn),也可以只用軟件來實現(xiàn),還可以只用固件來實現(xiàn),或者用硬件、固件與(或)軟件的某種結(jié)合來實現(xiàn)。
此外,雖然這里描述的是特定的設(shè)備,本專利所覆蓋的范圍卻不限于這些。相反,本專利將覆蓋無論是在文字上,還是根據(jù)等同原則,明確落入附加權(quán)利要求范圍內(nèi)的所有設(shè)備、方法和產(chǎn)品。
權(quán)利要求
1.一種用于生成預(yù)測助手線程的方法,該方法包括在主線程軟件指令中識別一代碼區(qū)域;選擇一種子-目標(biāo)對,該種子-目標(biāo)對包括一個在代碼區(qū)域之前的目標(biāo)點和一個在目標(biāo)點之前的種子點,種子-目標(biāo)對的選擇基于一種子-目標(biāo)選擇計算進行;生成助手線程軟件指令,以便在種子點啟動一個助手線程來預(yù)取主線程軟件指令的一個子集;以及將助手線程軟件指令附加到主線程軟件指令中。
2.根據(jù)權(quán)利要求1中所述的方法,其中所述的種子-目標(biāo)選擇計算包括計算與種子-目標(biāo)對相關(guān)聯(lián)的一個后驗概率。
3.根據(jù)權(quán)利要求2中所述的方法,其中所述的計算與種子-目標(biāo)對相關(guān)聯(lián)的一個后驗概率包括確定多個路徑概率。
4.根據(jù)權(quán)利要求1中所述的方法,其中所述的種子-目標(biāo)選擇計算包括計算在種子點和目標(biāo)點之間的期望路徑長度。
5.根據(jù)權(quán)利要求1中所述的方法,其中所述的種子-目標(biāo)選擇計算包括計算在種子點和目標(biāo)點之間的路徑長度方差。
6.根據(jù)權(quán)利要求1中所述的方法,其中所述的種子-目標(biāo)選擇計算包括計算與種子-目標(biāo)對相關(guān)聯(lián)的預(yù)取松弛。
7.根據(jù)權(quán)利要求6中所述的方法,其中所述的計算預(yù)取松弛包括確定由助手線程預(yù)取一條指令和由主線程嘗試取出該指令在執(zhí)行周期上的差異。
8.根據(jù)權(quán)利要求7中所述的方法,其中所述的種子-目標(biāo)選擇計算進一步包括計算在種子點和目標(biāo)點之間的期望路徑長度。
9.根據(jù)權(quán)利要求8中所述的方法,其中所述的種子-目標(biāo)選擇計算包括計算在種子點和目標(biāo)點之間的路徑長度方差。
10.根據(jù)權(quán)利要求1中所述的方法,其中所述的種子-目標(biāo)選擇計算包括計算一期望路徑覆蓋區(qū)。
11.根據(jù)權(quán)利要求10中所述的方法,其中所述的計算期望路徑覆蓋區(qū)包括計算保存沿著由主線程中的兩條指令定義的路徑上的多個指令所需的平均存儲器量。
12.根據(jù)權(quán)利要求1中所述的方法,進一步包括計算與種子-目標(biāo)對相關(guān)聯(lián)的到達概率。
13.根據(jù)權(quán)利要求12中所述的方法,其中所述的計算到達概率包括確定多個路徑概率的乘積。
14.根據(jù)權(quán)利要求1中所述的方法,其中所述的識別主線程軟件指令中的代碼區(qū)域包括讀取與主線程軟件指令相關(guān)聯(lián)的特征信息。
15.根據(jù)權(quán)利要求14中所述的方法,其中所述的讀取與主線程軟件指令相關(guān)聯(lián)的特征信息包括讀取與主線程軟件指令相關(guān)聯(lián)的特征信息,以便識別主線程軟件指令中由于指令高速緩存未命中導(dǎo)致性能損失的代碼區(qū)域。
16.根據(jù)權(quán)利要求1中所述的方法,其中所述的種子-目標(biāo)選擇計算是根據(jù)路徑表示映射進行的。
17.根據(jù)權(quán)利要求1中所述的方法,其中所述的選擇種子-目標(biāo)對包括取消選擇一個或多個其他種子-目標(biāo)對。
18.一種保存指令的機器可讀介質(zhì),指令被構(gòu)建得可以使機器識別主線程軟件指令中的代碼區(qū)域;選擇種子-目標(biāo)對,該種子-目標(biāo)對包括一個在代碼區(qū)域之前的目標(biāo)點和一個在目標(biāo)點之前的種子點,種子-目標(biāo)對的選擇基于一種子-目標(biāo)選擇計算進行;生成助手線程軟件指令,以便在種子點啟動一個助手線程來預(yù)取主線程軟件指令的一個子集;以及將助手線程軟件指令附加到主線程軟件指令中。
19.根據(jù)權(quán)利要求18中所述的機器可讀介質(zhì),其中所述的指令被構(gòu)建得使機器計算與種子-目標(biāo)對相關(guān)聯(lián)的后驗概率。
20.根據(jù)權(quán)利要求18中所述的機器可讀介質(zhì),其中所述的指令被構(gòu)建得使機器計算在種子點和目標(biāo)點之間的一個期望路徑長度。
21.根據(jù)權(quán)利要求18中所述的機器可讀介質(zhì),其中所述的指令被構(gòu)建得使機器計算在種子點和目標(biāo)點之間的路徑長度方差。
22.根據(jù)權(quán)利要求18中所述的機器可讀介質(zhì),其中所述的指令被構(gòu)建得使機器計算與種子-目標(biāo)對相關(guān)聯(lián)的預(yù)取松弛。
23.根據(jù)權(quán)利要求18中所述的機器可讀介質(zhì),其中所述的指令被構(gòu)建得使機器計算一期望路徑覆蓋區(qū)。
24.根據(jù)權(quán)利要求18中所述的機器可讀介質(zhì),其中所述的指令被構(gòu)建得編譯主線程。
25.根據(jù)權(quán)利要求24中所述的機器可讀介質(zhì),其中所述的由助手線程預(yù)取的主線程軟件指令的一個子集被構(gòu)建得由同步多線程(SMT)處理器上的空閑硬件資源來執(zhí)行。
26.根據(jù)權(quán)利要求18中所述的機器可讀介質(zhì),其中所述的種子-目標(biāo)選擇計算是根據(jù)路徑表示映射進行的。
27.一種計算機,包括處理器;可操作地與處理器耦聯(lián)的存儲器,該存儲器保存了一軟件工具和一應(yīng)用程序,該軟件工具可以使計算機識別應(yīng)用程序中的代碼區(qū)域;在應(yīng)用程序中選擇一種子-目標(biāo)對,該種子-目標(biāo)對包括一個在代碼區(qū)域之前的目標(biāo)點和一個在目標(biāo)點之前的種子點,種子-目標(biāo)對的選擇基于一種子-目標(biāo)選擇計算進行;生成助手線程指令,以便在種子點啟動一個助手線程來預(yù)取應(yīng)用程序的一個子集;以及將助手線程指令附加到應(yīng)用程序中。
28.根據(jù)權(quán)利要求27中所述的計算機,其中所述的軟件工具使計算機計算與種子-目標(biāo)對相關(guān)聯(lián)的后驗概率。
29.根據(jù)權(quán)利要求27中所述的計算機,其中所述的軟件工具使計算機計算在種子點和目標(biāo)點之間的期望路徑長度。
30.根據(jù)權(quán)利要求27中所述的計算機,其中所述的軟件工具使計算機計算在種子點和目標(biāo)點之間的路徑長度方差。
31.根據(jù)權(quán)利要求27中所述的計算機,其中所述的軟件工具使計算機計算與種子-目標(biāo)對相關(guān)聯(lián)的預(yù)取松弛。
32.根據(jù)權(quán)利要求27中所述的計算機,其中所述的軟件工具使計算機計算一期望路徑覆蓋區(qū)。
33.根據(jù)權(quán)利要求27中所述的計算機,其中所述的處理器包括一個同步多線程(SMT)處理器。
34.根據(jù)權(quán)利要求27中所述的計算機,其中所述的種子-目標(biāo)選擇計算是根據(jù)路徑表示映射進行的。
全文摘要
揭示了用于為高速緩存預(yù)取生成預(yù)測助手線程的方法和設(shè)備。所揭示的技術(shù)根據(jù)特征數(shù)據(jù)和一系列計算來選擇種子-目標(biāo)對。然后生成助手線程,以在選定的種子點啟動,以便為一個單一線程軟件應(yīng)用程序預(yù)取軟件指令(或數(shù)據(jù))。接著將生成的助手線程附加到單一線程軟件應(yīng)用程序中以創(chuàng)建一個多線程軟件應(yīng)用程序。
文檔編號G06F13/14GK1540507SQ03156069
公開日2004年10月27日 申請日期2003年8月29日 優(yōu)先權(quán)日2003年4月24日
發(fā)明者托·M·阿默迪特, 王宏, 沈中立, 佩爾·哈瑪隆德, 哈瑪隆德, 托 M 阿默迪特 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
大埔区| 民丰县| 瑞昌市| 壶关县| 临汾市| 邵阳县| 永定县| 兴城市| 巩留县| 沾化县| 子长县| 枣阳市| 永定县| 宁都县| 司法| 东至县| 湾仔区| 庆元县| 铁岭市| 长葛市| 普兰店市| 齐河县| 昌宁县| 永修县| 富蕴县| 成都市| 玉环县| 思南县| 宣化县| 山东省| 盐山县| 额尔古纳市| 竹溪县| 平潭县| 龙门县| 孟州市| 石屏县| 报价| 浦江县| 聂拉木县| 伊川县|