一種基于機(jī)器學(xué)習(xí)的推測(cè)多線程劃分方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,涉及一種推測(cè)多線程技術(shù),特別涉及一種基于機(jī)器 學(xué)習(xí)的推測(cè)多線程劃分方法。
【背景技術(shù)】
[0002] 隨著指令級(jí)并行遇到越來越多的瓶頸和片上多處理器的迅速發(fā)展,如何更加有效 的利用核資源成為當(dāng)前研究熱點(diǎn),推測(cè)多線程作為一種線程級(jí)并行技術(shù)得到迅速發(fā)展。特 別是針對(duì)使用基于指針的數(shù)據(jù)結(jié)構(gòu)如圖和樹等進(jìn)行處理的非規(guī)則程序,其存在大量的只有 在執(zhí)行時(shí)才能確定的模糊數(shù)據(jù)依賴關(guān)系,而線程級(jí)推測(cè)并行在允許存在控制和數(shù)據(jù)依賴的 情況下,通過并行編譯器將非規(guī)則串行程序分解為多個(gè)線程單元,在執(zhí)行時(shí)將其依次分別 分配給空閑的處理器核單元來并行執(zhí)行,而程序并行執(zhí)行的正確性則由底層的硬件根據(jù)相 應(yīng)的執(zhí)行模型來保證。線程級(jí)推測(cè)技術(shù)擺脫了傳統(tǒng)并行化方法不能有效消解模糊數(shù)據(jù)依賴 關(guān)系的局限,從而在并行化非規(guī)則程序方面展現(xiàn)出好的應(yīng)用前景。
[0003] 在線程級(jí)推測(cè)執(zhí)行過程中,串行程序被劃分為多個(gè)推測(cè)線程并行執(zhí)行,每個(gè)線程 分別執(zhí)行程序的不同部分,并嚴(yán)格按照串行語義順序執(zhí)行。推測(cè)多線程程序的執(zhí)行時(shí),有 且僅有一個(gè)線程為確定線程,該線程可以提交其執(zhí)行結(jié)果,而其他線程均為推測(cè)線程,線程 間以前驅(qū)后繼的形式保持串行程序的語義。每個(gè)推測(cè)線程通過一對(duì)激發(fā)指令來標(biāo)識(shí),通過 引入預(yù)計(jì)算片段(Pre-computationSlice,P-slice)預(yù)測(cè)推測(cè)線程的live-ins變量(活 躍變量,被線程體使用但其值并非由該線程定義值)的值。一對(duì)激發(fā)指令由線程激發(fā)點(diǎn) (SpawningPoint,SP)和準(zhǔn)控制無關(guān)點(diǎn)(ControlQuasiIndependentPoint,CQIP),即新 線程的起始點(diǎn)構(gòu)成,當(dāng)程序執(zhí)行到SP點(diǎn)時(shí),若有空閑核資源,則分配線程到該處理器執(zhí)行; 當(dāng)確定線程執(zhí)行到CQIP點(diǎn)時(shí),將驗(yàn)證其直接后繼線程在P-slice產(chǎn)生的live-ins數(shù)據(jù),若 驗(yàn)證正確,則確定線程提交其執(zhí)行結(jié)果;若驗(yàn)證失敗,則撤銷此后繼推測(cè)線程及其所有推測(cè) 子線程,然后跳過P-slice片段,將該后繼線程作為確定線程來執(zhí)行。
[0004] 在推測(cè)多線程中如何合理地分解非規(guī)則串行程序?qū)τ谔岣呒铀俦扔泻艽蟮挠绊懀?傳統(tǒng)的線程劃分方法主要應(yīng)用啟發(fā)式規(guī)則,通過對(duì)線程粒度、數(shù)據(jù)依賴距離等加以選擇控 制來優(yōu)化程序的分解過程。其局限性在于不同的程序通常具有不同的結(jié)構(gòu)特征,而基于啟 發(fā)式規(guī)則的方法以一種單一的優(yōu)化方案來對(duì)所有程序進(jìn)行優(yōu)化,因此不能保證所有的非規(guī) 則程序均能獲得最優(yōu)的劃分。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明的目的在于克服上述現(xiàn)有應(yīng)用啟發(fā)式規(guī)則以一種單一的優(yōu)化方案來對(duì)所 有程序進(jìn)行優(yōu)化的局限性,提供一種基于機(jī)器學(xué)習(xí)的推測(cè)多線程劃分方法,該方法能夠依 據(jù)程序特征來優(yōu)化最優(yōu)劃分方案,對(duì)不同非規(guī)則程序具有更好的適應(yīng)性。
[0006] 為達(dá)到上述目的,本發(fā)明采用以下技術(shù)方案:
[0007] -種基于機(jī)器學(xué)習(xí)的推測(cè)多線程劃分方法,包括以下步驟:
[0008] 1)從非規(guī)則程序集中提取程序特征,并將提取的程序特征注釋到程序的控制流圖 CFG上,同時(shí)以數(shù)組結(jié)構(gòu)來存儲(chǔ)程序關(guān)鍵路徑上的基本塊,得到以帶注釋的圖聯(lián)合數(shù)組的方 式表達(dá)的程序集;
[0009] 2)基于SUIF編譯器構(gòu)造程序控制流圖CFG,并用程序剖析信息和結(jié)構(gòu)化分析方法 將構(gòu)造的程序控制流圖依次轉(zhuǎn)化為加權(quán)控制流圖WCFG和超級(jí)塊控制流圖SCFG,然后對(duì)程 序集分別進(jìn)行循環(huán)部分和非循環(huán)部分的線程劃分,得到由程序特征和最優(yōu)劃分方案構(gòu)成的 訓(xùn)練樣本集;
[0010] 3)提取待劃分非規(guī)則程序的特征,利用基于圖的相似性比較算法計(jì)算待劃分的非 規(guī)則程序特征與訓(xùn)練樣本集的程序特征的相似性,得到最相似的樣本程序,然后對(duì)最相似 的樣本程序的劃分閾值進(jìn)行加權(quán)計(jì)算,并將計(jì)算結(jié)果作為最優(yōu)劃分閾值應(yīng)用到待劃分非規(guī) 則程序中完成推測(cè)多線程劃分。
[0011] 所述步驟1)中依據(jù)影響程序加速比的因素從非規(guī)則程序集中提取程序特征,并 使用圖G和數(shù)組A聯(lián)合的數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)程序特征;其中影響程序加速比的因素包括線程 粒度、負(fù)載均衡、數(shù)據(jù)依賴以及控制依賴;提取的程序特征包括動(dòng)態(tài)指令數(shù)、循環(huán)概率、分支 概率、數(shù)據(jù)依賴數(shù)和數(shù)據(jù)依賴距離;圖G是帶注釋的控制流圖,圖G中的節(jié)點(diǎn)的屬性為動(dòng)態(tài) 指令數(shù),邊的屬性為由循環(huán)分支概率、數(shù)據(jù)依賴數(shù)、數(shù)據(jù)依賴距離組成的三元組;數(shù)組A中 的兀素4;表不關(guān)鍵路徑上的基本塊。
[0012] 所述步驟2)中在進(jìn)行循環(huán)部分的線程劃分時(shí),根據(jù)剖析器分析得到的迭代次數(shù)、 循環(huán)體大小以及循環(huán)體之間的數(shù)據(jù)依賴數(shù)來決定循環(huán)部分的劃分,只有當(dāng)激發(fā)下一次迭代 是盈利的,才將每個(gè)迭代指定為一個(gè)候選線程;并且在劃分循環(huán)部分時(shí),依據(jù)線程粒度和數(shù) 據(jù)依賴數(shù)將候選線程的激發(fā)點(diǎn)SP插入到循環(huán)體內(nèi),將準(zhǔn)控制無關(guān)點(diǎn)CQIP即候選線程的起 始點(diǎn)插入到循環(huán)分支指令前。
[0013] 判斷激發(fā)下一次迭代是盈利的標(biāo)準(zhǔn)為:循環(huán)體的線程粒度ThreadSizee[3, 32], 且迭代之間的數(shù)據(jù)依賴數(shù)DDCe[3, 9]。
[0014] 所述步驟2)中在進(jìn)行非循環(huán)部分的線程劃分時(shí),將當(dāng)前候選線程初始化為空,以 起始點(diǎn)作為當(dāng)前線程劃分的參考點(diǎn),獲得從起始點(diǎn)到最近一個(gè)后向支配節(jié)點(diǎn)的最可能路 徑,僅當(dāng)最可能路徑上所有基本塊的動(dòng)態(tài)指令數(shù)滿足經(jīng)驗(yàn)值設(shè)定的線程粒度閾值范圍條 件,并且與后繼待劃分部分的最優(yōu)依賴數(shù)小于經(jīng)驗(yàn)值設(shè)定的閾值時(shí),則獲得由最可能路徑 上的節(jié)點(diǎn)構(gòu)成的候選線程;若大于線程粒度上限,則將被進(jìn)一步劃分;若小于線程粒度下 限,則當(dāng)前起始點(diǎn)的最近后向支配節(jié)點(diǎn)不會(huì)激發(fā)新的線程,將最可能路徑上的節(jié)點(diǎn)加入到 當(dāng)前候選線程;每一步遞歸將當(dāng)前參考點(diǎn)的最近后向支配節(jié)點(diǎn)作為當(dāng)前候選線程的起始 點(diǎn),直到當(dāng)前非循環(huán)部分的結(jié)束節(jié)點(diǎn)結(jié)束為止。
[0015] 所述步驟2)中分別針對(duì)循環(huán)部分和非循環(huán)部分進(jìn)行線程劃分,得到程序的劃分 方案,然后對(duì)程序特征及其相應(yīng)的最優(yōu)劃分方案進(jìn)行聯(lián)合表達(dá),得到訓(xùn)練樣本集;其中劃分 方案表示為線程粒度上限、線程粒度下限、數(shù)據(jù)依賴數(shù)、激發(fā)距離上限和激發(fā)距離下限的五 維閾值組合,訓(xùn)練樣本T表示為(kV··,#),其中,表示第i個(gè)程序的程 序特征,表示第i個(gè)程序?qū)?yīng)的最優(yōu)劃分,N表示程序總個(gè)數(shù)。
[0016] 所述步驟3)中待劃分的非規(guī)則程序特征與訓(xùn)練樣本集的程序特征的相似性比較 方法為:分別提取待劃分的非規(guī)則程序和訓(xùn)練樣本集的程序在起始點(diǎn)和結(jié)束點(diǎn)之間的所有 路徑,比較二者所有路徑的相似性,加權(quán)累加后得到圖的相似性,具體計(jì)算公式如式(1)所 示:
[0018] 其中Κ-ΙG2)為圖G1和圖G2的相似性,wall^為圖G1的程序執(zhí)行路徑,walk丨 為圖G2 的程序執(zhí)行路徑,Kwalk(walki,walk)為walkJPwalk.j的相似性,Kwalk(walkG1,walkG2) 為圖G1和圖G2的關(guān)鍵路徑的相似性,p為權(quán)值參數(shù)。
[0019] 所述步驟3)中對(duì)最相似的樣本程序的劃分方案五維閾值進(jìn)行加權(quán)計(jì)算,獲得待 劃分非規(guī)則程序的最優(yōu)劃分閾值,計(jì)算公式如式(8)所示:
[0020]
[0021] 其中TH,表示第j個(gè)待求閾值,j= 1~5,e為歐拉數(shù),th表示距離待劃分過程 最近的第1個(gè)過程的第j個(gè)閾值,也^表示距離待劃分過程最近的第i個(gè)過程的第j個(gè)閾 值,參數(shù)c表示選取的最相似樣本數(shù);五維閾值為線程粒度上限、線程粒度下限、數(shù)據(jù)依賴 數(shù)、激發(fā)距離上限和激發(fā)距離下限。
[0022] 相對(duì)于現(xiàn)有技術(shù),本發(fā)明具有以下有益效果:
[0023] 本發(fā)明提供的基于機(jī)器學(xué)習(xí)的推測(cè)多線程劃分方法,克服了現(xiàn)有應(yīng)用啟發(fā)式規(guī)則 以一種單一的優(yōu)化方案來對(duì)所有程序進(jìn)行優(yōu)化的局限性。該方法通過對(duì)程序特征進(jìn)行分析 及表示,并分別對(duì)循環(huán)部分和非循環(huán)部分執(zhí)行不同的線程劃分策略以獲得由程序特征及其 最優(yōu)化分方案構(gòu)成的訓(xùn)練樣本集,從而通過將待劃分的非規(guī)則程序特征與訓(xùn)練樣本集的程 序特征進(jìn)行比較,應(yīng)用最相似的樣本程序的劃分方案對(duì)待劃分的非規(guī)則程序進(jìn)行推測(cè)多線 程劃分。本發(fā)明依據(jù)程序特征來比較待劃分的非規(guī)則程序與訓(xùn)練樣本集的程序的相似性, 將最相似樣本的劃分方案應(yīng)用到待劃的非規(guī)則分程序中,能夠依據(jù)程序特征來優(yōu)化最優(yōu)劃 分方案,對(duì)不同非規(guī)則程序具有更好的適應(yīng)性。本發(fā)明還具有以下優(yōu)點(diǎn):
[0024] 1)通過使用本發(fā)明提供的基于機(jī)器學(xué)習(xí)的推測(cè)多線程劃分方法,能夠避免像現(xiàn)有 的基于啟發(fā)式規(guī)則的方法那樣,以一種單一的優(yōu)化方案來對(duì)所有非規(guī)則程序進(jìn)行線程劃分 的局限性,本發(fā)明的基于機(jī)器學(xué)習(xí)的推測(cè)多線程劃分方法依據(jù)程序特征決定優(yōu)化的劃分方 案,對(duì)不同非規(guī)則程序具有更好的適應(yīng)性。
[0025] 2)本發(fā)明提供的基于機(jī)器學(xué)習(xí)的推測(cè)多線程劃分方法能夠?qū)趧?dòng)態(tài)數(shù)據(jù)結(jié)構(gòu) 的非規(guī)則程序進(jìn)行并行化處理,獲得較好的加速