專(zhuān)利名稱(chēng):一種前瞻多線程并行執(zhí)行優(yōu)化方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體地說(shuō)是涉及一種前瞻多線程并行執(zhí)行優(yōu)化方法。
背景技術(shù):
隨著計(jì)算機(jī)應(yīng)用的不斷深入,單片多核處理器(Chip Multi-Processors, CMP)技 術(shù)日益倍受關(guān)注。利用CMP技術(shù)提高系統(tǒng)性能的關(guān)鍵是充分發(fā)揮多個(gè)微處理器核心的并行 優(yōu)勢(shì)。串行程序雖易于設(shè)計(jì)和調(diào)試,卻難以利用CMP技術(shù)的并行特性;并行程序雖然能更多 獲益于CMP技術(shù),但并行編程對(duì)程序員能力要求較高。對(duì)于復(fù)雜的并行編程語(yǔ)言,程序員更 愿意使用傳統(tǒng)的串行程序,而且希望能盡可能地重用已開(kāi)發(fā)出的軟件。在這種情況下,串行 程序的并行化方法受到了廣泛的重視。串行程序并行化是指在保證程序語(yǔ)義不變的條件下,將串行程序劃分為若干 并行線程,利用并行線程來(lái)充分利用CMP技術(shù)并行的優(yōu)點(diǎn)。前瞻多線程(Speculative Multithreading)是串行程序充分利用CMP技術(shù)的關(guān)鍵,當(dāng)線程執(zhí)行所需參數(shù)在編譯階段 不確定的情況下,通過(guò)數(shù)據(jù)預(yù)取、數(shù)據(jù)推測(cè)等方法消除線程間的依賴(lài)關(guān)系,創(chuàng)建出能夠并行 執(zhí)行的前瞻線程。通過(guò)線程前瞻執(zhí)行和相應(yīng)的前瞻失效處理機(jī)制可以去除線程間的假依 賴(lài),發(fā)現(xiàn)并維護(hù)真依賴(lài),降低線程之間的依賴(lài)程度,提高線程之間的并行度。線程間的寫(xiě)后讀(Read After Write, RAW)數(shù)據(jù)依賴(lài)是指兩個(gè)線程之間存在對(duì)某 個(gè)或某幾個(gè)特定存儲(chǔ)空間或變量的寫(xiě)后讀依賴(lài),即后面一個(gè)線程要讀到前面一個(gè)線程所寫(xiě) 的數(shù)據(jù)。線程前瞻執(zhí)行雖然能在某種程度上提高并行執(zhí)行的效率,但是因?yàn)榍罢皥?zhí)行時(shí), 帶有寫(xiě)后讀數(shù)據(jù)依賴(lài)的線程會(huì)導(dǎo)致線程重啟,且重啟的時(shí)間開(kāi)銷(xiāo)和資源開(kāi)銷(xiāo)很大,也就是 說(shuō),對(duì)于有的線程,順序執(zhí)行的效率會(huì)比在多個(gè)核上并行執(zhí)行的效率更好。
發(fā)明內(nèi)容
針對(duì)上述現(xiàn)有技術(shù)存在的不足,本發(fā)明的目的是提供一種前瞻多線程并行執(zhí)行優(yōu) 化方法。該方法能減少多線程執(zhí)行時(shí)的寫(xiě)后讀數(shù)據(jù)依賴(lài)性沖突和不必要的線程間延遲等 待,提高串行程序在多核處理器上的執(zhí)行速度,提高處理器利用率。為達(dá)到上述目的,本發(fā)明的構(gòu)思是利用生產(chǎn)者距離和消費(fèi)者距離來(lái)量化兩個(gè)有 依賴(lài)關(guān)系的線程之間的依賴(lài)程度,并根據(jù)依賴(lài)程度有選擇性設(shè)計(jì)前瞻多線程并行執(zhí)行模 式。根據(jù)上述構(gòu)思,本發(fā)明采用下述技術(shù)方案一種前瞻多線程并行執(zhí)行優(yōu)化方法,其具體步驟如下(1)、對(duì)串行程序中覆蓋率較高和并行效率較高的循環(huán)部分和子函數(shù)部分,將循環(huán) 部分和子函數(shù)部分相應(yīng)的串行程序部分劃分為一個(gè)個(gè)的線程;(2)、判斷線程是否前瞻執(zhí)行,對(duì)于前瞻執(zhí)行的線程分析每一個(gè)線程和線程的直接 后續(xù)線程之間是否存在寫(xiě)后讀數(shù)據(jù)依賴(lài);
(3)、以設(shè)定的生產(chǎn)者距離R與消費(fèi)者距離P的比值R/P判斷并行線程之間的依賴(lài) 程度選擇線程是否前瞻執(zhí)行;(4)、線程前瞻執(zhí)行完后驗(yàn)證前瞻執(zhí)行結(jié)果。本發(fā)明的一種前瞻多線程并行執(zhí)行優(yōu)化方法與已有技術(shù)相比較,具有如下面顯而 易見(jiàn)的突出實(shí)質(zhì)性特點(diǎn)和顯著有點(diǎn)該方法能有效地減少線程并行執(zhí)行時(shí)的數(shù)據(jù)依賴(lài)沖突 和不必要的延遲等待;綜合考慮了串行程序中并行效率較高的循環(huán)部分和子函數(shù)部分,能 夠充分挖掘程序中的寫(xiě)后讀數(shù)據(jù)依賴(lài),充分利用線程級(jí)并行性,并通過(guò)線程間寫(xiě)后讀數(shù)據(jù) 依賴(lài)量化,有選擇地前瞻執(zhí)行,能提高單線程序在多核處理器上的執(zhí)行速度和處理器利用 率。
圖1是本發(fā)明的一種前瞻多線程并行執(zhí)行優(yōu)化方法的流程圖;圖2是圖1中所述的步驟(1)的流程圖;圖3是圖1中所述的步驟(2)的流程圖;圖4是圖1中所述的步驟(3)的流程圖;圖5是圖1中所述的步驟⑷的流程圖。
具體實(shí)施例方式本發(fā)明的一個(gè)優(yōu)選實(shí)施例結(jié)合附圖詳述如下本實(shí)施例所述方案的應(yīng)用環(huán)境是面向單片多核處理器的線程級(jí)并行執(zhí)行環(huán)境,本 實(shí)施例不限定所述技術(shù)方案應(yīng)用環(huán)境中多核處理器架構(gòu)。下面結(jié)合說(shuō)明書(shū)附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。在單片多核處理器平臺(tái)上,對(duì)串行程序,利用并行線程執(zhí)行中若出現(xiàn)數(shù)據(jù)依賴(lài)后 重啟,只影響程序執(zhí)行的效率,不影響程序執(zhí)行的結(jié)果的原理,針對(duì)串行程序中易于并行的 循環(huán)部分和子函數(shù)部分,設(shè)計(jì)并行線程執(zhí)行模型,利用生產(chǎn)者距離和消費(fèi)者距離來(lái)量化兩 個(gè)有依賴(lài)關(guān)系的線程之間的依賴(lài)程度,并根據(jù)依賴(lài)程度有選擇性設(shè)計(jì)前瞻多線程并行執(zhí)行 模式。寫(xiě)某一存儲(chǔ)空間或變量的線程稱(chēng)為生產(chǎn)者線程,讀某一存儲(chǔ)空間或變量的線程稱(chēng) 為消費(fèi)者線程。對(duì)某一個(gè)特定的寫(xiě)后讀數(shù)據(jù),只有生產(chǎn)者線程完成其寫(xiě)操作之后,消費(fèi)者線 程才可以執(zhí)行相應(yīng)的讀操作。前瞻多線程在CMP上是同時(shí)執(zhí)行的,為了保證多線程之間更 好地并行執(zhí)行,最小可能地發(fā)生數(shù)據(jù)依賴(lài)性沖突,利用生產(chǎn)者距離和消費(fèi)者距離來(lái)量化依 賴(lài)線程之間的數(shù)據(jù)依賴(lài)程度,以此來(lái)判斷何時(shí)需要前瞻并行,何時(shí)不需要前瞻并行,有針對(duì) 性地前瞻并行執(zhí)行串行程序,減少線程重新執(zhí)行的幾率,從而提高處理器的效率。如圖1所示,本發(fā)明的一種前瞻多線程并行執(zhí)行優(yōu)化方法,其步驟如下(1)對(duì)串行程序中覆蓋率較高和并行效率較高的循環(huán)部分和子函數(shù)部分,將循環(huán) 部分和子函數(shù)部分相應(yīng)的串行程序部分劃分為一個(gè)個(gè)的線程;(2)判斷線程是否前瞻執(zhí)行,對(duì)于前瞻執(zhí)行的線程分析每一個(gè)線程和線程的直接 后續(xù)線程之間是否存在寫(xiě)后讀數(shù)據(jù)依賴(lài);(3)以設(shè)定的生產(chǎn)者距離R與消費(fèi)者距離P的比值R/P量化線程和線程直接后續(xù)線程之間的數(shù)據(jù)依賴(lài)程度選擇線程是否前瞻執(zhí)行,依據(jù)不同的依賴(lài)程度采取不同執(zhí)行模 式,以此盡可能減少線程并行執(zhí)行帶來(lái)的沖突和前瞻執(zhí)行后重啟;(4)線程前瞻執(zhí)行完后驗(yàn)證前瞻執(zhí)行結(jié)果。上述步驟(1)所述的針對(duì)串行程序中的循環(huán)部分和子函數(shù)設(shè)計(jì)并行執(zhí)行模式,將 單線程程序劃分為線程,如圖2所示,其具體步驟如下(11)、設(shè)置前瞻緩沖區(qū)每相鄰的兩個(gè)處理器核之間設(shè)置一個(gè)前瞻緩沖區(qū),用于緩 沖前瞻多線程執(zhí)行時(shí)所需要的預(yù)取數(shù)據(jù)和有關(guān)前瞻多線程的執(zhí)行狀態(tài)和上下文語(yǔ)義的數(shù) 據(jù),每個(gè)處理器核對(duì)應(yīng)一個(gè)前瞻緩沖區(qū),對(duì)于單片多核處理器,多個(gè)處理器核之間采用環(huán)狀 相連;(12)、生成循環(huán)線程對(duì)串行程序中的循環(huán)部分,按照順序語(yǔ)義將每一個(gè)循環(huán)部分 按照迭代步依次展開(kāi),其中每一個(gè)循環(huán)部分中的一次迭代步作為一個(gè)循環(huán)線程;(13)、生成子函數(shù)線程對(duì)串行程序中的子函數(shù)部分,按照順序語(yǔ)義將每一個(gè)子函 數(shù)部分按照調(diào)用順序依次,其中每一個(gè)子函數(shù)部分中的一個(gè)子函數(shù)調(diào)用作為一個(gè)子函數(shù)線 程;(14)、生成中間線程對(duì)串行程序中的非步驟202和步驟203所述的循環(huán)線程和子 函數(shù)線程的部分,按照順序語(yǔ)義,每直接相鄰的兩個(gè)循環(huán)部分之間的部分或者每直接相鄰 的兩個(gè)子函數(shù)部分之間的部分或者直接相鄰的循環(huán)部分與子函數(shù)部分之間的部分作為一 個(gè)中間線程。上述步驟(2)所述的判斷線程是否前瞻執(zhí)行,從串行程序的第二個(gè)線程開(kāi)始到最 后一個(gè)線程為止,分析每一個(gè)線程的直接前驅(qū)線程和該線程之間是否存在寫(xiě)后讀數(shù)據(jù)依 賴(lài),如圖3所示,其具體步驟如下(21)、對(duì)上述串行程序中的循環(huán)線程、子函數(shù)線程、中間線程按照順序語(yǔ)義從一開(kāi) 始逐一編號(hào),記下最后一個(gè)線程的編號(hào)N,為每一個(gè)線程建立一個(gè)變量表,用于記錄這個(gè)線 程中的每一個(gè)變量的讀寫(xiě)情況,在變量表中設(shè)一個(gè)0-1系統(tǒng)變量Sys,初始值為0,表示該變 量表對(duì)應(yīng)的線程和線程的直接后續(xù)線程之間不存在寫(xiě)后讀數(shù)據(jù)依賴(lài),從編號(hào)為二的線程開(kāi) 始分析;(22)、判斷所分析的線程的編號(hào)是否為N,若線程的編號(hào)為N,則轉(zhuǎn)步驟3 ;否則轉(zhuǎn) 步驟23 ;(23)、判斷上述步驟(22)所述的線程是否屬于前瞻執(zhí)行,若上述步驟(22)所述的 線程不屬于前瞻執(zhí)行,則轉(zhuǎn)步驟(26),若上述步驟(22)所述的線程屬于前瞻執(zhí)行,則轉(zhuǎn)步 驟(24);(24)、將上述步驟(23)所述的線程前瞻執(zhí)行所用到的預(yù)取數(shù)據(jù)和記錄執(zhí)行狀態(tài) 和上下文語(yǔ)義的數(shù)據(jù)存放在處理這個(gè)線程的處理器核所對(duì)應(yīng)的前瞻緩沖區(qū)中;(25)、分析上述步驟(23)所述的線程對(duì)應(yīng)的直接前驅(qū)線程和該線程之間是否存 在對(duì)同一變量的寫(xiě)后讀依賴(lài),若該線程的變量表中有對(duì)一個(gè)變量M進(jìn)行了讀操作,且該線 程的直接前驅(qū)線程對(duì)同一個(gè)變量M進(jìn)行了寫(xiě)操作,則確定線程和直接前驅(qū)線程之間有依賴(lài) 關(guān)系,并將該線程的變量表中的Sys設(shè)為1 ;(26)、分析上述步驟(22)所述的線程的直接后續(xù)線程。上述步驟(3)所述的以設(shè)定的生產(chǎn)者距離R與消費(fèi)者距離P的比值R/P量化線程之間的依賴(lài)程度,以此判斷即將運(yùn)行的線程是否前瞻執(zhí)行,如圖4所示,其具體步驟如下(31)、判斷即將運(yùn)行的線程的編號(hào)是否為N,若即將運(yùn)行的線程的編號(hào)為N,則轉(zhuǎn) 步驟4;否則轉(zhuǎn)步驟(32);(32)、判斷上述步驟(31)所述的線程的變量表中Sys的值是否為1,若上述步驟 (31)所述的線程的變量表中Sys的值為1,則轉(zhuǎn)步驟(33);否則轉(zhuǎn)步驟(36);(33)、計(jì)算該線程的第一條語(yǔ)句到第一次讀變量M的語(yǔ)句之間的語(yǔ)句數(shù)量,該語(yǔ) 句數(shù)量稱(chēng)為消費(fèi)者距離,記為P ;(34)、計(jì)算該線程的直接前驅(qū)線程的第一條語(yǔ)句到最后一次寫(xiě)變量M的語(yǔ)句之間 的語(yǔ)句數(shù)量,該語(yǔ)句數(shù)量稱(chēng)為生產(chǎn)者距離,記為R ;(35)、以設(shè)定的生產(chǎn)者距離R與消費(fèi)者距離P的比值R/P選擇線程是否前瞻執(zhí)行, 若R/P彡1時(shí),則轉(zhuǎn)步驟(36);若R/P彡2時(shí),則轉(zhuǎn)步驟(37);若1 < R/P < 2時(shí),則轉(zhuǎn)步驟 (38);(36)、該線程和該線程的直接前驅(qū)線程之間不會(huì)發(fā)生數(shù)據(jù)依賴(lài)沖突,該線程前瞻 執(zhí)行,與直接前驅(qū)線程同時(shí)執(zhí)行;(37)、該線程和該線程的直接前驅(qū)線程之間會(huì)發(fā)生數(shù)據(jù)依賴(lài)沖突,該線程等待該 線程的直接前驅(qū)線程執(zhí)行完成之后再執(zhí)行;(38)、該線程和該線程的直接前驅(qū)線程之間有可能會(huì)發(fā)生數(shù)據(jù)依賴(lài)沖突,該線程 隨機(jī)性選擇前瞻執(zhí)行。上述步驟(4)所述的線程前瞻執(zhí)行完后驗(yàn)證前瞻執(zhí)行結(jié)果,如圖5所示,其具體步 驟如下(41)、線程前瞻執(zhí)行所需的真實(shí)數(shù)據(jù)是指線程正確執(zhí)行時(shí)所需的數(shù)據(jù),真實(shí)數(shù)據(jù) 是由順序語(yǔ)義中位于線程前面的前驅(qū)線程計(jì)算出的供線程使用的數(shù)據(jù),判斷線程的真實(shí)數(shù) 據(jù)是否已經(jīng)被計(jì)算出來(lái),若線程的真實(shí)數(shù)據(jù)已經(jīng)被計(jì)算出來(lái),則轉(zhuǎn)步驟(42),否則轉(zhuǎn)步驟 (43);(42)、判斷真實(shí)數(shù)據(jù)與預(yù)取數(shù)據(jù)是否一致直接將前瞻執(zhí)行線程所需要的真實(shí)數(shù) 據(jù)與前瞻執(zhí)行時(shí)的預(yù)取數(shù)據(jù)作比較,判斷真實(shí)數(shù)據(jù)與預(yù)取數(shù)據(jù)是否一致,若真實(shí)數(shù)據(jù)與預(yù) 取數(shù)據(jù)不一致,則轉(zhuǎn)步驟(44),否則轉(zhuǎn)步驟(45);(43)、將上述步驟(41)所述的線程置于等待狀態(tài),直至真實(shí)數(shù)據(jù)計(jì)算完成,轉(zhuǎn)步 驟(42);(44)利用真實(shí)的數(shù)據(jù)重新執(zhí)行上述步驟(42)所述的線程,再轉(zhuǎn)步驟(45);(45)、線程最終執(zhí)行完畢;以上對(duì)本前瞻多線程并行執(zhí)行優(yōu)化方法,進(jìn)行了詳細(xì)的介紹。本發(fā)明結(jié)合說(shuō)明書(shū) 附圖和具體實(shí)施例進(jìn)行的闡述只是用于幫助理解本發(fā)明的方法;同時(shí),對(duì)于本領(lǐng)域的一般 技術(shù)人員,依據(jù)本發(fā)明的方法,在具體實(shí)施方式
和應(yīng)用范圍上均會(huì)有改變之處,因此本發(fā)明 的實(shí)施例不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
一種前瞻多線程并行執(zhí)行優(yōu)化方法,其特征在于,利用生產(chǎn)者距離和消費(fèi)者距離來(lái)量化兩個(gè)有依賴(lài)關(guān)系的線程之間的依賴(lài)程度,并根據(jù)依賴(lài)程度有選擇性設(shè)計(jì)前瞻多線程并行執(zhí)行模式,其具體步驟如下(1)、對(duì)串行程序中覆蓋率較高和并行效率較高的循環(huán)部分和子函數(shù)部分,將循環(huán)部分和子函數(shù)部分相應(yīng)的串行程序部分劃分為一個(gè)個(gè)的線程;(2)、判斷線程是否前瞻執(zhí)行,對(duì)于前瞻執(zhí)行的線程分析每一個(gè)線程和線程的直接前驅(qū)線程之間是否存在寫(xiě)后讀數(shù)據(jù)依賴(lài);(3)、以設(shè)定的生產(chǎn)者距離R與消費(fèi)者距離P的比值R/P判斷并行線程之間的依賴(lài)程度選擇線程是否前瞻執(zhí)行;(4)、線程前瞻執(zhí)行完后驗(yàn)證前瞻執(zhí)行結(jié)果。
2.根據(jù)權(quán)利要求1所述的一種前瞻多線程并行執(zhí)行優(yōu)化方法,其特征在于,上述步驟(1)所述的針對(duì)串行程序中的循環(huán)部分和子函數(shù)設(shè)計(jì)并行執(zhí)行模式,將單線程程序劃分為 線程,其具體步驟如下(11)、設(shè)置前瞻緩沖區(qū)每相鄰的兩個(gè)處理器核之間設(shè)置一個(gè)前瞻緩沖區(qū),用于緩沖 前瞻多線程執(zhí)行時(shí)所需要的預(yù)取數(shù)據(jù)和有關(guān)前瞻多線程的執(zhí)行狀態(tài)和上下文語(yǔ)義的數(shù)據(jù), 每個(gè)處理器核對(duì)應(yīng)一個(gè)前瞻緩沖區(qū),對(duì)于單片多核處理器,多個(gè)處理器核之間采用環(huán)狀相 連;(12)、生成循環(huán)線程對(duì)串行程序中的循環(huán)部分,按照順序語(yǔ)義將每一個(gè)循環(huán)部分按照 迭代步依次展開(kāi),其中每一個(gè)循環(huán)部分中的一次迭代步作為一個(gè)循環(huán)線程;(13)、生成子函數(shù)線程對(duì)串行程序中的子函數(shù)部分,按照順序語(yǔ)義將每一個(gè)子函數(shù)部 分按照調(diào)用順序依次,其中每一個(gè)子函數(shù)部分中的一個(gè)子函數(shù)調(diào)用作為一個(gè)子函數(shù)線程;(14)、生成中間線程對(duì)串行程序中的非步驟202和步驟203所述的循環(huán)線程和子函數(shù) 線程的部分,按照順序語(yǔ)義,每直接相鄰的兩個(gè)循環(huán)部分之間的部分或者每直接相鄰的兩 個(gè)子函數(shù)部分之間的部分或者直接相鄰的循環(huán)部分與子函數(shù)部分之間的部分作為一個(gè)中 間線程。
3.根據(jù)權(quán)利要求2所述的一種前瞻多線程并行執(zhí)行優(yōu)化方法,其特征在于,上述步驟(2)所述的判斷線程是否前瞻執(zhí)行,從串行程序的第二個(gè)線程開(kāi)始到最后一個(gè)線程為止,分 析每一個(gè)線程的直接前驅(qū)線程和該線程之間是否存在寫(xiě)后讀數(shù)據(jù)依賴(lài),其具體步驟如下(21)、對(duì)上述串行程序中的循環(huán)線程、子函數(shù)線程、中間線程按照順序語(yǔ)義從一開(kāi)始逐 一編號(hào),記下最后一個(gè)線程的編號(hào)N,為每一個(gè)線程建立一個(gè)變量表,用于記錄這個(gè)線程中 的每一個(gè)變量的讀寫(xiě)情況,在變量表中設(shè)一個(gè)0-1系統(tǒng)變量Sys,初始值為0,表示該變量表 對(duì)應(yīng)的線程和線程的直接后續(xù)線程之間不存在寫(xiě)后讀數(shù)據(jù)依賴(lài),從編號(hào)為二的線程開(kāi)始分 析;(22)、判斷所分析的線程的編號(hào)是否為N,若線程的編號(hào)為N,則轉(zhuǎn)步驟3;否則轉(zhuǎn)步驟23 ;(23)、判斷上述步驟(22)所述的線程是否屬于前瞻執(zhí)行,若上述步驟(22)所述的線 程不屬于前瞻執(zhí)行,則轉(zhuǎn)步驟(26),若上述步驟(22)所述的線程屬于前瞻執(zhí)行,則轉(zhuǎn)步驟 (24);(24)、將上述步驟(23)所述的線程前瞻執(zhí)行所用到的預(yù)取數(shù)據(jù)和記錄執(zhí)行狀態(tài)和上下文語(yǔ)義的數(shù)據(jù)存放在處理這個(gè)線程的處理器核所對(duì)應(yīng)的前瞻緩沖區(qū)中;(25)、分析上述步驟(23)所述的線程對(duì)應(yīng)的直接前驅(qū)線程和該線程之間是否存在對(duì) 同一變量的寫(xiě)后讀依賴(lài),若該線程的變量表中有對(duì)一個(gè)變量M進(jìn)行了讀操作,且該線程的 直接前驅(qū)線程對(duì)同一個(gè)變量M進(jìn)行了寫(xiě)操作,則確定線程和直接前驅(qū)線程之間有依賴(lài)關(guān) 系,并將該線程的變量表中的Sys設(shè)為1 ;(26)、分析上述步驟(23)所述的線程的直接后續(xù)線程。
4.根據(jù)權(quán)利要求3所述的一種前瞻多線程并行執(zhí)行優(yōu)化方法,其特征在于,上述步驟(3)所述的以設(shè)定的生產(chǎn)者距離R與消費(fèi)者距離P的比值R/P量化線程之間的依賴(lài)程度,以 此判斷即將運(yùn)行的線程是否前瞻執(zhí)行,其具體步驟如下(31)、判斷即將運(yùn)行的線程的編號(hào)是否為N,若即將運(yùn)行的線程的編號(hào)為N,則轉(zhuǎn)步驟 4 ;否則轉(zhuǎn)步驟(32);(32)、判斷上述步驟(31)所述的線程的變量表中Sys的值是否為1,若上述步驟(31) 所述的線程的變量表中Sys的值為1,則轉(zhuǎn)步驟(33);否則轉(zhuǎn)步驟(36);(33)、計(jì)算該線程的第一條語(yǔ)句到第一次讀變量M的語(yǔ)句之間的語(yǔ)句數(shù)量,該語(yǔ)句數(shù) 量稱(chēng)為消費(fèi)者距離,記為P;(34)、計(jì)算該線程的直接前驅(qū)線程的第一條語(yǔ)句到最后一次寫(xiě)變量M的語(yǔ)句之間的語(yǔ) 句數(shù)量,該語(yǔ)句數(shù)量稱(chēng)為生產(chǎn)者距離,記為R ;(35)、以設(shè)定的生產(chǎn)者距離R與消費(fèi)者距離P的比值R/P選擇線程是否前瞻執(zhí)行,若 R/P彡1時(shí),則轉(zhuǎn)步驟(36);若R/P彡2時(shí),則轉(zhuǎn)步驟(37);若1 < R/P < 2時(shí),則轉(zhuǎn)步驟 (38);(36)、該線程和該線程的直接前驅(qū)線程之間不會(huì)發(fā)生數(shù)據(jù)依賴(lài)沖突,該線程前瞻執(zhí)行, 與直接前驅(qū)線程同時(shí)執(zhí)行;(37)、該線程和該線程的直接前驅(qū)線程之間會(huì)發(fā)生數(shù)據(jù)依賴(lài)沖突,該線程等待該線程 的直接前驅(qū)線程執(zhí)行完成之后再執(zhí)行;(38)、該線程和該線程的直接前驅(qū)線程之間有可能會(huì)發(fā)生數(shù)據(jù)依賴(lài)沖突,該線程隨機(jī) 性選擇前瞻執(zhí)行。
5.根據(jù)權(quán)利要求4所述的一種前瞻多線程并行執(zhí)行優(yōu)化方法,其特征在于,上述步驟(4)所述的線程前瞻執(zhí)行完后驗(yàn)證前瞻執(zhí)行結(jié)果,其具體步驟如下(41)、線程前瞻執(zhí)行所需的真實(shí)數(shù)據(jù)是指線程正確執(zhí)行時(shí)所需的數(shù)據(jù),真實(shí)數(shù)據(jù)是由 順序語(yǔ)義中位于線程前面的前驅(qū)線程計(jì)算出的供線程使用的數(shù)據(jù),判斷線程的真實(shí)數(shù)據(jù)是 否已經(jīng)被計(jì)算出來(lái),若線程的真實(shí)數(shù)據(jù)已經(jīng)被計(jì)算出來(lái),則轉(zhuǎn)步驟(42),否則轉(zhuǎn)步驟(43);(42)、判斷真實(shí)數(shù)據(jù)與預(yù)取數(shù)據(jù)是否一致直接將前瞻執(zhí)行線程所需要的真實(shí)數(shù)據(jù)與 前瞻執(zhí)行時(shí)的預(yù)取數(shù)據(jù)作比較,判斷真實(shí)數(shù)據(jù)與預(yù)取數(shù)據(jù)是否一致,若真實(shí)數(shù)據(jù)與預(yù)取數(shù) 據(jù)不一致,則轉(zhuǎn)步驟(44),否則轉(zhuǎn)步驟(45);(43)、將上述步驟(41)所述的線程置于等待狀態(tài),直至真實(shí)數(shù)據(jù)計(jì)算完成,轉(zhuǎn)步驟 (42);(44)利用真實(shí)的數(shù)據(jù)重新執(zhí)行上述步驟(42)所述的線程,再轉(zhuǎn)步驟(45);(45)、線程最終執(zhí)行完畢。
全文摘要
本發(fā)明公開(kāi)了一種前瞻多線程并行執(zhí)行優(yōu)化方法,其步驟如下(1)、將串行程序劃分為一個(gè)個(gè)的線程;(2)、判斷線程是否前瞻執(zhí)行,對(duì)于前瞻執(zhí)行的線程分析每一個(gè)線程和線程的直接前驅(qū)線程之間是否存在寫(xiě)后讀數(shù)據(jù)依賴(lài);(3)、以設(shè)定的生產(chǎn)者距離與消費(fèi)者距離的比值選擇線程是否前瞻執(zhí)行;(4)、線程前瞻執(zhí)行完后驗(yàn)證前瞻執(zhí)行結(jié)果。該方法能減少線程并行執(zhí)行時(shí)的數(shù)據(jù)依賴(lài)沖突和不必要的延遲等待;本發(fā)明綜合考慮了串行程序中并行效率較高的循環(huán)部分和子函數(shù)部分,能夠充分挖掘程序中的寫(xiě)后讀數(shù)據(jù)依賴(lài),充分利用線程級(jí)并行性,并通過(guò)量化線程間寫(xiě)后讀數(shù)據(jù)依賴(lài),有選擇地前瞻執(zhí)行,能提高串行程序在多核處理器上的執(zhí)行速度和處理器利用率。
文檔編號(hào)G06F9/38GK101807144SQ20101012662
公開(kāi)日2010年8月18日 申請(qǐng)日期2010年3月17日 優(yōu)先權(quán)日2010年3月17日
發(fā)明者劉清華, 吳悅, 徐磊, 楊洪斌 申請(qǐng)人:上海大學(xué)