專(zhuān)利名稱(chēng):一種動(dòng)態(tài)多線(xiàn)程劃分方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,涉及一種推測(cè)多線(xiàn)程計(jì)算技術(shù),尤其是一種在程序 運(yùn)行時(shí)動(dòng)態(tài)地將程序劃分為多個(gè)推測(cè)線(xiàn)程的方法。
背景技術(shù):
為了將程序并行化以便利用不斷增長(zhǎng)的多核資源,編譯器需要對(duì)程序的源代碼進(jìn) 行復(fù)雜的分析。在進(jìn)行了一系列控制流分析和數(shù)據(jù)流分析之后,編譯器根據(jù)代碼間的依賴(lài) 關(guān)系將程序劃分為若干線(xiàn)程并產(chǎn)生出必要的同步操作來(lái)協(xié)調(diào)這些線(xiàn)程。盡管對(duì)那些使用數(shù)組、稠密矩陣進(jìn)行數(shù)值計(jì)算的規(guī)則程序取得了很好的效果,但 自動(dòng)并行編譯器對(duì)于涉及樹(shù)、圖等的非規(guī)則程序的并行化效果并不是很理想。這是因?yàn)樵?非規(guī)則程序中存在復(fù)雜的依賴(lài),傳統(tǒng)的自動(dòng)并行編譯器只能進(jìn)行最保守的劃分來(lái)保證劃分 后代碼的正確性。為了解決這個(gè)問(wèn)題,推測(cè)多線(xiàn)程技術(shù)作為一種很有希望的方法產(chǎn)生了。在這類(lèi)方 法中,并不要求劃分出來(lái)的線(xiàn)程之間絕對(duì)不存在依賴(lài),只要兩個(gè)線(xiàn)程的執(zhí)行可能不發(fā)生沖 突,就可以讓它們并行。為了保證程序的正確性,運(yùn)行時(shí)一旦發(fā)生依賴(lài)違規(guī),違反依賴(lài)的線(xiàn) 程以及它所造成的影響將被撤銷(xiāo)。如果運(yùn)行時(shí)并未發(fā)生依賴(lài)違規(guī),推測(cè)線(xiàn)程最終將提交它 的執(zhí)行成果。通過(guò)這種推測(cè)執(zhí)行和違規(guī)檢測(cè)相結(jié)合的方式,程序潛在的并行性得到了開(kāi)發(fā)。 引入推測(cè)多線(xiàn)程之后,自動(dòng)并行編譯器的壓力大大減輕。雖然推測(cè)多線(xiàn)程放寬了線(xiàn)程劃分的限制,使得那些原本僅僅是有可能的并行性也 能得以利用,但是對(duì)于推測(cè)多線(xiàn)程技術(shù)來(lái)說(shuō),劃分依然非常重要。一個(gè)不合理的劃分只會(huì)導(dǎo) 致推測(cè)線(xiàn)程大量撤銷(xiāo),不但浪費(fèi)系統(tǒng)資源,甚至還會(huì)導(dǎo)致開(kāi)銷(xiāo)劇增,從而抵消并行所獲得的 好處。所以如何劃分線(xiàn)程對(duì)于推測(cè)多線(xiàn)程系統(tǒng)仍然至關(guān)重要。在傳統(tǒng)的劃分方法中,由編譯器對(duì)程序進(jìn)行靜態(tài)的劃分。為了將程序劃分為多個(gè) 線(xiàn)程,編譯器需要了解程序在運(yùn)行時(shí)的行為特征,而此信息只有通過(guò)實(shí)際運(yùn)行才能獲得。程 序在運(yùn)行時(shí)的行為特征與程序在運(yùn)行過(guò)程中得到的輸入有著密切的關(guān)系,所以,為了獲取 關(guān)于程序在運(yùn)行時(shí)行為特征的信息,傳統(tǒng)方法使用樣本數(shù)據(jù)作為輸入來(lái)運(yùn)行程序,從而搜 集得到關(guān)于程序運(yùn)行時(shí)行為特征的信息以輔助編譯器決定如何把程序劃分為多個(gè)線(xiàn)程。傳 統(tǒng)做法的缺點(diǎn)在于,一旦運(yùn)行時(shí)的真實(shí)輸入與樣本輸入產(chǎn)生較大的偏差,按照樣本輸入收 集的信息做出的劃分就很難達(dá)到最佳效果。另一方面,傳統(tǒng)方法在劃分的時(shí)候主要依據(jù)程序的控制結(jié)構(gòu),但對(duì)于非規(guī)則程序 來(lái)說(shuō),并行性在控制結(jié)構(gòu)中暴露不足,因而可供開(kāi)發(fā)利用的并行機(jī)會(huì)較少,限制了系統(tǒng)的并 行度。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的缺點(diǎn),提供一種不依賴(lài)樣本輸入,能夠在 程序運(yùn)行的過(guò)程中,動(dòng)態(tài)地將程序劃分為多個(gè)線(xiàn)程的方法,該方法不依賴(lài)樣本輸入,能夠根據(jù)程序的運(yùn)行情況來(lái)實(shí)時(shí)地決定劃分方案,對(duì)不同輸入具有更好的適應(yīng)性。另外,本發(fā)明從 數(shù)據(jù)結(jié)構(gòu)而非控制結(jié)構(gòu)的角度出發(fā)來(lái)發(fā)掘程序中的并行性,能夠更好地利用非規(guī)則程序中 的并行性。本發(fā)明的目的是通過(guò)以下技術(shù)方案來(lái)解決的這種動(dòng)態(tài)多線(xiàn)程劃分方法如下使虛擬機(jī)加載用戶(hù)程序,并生成線(xiàn)程單元;由線(xiàn)程單元執(zhí)行用戶(hù)程序中的指令, 在執(zhí)行用戶(hù)程序過(guò)程中(1)當(dāng)遇到用戶(hù)程序要求產(chǎn)生新對(duì)象時(shí),給新對(duì)象分配線(xiàn)程單元; (2)當(dāng)遇到用戶(hù)程序中的方法調(diào)用時(shí),根據(jù)方法調(diào)用的目標(biāo)對(duì)象,將方法調(diào)用分派至目標(biāo)對(duì) 象所在的線(xiàn)程單元;(3)當(dāng)遇到用戶(hù)程序要求內(nèi)存訪(fǎng)問(wèn)時(shí),根據(jù)線(xiàn)程單元當(dāng)時(shí)所處的模式 決定內(nèi)存訪(fǎng)問(wèn)方式;以上分配的各個(gè)線(xiàn)程單元并行執(zhí)行分派給自己的方法調(diào)用,并且線(xiàn)程單元在獲得 非推測(cè)控制后對(duì)之前的推測(cè)執(zhí)行進(jìn)行驗(yàn)證,如果正確,就提交推測(cè)執(zhí)行的成果;否則,就丟 棄推測(cè)執(zhí)行的成果;所述的線(xiàn)程單元是具有獨(dú)立計(jì)算能力的執(zhí)行單元,線(xiàn)程單元有三種不同的工作模 式非推測(cè)模式、推測(cè)模式、返回值預(yù)測(cè)模式;虛擬機(jī)有一個(gè)或多個(gè)線(xiàn)程單元,但任何時(shí)刻 只有一個(gè)線(xiàn)程單元處在非推測(cè)模式。以上方法中,如果用戶(hù)程序產(chǎn)生新對(duì)象時(shí),該對(duì)象所屬的類(lèi)被用戶(hù)標(biāo)記為并行對(duì) 象,則虛擬機(jī)生成一個(gè)新的線(xiàn)程單元并分配給它;否則,把當(dāng)前線(xiàn)程單元分配給它。以上當(dāng)線(xiàn)程單元在推測(cè)模式下遇到方法調(diào)用時(shí),如果目標(biāo)對(duì)象就在本線(xiàn)程單元之 上,那么由本線(xiàn)程單元立即執(zhí)行該方法調(diào)用;如果方法調(diào)用的目標(biāo)對(duì)象位于其他線(xiàn)程單元, 則不執(zhí)行該方法調(diào)用,而是執(zhí)行與被調(diào)用方法對(duì)應(yīng)的返回值預(yù)測(cè)方法來(lái)獲得對(duì)方法調(diào)用返 回值的預(yù)測(cè)值,并將方法調(diào)用信息發(fā)送給目標(biāo)對(duì)象所在的線(xiàn)程單元。以上當(dāng)遇到用戶(hù)程序要求內(nèi)存訪(fǎng)問(wèn)時(shí),處在非推測(cè)模式下的線(xiàn)程單元的讀寫(xiě)操作 將直接進(jìn)行讀寫(xiě);處在推測(cè)模式下的線(xiàn)程單元的讀寫(xiě)操作被導(dǎo)向至多版本高速緩存;處在 返回值預(yù)測(cè)模式下的線(xiàn)程單元的讀寫(xiě)操作被導(dǎo)向至返回值預(yù)測(cè)緩存。上述發(fā)送給一個(gè)線(xiàn)程單元的方法調(diào)用信息組織在一個(gè)隊(duì)列中,線(xiàn)程單元按照隊(duì)列 中的順序依次執(zhí)行其中的方法調(diào)用;所述方法調(diào)用信息包括方法名稱(chēng)和方法參數(shù)。上述推測(cè)執(zhí)行的成果是指線(xiàn)程單元產(chǎn)生的狀態(tài)快照,或者當(dāng)前狀態(tài);當(dāng)線(xiàn)程單元 使用返回值的預(yù)測(cè)值之前,或者執(zhí)行分派給自己的方法調(diào)用之前,會(huì)對(duì)線(xiàn)程單元的當(dāng)前狀 態(tài)進(jìn)行快照,這些狀態(tài)快照按照產(chǎn)生的先后順序被組織在一個(gè)隊(duì)列中;快照與導(dǎo)致快照狀 態(tài)形成的方法調(diào)用或返回值預(yù)測(cè)值一一對(duì)應(yīng),如果將來(lái)返回值的預(yù)測(cè)值被驗(yàn)證是正確的, 或者方法調(diào)用信息被驗(yàn)證是正確的,這些狀態(tài)快照將按照順序一一提交,成為可見(jiàn)的系統(tǒng) 狀態(tài)。上述線(xiàn)程單元獲得非推測(cè)控制是指按照程序的順序語(yǔ)義線(xiàn)程單元得到控制。上述用戶(hù)程序?yàn)镴ava語(yǔ)言編寫(xiě)的程序。本發(fā)明具有以下有益效果1)通過(guò)使用本發(fā)明,能夠避免非規(guī)則程序的并行性在控制結(jié)構(gòu)中暴露不足從而難 以劃分線(xiàn)程的困難,通過(guò)以數(shù)據(jù)結(jié)構(gòu)之間的聯(lián)系緊密程度為依據(jù),在運(yùn)行時(shí)動(dòng)態(tài)地劃分線(xiàn) 程,能更好地發(fā)掘利用非規(guī)則程序中的并行性。
2)因?yàn)槭窃谶\(yùn)行時(shí)動(dòng)態(tài)地進(jìn)行線(xiàn)程劃分,而不依賴(lài)于事先設(shè)定的樣本輸入,所以 對(duì)于不同的輸入有較好的適應(yīng)性。3)因?yàn)楸痉ǖ膶?shí)現(xiàn)不要求特殊的硬件支持,所以能夠利用市場(chǎng)現(xiàn)有的多核系統(tǒng)。
圖1為給新產(chǎn)生的對(duì)象分配線(xiàn)程單元的流程圖;圖2為將方法調(diào)用分派至目標(biāo)對(duì)象所在線(xiàn)程單元的示意圖;圖3為根據(jù)線(xiàn)程單元當(dāng)時(shí)所處的模式?jīng)Q定內(nèi)存訪(fǎng)問(wèn)方式的示意圖;圖4為線(xiàn)程單元模式的狀態(tài)轉(zhuǎn)換圖;圖5為支持動(dòng)態(tài)多線(xiàn)程劃分的虛擬機(jī)的系統(tǒng)結(jié)構(gòu)示意圖;圖6為一個(gè)具體例子,展示將方法調(diào)用分派至目標(biāo)對(duì)象所在的線(xiàn)程單元,利用返 回值預(yù)測(cè)方法預(yù)測(cè)返回值以及驗(yàn)證提交的過(guò)程。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步詳細(xì)描述。所述是對(duì)本發(fā)明的解釋而不是限定。當(dāng)用戶(hù)需要運(yùn)行用戶(hù)程序時(shí),先使虛擬機(jī)加載用戶(hù)程序,并生成線(xiàn)程單元;由線(xiàn)程 單元執(zhí)行用戶(hù)程序中的指令。本發(fā)明提到的用戶(hù)程序均為Java語(yǔ)言編寫(xiě)的程序,在執(zhí)行用 戶(hù)程序過(guò)程中(1)當(dāng)遇到用戶(hù)程序要求產(chǎn)生新對(duì)象時(shí),給新對(duì)象分配線(xiàn)程單元。如果用戶(hù)程序產(chǎn) 生新對(duì)象時(shí),該對(duì)象所屬的類(lèi)被用戶(hù)標(biāo)記為并行對(duì)象,則虛擬機(jī)生成一個(gè)新的線(xiàn)程單元并 分配給它;否則,把當(dāng)前線(xiàn)程單元分配給它。具體參見(jiàn)圖1,給用戶(hù)程序中產(chǎn)生的新對(duì)象分 配線(xiàn)程單元的過(guò)程。new指令的執(zhí)行導(dǎo)致新對(duì)象產(chǎn)生,對(duì)象產(chǎn)生之后系統(tǒng)檢查該對(duì)象是否被 標(biāo)記為并行對(duì)象,這是通過(guò)檢查該對(duì)象所屬的類(lèi)是否帶有Java運(yùn)行時(shí)可見(jiàn)注釋OParallel 來(lái)判斷的。如果帶有OParallel注釋?zhuān)硎驹搶?duì)象為并行對(duì)象。如果對(duì)象被標(biāo)記為并行對(duì)象,那么將會(huì)為該對(duì)象分配新的線(xiàn)程單元,對(duì)象的元信 息中設(shè)有一字段用來(lái)記錄其所在的線(xiàn)程單元。如果新產(chǎn)生的對(duì)象并沒(méi)有被標(biāo)記為并行對(duì)象,那么執(zhí)行new指令的線(xiàn)程單元(即 當(dāng)前線(xiàn)程單元)將被分配給該對(duì)象,負(fù)責(zé)所有以后對(duì)該對(duì)象方法調(diào)用的執(zhí)行。該對(duì)象與線(xiàn) 程單元上的其他對(duì)象共享該線(xiàn)程單元,它們被視為一個(gè)整體,稱(chēng)作一個(gè)對(duì)象組。通過(guò)這種方式,程序運(yùn)行過(guò)程中產(chǎn)生的所有對(duì)象以用戶(hù)確定的并行對(duì)象為核心聚 集到若干不相交的集合中,完成了對(duì)對(duì)推測(cè)線(xiàn)程數(shù)據(jù)部分的劃分工作。(2)當(dāng)遇到用戶(hù)程序中的方法調(diào)用時(shí),根據(jù)方法調(diào)用的目標(biāo)對(duì)象,將方法調(diào)用分派 至目標(biāo)對(duì)象所在的線(xiàn)程單元。當(dāng)線(xiàn)程單元在推測(cè)模式下遇到方法調(diào)用時(shí),如果目標(biāo)對(duì)象就 在本線(xiàn)程單元之上,那么由本線(xiàn)程單元立即執(zhí)行該方法調(diào)用;如果方法調(diào)用的目標(biāo)對(duì)象位 于其他線(xiàn)程單元,則不執(zhí)行該方法調(diào)用,而是執(zhí)行與被調(diào)用方法對(duì)應(yīng)的返回值預(yù)測(cè)方法來(lái) 獲得對(duì)方法調(diào)用返回值的預(yù)測(cè)值,并將方法調(diào)用信息發(fā)送給目標(biāo)對(duì)象所在的線(xiàn)程單元。如圖2,如果目標(biāo)對(duì)象就在本線(xiàn)程單元之上,那么由本線(xiàn)程單元立即執(zhí)行方法調(diào) 用;如果方法調(diào)用的目標(biāo)對(duì)象位于其他線(xiàn)程單元,則不執(zhí)行該方法調(diào)用,而是執(zhí)行與被調(diào)用 方法對(duì)應(yīng)的返回值預(yù)測(cè)方法來(lái)獲得對(duì)方法調(diào)用返回值的預(yù)測(cè)值,并將方法調(diào)用信息發(fā)送給目標(biāo)對(duì)象所在的線(xiàn)程單元,方法調(diào)用信息包括方法名稱(chēng)和方法參數(shù)。(3)當(dāng)遇到用戶(hù)程序要求內(nèi)存訪(fǎng)問(wèn)時(shí),根據(jù)線(xiàn)程單元當(dāng)時(shí)所處的模式?jīng)Q定內(nèi)存訪(fǎng) 問(wèn)方式。具體參見(jiàn)圖3,當(dāng)遇到用戶(hù)程序要求內(nèi)存訪(fǎng)問(wèn)時(shí),處在非推測(cè)模式下的線(xiàn)程單元 的讀寫(xiě)操作將直接進(jìn)行讀寫(xiě);處在推測(cè)模式下的線(xiàn)程單元的讀寫(xiě)操作被導(dǎo)向多版本高速緩 存;處在返回值預(yù)測(cè)模式下的線(xiàn)程單元的讀寫(xiě)操作被導(dǎo)向返回值預(yù)測(cè)緩存。以上分配的各個(gè)線(xiàn)程單元并行執(zhí)行分派給自己的方法調(diào)用,并且線(xiàn)程單元獲得非 推測(cè)控制后對(duì)之前的推測(cè)執(zhí)行進(jìn)行驗(yàn)證,如果正確,就提交推測(cè)執(zhí)行的成果;否則,就丟棄 推測(cè)執(zhí)行的成果;推測(cè)執(zhí)行的成果是指線(xiàn)程單元產(chǎn)生的狀態(tài)快照,或者當(dāng)前狀態(tài);當(dāng)線(xiàn)程 單元使用返回值的預(yù)測(cè)值之前,或者執(zhí)行分派給自己的方法調(diào)用之前,會(huì)對(duì)線(xiàn)程單元的當(dāng) 前狀態(tài)進(jìn)行快照,這些狀態(tài)快照按照產(chǎn)生的先后順序被組織在一個(gè)隊(duì)列中;快照與導(dǎo)致快 照狀態(tài)形成的方法調(diào)用或返回值預(yù)測(cè)值一一對(duì)應(yīng),如果將來(lái)返回值的預(yù)測(cè)值被驗(yàn)證是正確 的,或者方法調(diào)用信息被驗(yàn)證是正確的,這些狀態(tài)快照將按照順序一一提交,成為可見(jiàn)的系 統(tǒng)狀態(tài)。以上線(xiàn)程單元獲得非推測(cè)控制是指按照程序的順序語(yǔ)義線(xiàn)程單元得到控制。線(xiàn)程單元是具有獨(dú)立計(jì)算能力的執(zhí)行單元,線(xiàn)程單元有三種不同的工作模式非 推測(cè)模式、推測(cè)模式、返回值預(yù)測(cè)模式;虛擬機(jī)有一個(gè)或多個(gè)線(xiàn)程單元,但任何時(shí)刻只有一 個(gè)線(xiàn)程單元處在非推測(cè)模式。線(xiàn)程單元獲得非推測(cè)控制是指按照程序的順序語(yǔ)義線(xiàn)程單元得到控制;推測(cè)執(zhí)行 的成果是指線(xiàn)程單元產(chǎn)生的狀態(tài)快照,或者當(dāng)前狀態(tài)。參見(jiàn)圖4,反映線(xiàn)程單元模式變化的狀態(tài)轉(zhuǎn)換圖。在線(xiàn)程的生命期中,線(xiàn)程單元始 終在推測(cè)模式、非推測(cè)模式兩種模式間交替變化。時(shí)而處于推測(cè)模式,時(shí)而處于非推測(cè)模 式。在這個(gè)過(guò)程中線(xiàn)程會(huì)驗(yàn)證、提交多次。當(dāng)線(xiàn)程單元得到非推測(cè)控制,進(jìn)入非推測(cè)模式后,驗(yàn)證過(guò)程開(kāi)始,檢查之前是否在 一個(gè)正確的消息基礎(chǔ)上執(zhí)行。如果推測(cè)消息被驗(yàn)證是正確的,線(xiàn)程單元就提交處理該推測(cè) 消息所產(chǎn)生的狀態(tài)快照,然后在非推測(cè)狀態(tài)下繼續(xù)執(zhí)行。如果推測(cè)消息被驗(yàn)證是錯(cuò)誤的,該 消息后推測(cè)執(zhí)行所產(chǎn)生的尚未提交的狀態(tài)快照就都被丟棄,然后從收到非推測(cè)消息處繼續(xù) 非推測(cè)執(zhí)行。驗(yàn)證錯(cuò)誤不會(huì)導(dǎo)致線(xiàn)程被撤銷(xiāo),只導(dǎo)致所有尚未提交的狀態(tài)快照被丟棄。具體地說(shuō),當(dāng)碰到invoke指令,即方法調(diào)用指令時(shí),如果當(dāng)前線(xiàn)程單元處在非推 測(cè)模式,就把非推測(cè)控制交給目標(biāo)對(duì)象所在的線(xiàn)程單元,然后當(dāng)前線(xiàn)程單元轉(zhuǎn)入推測(cè)模式, 執(zhí)行方法對(duì)應(yīng)的返回值預(yù)測(cè)方法得到預(yù)測(cè)的返回值,然后繼續(xù)推測(cè)執(zhí)行。當(dāng)碰到invoke指 令時(shí),如果當(dāng)前線(xiàn)程處在推測(cè)狀態(tài),則執(zhí)行方法對(duì)應(yīng)的返回值預(yù)測(cè)方法,同時(shí)給目標(biāo)對(duì)象所 在的線(xiàn)程單元中添加一條代表invoke的推測(cè)消息。當(dāng)碰到return指令時(shí),如果當(dāng)前線(xiàn)程 單元處在非推測(cè)模式,就把非推測(cè)控制交給目標(biāo)對(duì)象所在的線(xiàn)程單元,然后轉(zhuǎn)入推測(cè)模式, 從推測(cè)消息隊(duì)列中取得下一條推測(cè)消息進(jìn)行處理。當(dāng)碰到return指令時(shí),如果當(dāng)前線(xiàn)程單 元處在推測(cè)模式,就從推測(cè)消息隊(duì)列中取得下一條推測(cè)消息進(jìn)行處理。如果沒(méi)有消息可以 處理時(shí),線(xiàn)程單元進(jìn)入等待狀態(tài)。圖5是支持動(dòng)態(tài)多線(xiàn)程劃分的虛擬機(jī)的系統(tǒng)結(jié)構(gòu)示意圖。虛擬機(jī)有一個(gè)或多個(gè)線(xiàn)程單元,線(xiàn)程單元是具有獨(dú)立計(jì)算能力的執(zhí)行單元。虛擬 機(jī)在運(yùn)行過(guò)程中動(dòng)態(tài)地把對(duì)象映射到相應(yīng)的線(xiàn)程單元上,此后該對(duì)象的所有操作就由該線(xiàn) 程單元負(fù)責(zé)執(zhí)行。
發(fā)送給一個(gè)線(xiàn)程單元的方法調(diào)用信息被組織在一個(gè)隊(duì)列中,線(xiàn)程單元按照隊(duì)列中 的順序依次執(zhí)行其中的方法調(diào)用,所述方法調(diào)用信息包括方法名稱(chēng)和方法參數(shù)。當(dāng)線(xiàn)程單 元使用返回值的預(yù)測(cè)值之前,或者執(zhí)行分派給自己的方法調(diào)用之前,會(huì)對(duì)線(xiàn)程單元的當(dāng)前 狀態(tài)進(jìn)行快照,這些狀態(tài)快照按照產(chǎn)生的先后順序被組織在一個(gè)隊(duì)列中;快照與導(dǎo)致快照 狀態(tài)形成的方法調(diào)用或返回值預(yù)測(cè)值一一對(duì)應(yīng),如果將來(lái)返回值的預(yù)測(cè)值被驗(yàn)證是正確 的,或者方法調(diào)用信息被驗(yàn)證是正確的,這些狀態(tài)快照將按照順序一一提交,成為可見(jiàn)的系 統(tǒng)狀態(tài)。為了支持推測(cè)狀態(tài)的保存、返回值的預(yù)測(cè),以及維護(hù)分派至本線(xiàn)程單元的方法調(diào) 用、產(chǎn)生的狀態(tài)快照、與狀態(tài)快照對(duì)應(yīng)的需要驗(yàn)證的方法調(diào)用信息和返回值預(yù)測(cè)值之間的 關(guān)系,如圖5所示,每個(gè)線(xiàn)程單元都設(shè)置有一個(gè)多版本高速緩存和一個(gè)返回值預(yù)測(cè)緩存以 及三個(gè)隊(duì)列推測(cè)消息隊(duì)列、待驗(yàn)證消息隊(duì)列、待提交狀態(tài)隊(duì)列。推測(cè)消息隊(duì)列用來(lái)接收其他線(xiàn)程單元在推測(cè)模式下發(fā)送給本線(xiàn)程的推測(cè)性的異 步消息(即方法調(diào)用信息和返回值預(yù)測(cè)值)。待驗(yàn)證消息隊(duì)列記錄本線(xiàn)程已經(jīng)處理過(guò)的來(lái) 自其它線(xiàn)程的推測(cè)性的異步消息。待提交狀態(tài)隊(duì)列和多版本高速緩存配合,用來(lái)保存本線(xiàn) 程在處理來(lái)自其他線(xiàn)程的推測(cè)性的異步消息之后形成的狀態(tài)版本,即狀態(tài)快照。在推測(cè)模式下,線(xiàn)程單元從推測(cè)消息隊(duì)列中取出推測(cè)消息進(jìn)行處理,處理消息所 形成的狀態(tài)會(huì)進(jìn)入待提交狀態(tài)隊(duì)列,同時(shí)推測(cè)消息被放入待驗(yàn)證消息隊(duì)列等待將來(lái)驗(yàn)證。 將來(lái)當(dāng)待驗(yàn)證消息隊(duì)列中的待驗(yàn)證消息被驗(yàn)證是正確后,線(xiàn)程單元就會(huì)提交待提交狀態(tài)隊(duì) 列中對(duì)應(yīng)于該消息的狀態(tài)快照。返回值預(yù)測(cè)緩存用來(lái)在返回值預(yù)測(cè)方法的執(zhí)行過(guò)程中暫存中間計(jì)算結(jié)果。返回值 預(yù)測(cè)方法的目的僅僅是盡快得出對(duì)返回值的預(yù)測(cè)值,在此過(guò)程中產(chǎn)生的其他副作用不需要 保存,所以返回值預(yù)測(cè)緩存中的內(nèi)容在返回值預(yù)測(cè)方法執(zhí)行結(jié)束后即被丟棄。在順序語(yǔ)義下,對(duì)象間的消息傳遞是同步的。這意味在各個(gè)對(duì)象的計(jì)算之間存在 著先后次序即某種依賴(lài)關(guān)系。對(duì)象之間這種因?yàn)橄⑼ㄐ哦a(chǎn)生的依賴(lài)關(guān)系我們稱(chēng)之為消 息依賴(lài)。在本方法中,一般意義上線(xiàn)程間的數(shù)據(jù)依賴(lài)和控制依賴(lài)都可歸納為消息依賴(lài)。如 果兩個(gè)線(xiàn)程之間不存在消息依賴(lài),它們就可以并行執(zhí)行。否則,就需要同步。在存在消息依賴(lài)的情況下,通過(guò)對(duì)導(dǎo)致依賴(lài)的消息進(jìn)行推測(cè),可以做到推測(cè)并行。 通過(guò)對(duì)消息進(jìn)行推測(cè),線(xiàn)程間的同步通信變成了推測(cè)性的異步通信。異步通信的好處是消 息發(fā)送方和接收方的計(jì)算可以重疊,而無(wú)須等待對(duì)方。最后,通過(guò)用非推測(cè)性的同步消息對(duì) 推測(cè)性的異步消息進(jìn)行驗(yàn)證,可以保證推測(cè)執(zhí)行的正確性和并行執(zhí)行的確定性。線(xiàn)程間存在消息依賴(lài)會(huì)導(dǎo)致線(xiàn)程無(wú)法并行執(zhí)行。為了在存在消息依賴(lài)的情況下并 行執(zhí)行,需要對(duì)導(dǎo)致依賴(lài)的消息進(jìn)行推測(cè)。對(duì)象收到的消息按照可以分為兩類(lèi)1)主動(dòng)得到的消息retUrn ;2)被動(dòng)得到的 消息invoke ο不同類(lèi)型的消息通過(guò)不同的方式來(lái)推測(cè)。返回值預(yù)測(cè)方法用來(lái)對(duì)return消息的返回值進(jìn)行推測(cè)。在非推測(cè)和推測(cè)模式下, 當(dāng)線(xiàn)程單元遇到invoke指令時(shí),如果目標(biāo)對(duì)象位于其他線(xiàn)程單元中,將調(diào)用對(duì)應(yīng)的返回值 預(yù)測(cè)方法來(lái)推測(cè)被調(diào)方法的返回值。這個(gè)返回值連同使用該返回值的線(xiàn)程單元的當(dāng)前執(zhí)行 狀態(tài)一起構(gòu)成return消息的推測(cè)值。在推測(cè)模式下,當(dāng)線(xiàn)程單元遇到invoke指令,對(duì)應(yīng)的消息會(huì)被作為一條推測(cè)消息添加到目標(biāo)對(duì)象所在線(xiàn)程單元的推測(cè)消息隊(duì)列中。相應(yīng)地,在推測(cè)模式下,線(xiàn)程單元在遇到 return指令后會(huì)從推測(cè)消息隊(duì)列中取得下一個(gè)推測(cè)消息來(lái)處理。從推測(cè)消息隊(duì)列中取出的 推測(cè)消息就是對(duì)線(xiàn)程單元未來(lái)會(huì)收到的消息的推測(cè)。推測(cè)消息在推測(cè)消息隊(duì)列中的順序即 對(duì)未來(lái)可能收到消息的順序的推測(cè)。對(duì)消息的推測(cè)是線(xiàn)程單元收到消息后所進(jìn)行的推測(cè)性計(jì)算的基礎(chǔ)。如果消息推測(cè) 是正確的,那么線(xiàn)程單元在推測(cè)狀態(tài)下執(zhí)行產(chǎn)生的成果就是有效的,可以被提交。如果消息 推測(cè)是錯(cuò)誤的,那么在推測(cè)狀態(tài)下的執(zhí)行就是基于錯(cuò)誤的假設(shè),執(zhí)行成果必須被丟棄。當(dāng)線(xiàn)程單元得到非推測(cè)控制后,它對(duì)自己之前的推測(cè)執(zhí)行所依賴(lài)的消息進(jìn)行驗(yàn) 證。線(xiàn)程單元從待驗(yàn)證消息隊(duì)列中取出一條待驗(yàn)證消息(這是一條推測(cè)性的異步消息),將 其與收到的非推測(cè)的同步消息對(duì)比。如果相同,說(shuō)明推測(cè)正確,線(xiàn)程單元就提交推測(cè)執(zhí)行的 成果,然后線(xiàn)程單元從提交之后的執(zhí)行狀態(tài)繼續(xù)非推測(cè)執(zhí)行。如果不同,說(shuō)明推測(cè)錯(cuò)誤,就 丟棄所有未提交的成果,然后根據(jù)非推測(cè)性的同步消息重新執(zhí)行。按照次序驗(yàn)證待驗(yàn)證消 息隊(duì)列中的消息保證了消息順序的正確性也是正確的。每個(gè)線(xiàn)程單元都有自己的多版本高速緩存。多版本高速緩存中維護(hù)著對(duì)象的當(dāng)前 版本號(hào)。每收到一個(gè)推測(cè)消息,在處理之前,該版本號(hào)都會(huì)加一。因?yàn)橥茰y(cè)線(xiàn)程不能影響系 統(tǒng)的可見(jiàn)狀態(tài),所以推測(cè)線(xiàn)程的讀寫(xiě)都發(fā)生在多版本高速緩存中。推測(cè)線(xiàn)程總是讀寫(xiě)多版 本高速緩存中最新版本的狀態(tài)。為了節(jié)省空間提高效率,多版高速緩存用增量的方式保存同一地址處不同版本的 數(shù)據(jù)。其方式類(lèi)似軟件開(kāi)發(fā)中用的版本控制系統(tǒng)。多版本高速緩存還提供提交推測(cè)版本到 非推測(cè)狀態(tài)的能力。版本的提交是按次序進(jìn)行的。即先提交版本i,然后提交版本i+Ι。不 會(huì)出現(xiàn)提交i之后越過(guò)i+Ι而提交i+2的情況。圖6的例子顯示了將方法調(diào)用分派到目標(biāo)對(duì)象所處的線(xiàn)程單元的過(guò)程,利用返回 值預(yù)測(cè)方法對(duì)方法調(diào)用的返回值進(jìn)行預(yù)測(cè),以及進(jìn)行驗(yàn)證的過(guò)程。左圖為用戶(hù)程序串行執(zhí) 行的序列圖,右圖為使用本方法在運(yùn)行時(shí)將同一程序劃分若干線(xiàn)程并行執(zhí)行的序列圖。在 圖6所示的例子中,線(xiàn)程單元TO因?yàn)檎{(diào)用B方法把非推測(cè)控制交給線(xiàn)程單元Tl。TO轉(zhuǎn)入 推測(cè)模式,執(zhí)行返回值預(yù)測(cè)方法得到對(duì)方法B返回值的預(yù)測(cè)值,然后繼續(xù)執(zhí)行下面的部分
C。B部分和C部分并行執(zhí)行。當(dāng)TO碰到對(duì)D方法的調(diào)用時(shí),執(zhí)行方法D對(duì)應(yīng)的返回值預(yù)測(cè) 方法來(lái)預(yù)測(cè)D方法的返回值,同時(shí)給Tl的推測(cè)消息隊(duì)列中添加代表方法D調(diào)用的推測(cè)消息
D。Tl執(zhí)行完B之后,因?yàn)榉椒ǚ祷兀逊峭茰y(cè)控制還給TO。TO進(jìn)入非推測(cè)狀態(tài),驗(yàn)證之前 返回值預(yù)測(cè)方法計(jì)算的返回值,如果正確就提交C部分執(zhí)行的結(jié)果,如果錯(cuò)誤就丟棄推測(cè) 執(zhí)行的成果然后從出錯(cuò)處用正確的返回值繼續(xù)執(zhí)行。與此同時(shí),Tl進(jìn)入推測(cè)模式,從推測(cè) 消息隊(duì)列中取出推測(cè)消息D進(jìn)行處理,繼續(xù)執(zhí)行下邊的D。TO遇到對(duì)D的調(diào)用,再次把非推 測(cè)控制交給Tl,Tl驗(yàn)證之前從推測(cè)消息隊(duì)列中取出的消息D,如果正確就提交D部分執(zhí)行 的結(jié)果,如果錯(cuò)誤就丟棄推測(cè)執(zhí)行的成果,然后從出錯(cuò)處開(kāi)始,重新處理消息D。從這個(gè)例子可以看到,A,C,E與B,D并行,而A,C,E之間串行,B, D之間串行。
權(quán)利要求
一種動(dòng)態(tài)多線(xiàn)程劃分方法,其特征在于使虛擬機(jī)加載用戶(hù)程序,并生成線(xiàn)程單元;由線(xiàn)程單元執(zhí)行用戶(hù)程序中的指令,在執(zhí)行用戶(hù)程序過(guò)程中(1)當(dāng)遇到用戶(hù)程序要求產(chǎn)生新對(duì)象時(shí),給新對(duì)象分配線(xiàn)程單元;(2)當(dāng)遇到用戶(hù)程序中的方法調(diào)用時(shí),根據(jù)方法調(diào)用的目標(biāo)對(duì)象,將方法調(diào)用分派至目標(biāo)對(duì)象所在的線(xiàn)程單元;(3)當(dāng)遇到用戶(hù)程序要求內(nèi)存訪(fǎng)問(wèn)時(shí),根據(jù)線(xiàn)程單元當(dāng)時(shí)所處的模式?jīng)Q定內(nèi)存訪(fǎng)問(wèn)方式;以上分配的各個(gè)線(xiàn)程單元并行執(zhí)行分派給自己的方法調(diào)用,并且線(xiàn)程單元在獲得非推測(cè)控制后對(duì)之前的推測(cè)執(zhí)行進(jìn)行驗(yàn)證,如果正確,就提交推測(cè)執(zhí)行的成果;否則,就丟棄推測(cè)執(zhí)行的成果;所述的線(xiàn)程單元是具有獨(dú)立計(jì)算能力的執(zhí)行單元,線(xiàn)程單元有三種不同的工作模式非推測(cè)模式、推測(cè)模式、返回值預(yù)測(cè)模式;虛擬機(jī)有一個(gè)或多個(gè)線(xiàn)程單元,但任何時(shí)刻只有一個(gè)線(xiàn)程單元處在非推測(cè)模式。
2.根據(jù)權(quán)利要求1所述的動(dòng)態(tài)多線(xiàn)程劃分方法,其特征在于,如果用戶(hù)程序產(chǎn)生新對(duì) 象時(shí),該對(duì)象所屬的類(lèi)被用戶(hù)標(biāo)記為并行對(duì)象,則虛擬機(jī)生成一個(gè)新的線(xiàn)程單元并分配給 它;否則,把當(dāng)前線(xiàn)程單元分配給它。
3.根據(jù)權(quán)利要求1所述的動(dòng)態(tài)多線(xiàn)程劃分方法,其特征在于,當(dāng)線(xiàn)程單元在推測(cè)模式 下遇到方法調(diào)用時(shí),如果目標(biāo)對(duì)象就在本線(xiàn)程單元之上,那么由本線(xiàn)程單元立即執(zhí)行該方 法調(diào)用;如果方法調(diào)用的目標(biāo)對(duì)象位于其他線(xiàn)程單元,則不執(zhí)行該方法調(diào)用,而是執(zhí)行與被 調(diào)用方法對(duì)應(yīng)的返回值預(yù)測(cè)方法來(lái)獲得對(duì)方法調(diào)用返回值的預(yù)測(cè)值,并將方法調(diào)用信息發(fā) 送給目標(biāo)對(duì)象所在的線(xiàn)程單元。
4.根據(jù)權(quán)利要求1所述的動(dòng)態(tài)多線(xiàn)程劃分方法,其特征在于,當(dāng)遇到用戶(hù)程序要求內(nèi) 存訪(fǎng)問(wèn)時(shí),處在非推測(cè)模式下的線(xiàn)程單元的讀寫(xiě)操作將直接進(jìn)行讀寫(xiě);處在推測(cè)模式下的 線(xiàn)程單元的讀寫(xiě)操作被導(dǎo)向至多版本高速緩存;處在返回值預(yù)測(cè)模式下的線(xiàn)程單元的讀寫(xiě) 操作被導(dǎo)向至返回值預(yù)測(cè)緩存。
5.根據(jù)權(quán)利要求1或3所述的動(dòng)態(tài)多線(xiàn)程劃分方法,其特征在于,發(fā)送給一個(gè)線(xiàn)程單 元的方法調(diào)用信息組織在一個(gè)隊(duì)列中,線(xiàn)程單元按照隊(duì)列中的順序依次執(zhí)行其中的方法調(diào) 用;所述方法調(diào)用信息包括方法名稱(chēng)和方法參數(shù)。
6.根據(jù)權(quán)利要求1所述的動(dòng)態(tài)多線(xiàn)程劃分方法,其特征在于,推測(cè)執(zhí)行的成果是指線(xiàn) 程單元產(chǎn)生的狀態(tài)快照,或者當(dāng)前狀態(tài);當(dāng)線(xiàn)程單元使用返回值的預(yù)測(cè)值之前,或者執(zhí)行分 派給自己的方法調(diào)用之前,會(huì)對(duì)線(xiàn)程單元的當(dāng)前狀態(tài)進(jìn)行快照,這些狀態(tài)快照按照產(chǎn)生的 先后順序被組織在一個(gè)隊(duì)列中;快照與導(dǎo)致快照狀態(tài)形成的方法調(diào)用或返回值預(yù)測(cè)值一一 對(duì)應(yīng),如果將來(lái)返回值的預(yù)測(cè)值被驗(yàn)證是正確的,或者方法調(diào)用信息被驗(yàn)證是正確的,這些 狀態(tài)快照將按照順序一一提交,成為可見(jiàn)的系統(tǒng)狀態(tài)。
7.根據(jù)權(quán)利要求1所述的動(dòng)態(tài)多線(xiàn)程劃分方法,其特征在于,線(xiàn)程單元獲得非推測(cè)控 制是指按照程序的順序語(yǔ)義線(xiàn)程單元得到控制。
8.根據(jù)權(quán)利要求1所述的動(dòng)態(tài)多線(xiàn)程劃分方法,其特征在于,所述用戶(hù)程序?yàn)镴ava語(yǔ) 言編寫(xiě)的程序。
全文摘要
本發(fā)明公開(kāi)了一種動(dòng)態(tài)多線(xiàn)程劃分方法,該方法使虛擬機(jī)加載用戶(hù)程序,并生成線(xiàn)程單元;由線(xiàn)程單元執(zhí)行用戶(hù)程序中的指令,在執(zhí)行用戶(hù)程序過(guò)程中當(dāng)遇到用戶(hù)程序要求產(chǎn)生新對(duì)象時(shí),給新對(duì)象分配線(xiàn)程單元;當(dāng)遇到用戶(hù)程序中的方法調(diào)用時(shí),根據(jù)方法調(diào)用的目標(biāo)對(duì)象,將方法調(diào)用分派到目標(biāo)對(duì)象所在的線(xiàn)程單元;當(dāng)遇到用戶(hù)程序要求內(nèi)存訪(fǎng)問(wèn)時(shí),根據(jù)線(xiàn)程單元當(dāng)時(shí)所處的模式?jīng)Q定內(nèi)存訪(fǎng)問(wèn)方式。本發(fā)明不依賴(lài)樣本輸入,能夠根據(jù)程序的運(yùn)行情況來(lái)實(shí)時(shí)地決定劃分方案,對(duì)不同輸入具有更好的適應(yīng)性。
文檔編號(hào)G06F9/38GK101923460SQ20101023048
公開(kāi)日2010年12月22日 申請(qǐng)日期2010年7月19日 優(yōu)先權(quán)日2010年7月19日
發(fā)明者李遠(yuǎn)成, 杜延寧, 趙銀亮, 韓博 申請(qǐng)人:西安交通大學(xué)