專利名稱:一種多級(jí)并行化編程方法
技術(shù)領(lǐng)域:
本發(fā)明涉及并行編程模型、模式與方法領(lǐng)域,特別涉及一種多級(jí)并行化編程方法。
背景技術(shù):
隨著計(jì)算機(jī)的應(yīng)用范圍和應(yīng)用水平的不斷拓展和提高,人們對(duì)于計(jì)算機(jī)的計(jì)算和 處理能力等性能要求也隨之增加,近些年來(lái),在諸如天文、氣象、海洋、生物、能源、化工、地 質(zhì)勘探和數(shù)學(xué)等科學(xué)與工程計(jì)算領(lǐng)域,由于數(shù)據(jù)計(jì)算量的增大及計(jì)算復(fù)雜度的增加,很多 實(shí)際應(yīng)用問(wèn)題的求解過(guò)程在計(jì)算能力及計(jì)算速度方面不斷提出新的要求,對(duì)高性能計(jì)算能 力的需求越來(lái)越迫切。而這類實(shí)際應(yīng)用大多是基于數(shù)據(jù)型的,且耗時(shí)計(jì)算主要為數(shù)值計(jì)算。目前,在硬件方面,隨著多核處理器的出現(xiàn),以及高性能集群的快速發(fā)展,搭建一 個(gè)混合分布式多核集群已經(jīng)是件很容易的事。發(fā)明人在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)現(xiàn)上述現(xiàn)有技術(shù)至少存在以下缺點(diǎn)和不足在軟件方面,并行編程復(fù)雜且易出錯(cuò)。如何高效地在并行計(jì)算環(huán)境中,特別是在多 核分布式集群環(huán)境下進(jìn)行各種并行計(jì)算應(yīng)用程序的設(shè)計(jì)與開發(fā),對(duì)于多數(shù)非計(jì)算機(jī)專業(yè)出 身的各應(yīng)用領(lǐng)域的技術(shù)人員缺乏并行計(jì)算程序開發(fā)的專業(yè)訓(xùn)練,已成為并行計(jì)算技術(shù)轉(zhuǎn)化 為實(shí)際生產(chǎn)力所面臨的關(guān)鍵問(wèn)題。
發(fā)明內(nèi)容
為了減少并行編程的復(fù)雜度,降低出錯(cuò)率,本發(fā)明提供了一種多級(jí)并行化編程方 法,包括進(jìn)程間的處理和進(jìn)程內(nèi)的處理,所述進(jìn)程間的處理由主進(jìn)程、從進(jìn)程、DAG任務(wù)解析 線程、第一線程池緩沖區(qū)、通信線城池、任務(wù)分配線程、數(shù)據(jù)同步線程和第一 DAG任務(wù)完成 反饋隊(duì)列之間的相互通信實(shí)現(xiàn);所述進(jìn)程內(nèi)的處理由主線程、第二線程池緩沖區(qū)、工作線程 池、工作線程和第二 DAG任務(wù)完成反饋隊(duì)列之間的相互通信實(shí)現(xiàn);所述進(jìn)程間的處理包括(1)所述DAG任務(wù)解析線程解析第一 DAG圖,獲取并下發(fā)DAG任務(wù)到所述第一線程 池緩沖區(qū);(2)所述通信線程池中的閑置線程從所述第一線程池緩沖區(qū)中獲取DAG任務(wù),所 述任務(wù)分配線程下發(fā)DAG任務(wù)給相應(yīng)的所述從進(jìn)程并進(jìn)入等待確認(rèn)信息的狀態(tài);(3)當(dāng)任意一所述從進(jìn)程完成DAG任務(wù),其對(duì)完成的數(shù)據(jù)塊內(nèi)容進(jìn)行廣播,所述數(shù) 據(jù)同步線程使所述主進(jìn)程和所有所述從進(jìn)程進(jìn)行數(shù)據(jù)同步更新;廣播完畢后,發(fā)送確認(rèn)信 息給相應(yīng)的所述任務(wù)分配線程;(4)所述任務(wù)分配線程接收到相應(yīng)的所述從進(jìn)程的確認(rèn)信息后,將已完成的DAG 任務(wù)ID寫入所述第一 DAG任務(wù)完成反饋隊(duì)列;(5)所述DAG任務(wù)解析線程實(shí)時(shí)監(jiān)測(cè)所述第一 DAG任務(wù)完成反饋隊(duì)列,當(dāng)有完成 的DAG任務(wù)時(shí),更新所述第一 DAG圖;否則,重新執(zhí)行步驟(1),當(dāng)所有的任務(wù)都完成,退出 監(jiān)測(cè),流程結(jié)束;
所述進(jìn)程內(nèi)的處理包括(6)所述主線程獲取所述從進(jìn)程發(fā)送的DAG任務(wù),解析第二 DAG圖,獲取并下發(fā) DAG任務(wù)到所述第二線程池緩沖區(qū);(7)所述工作線程池從所述第二線程池緩沖區(qū)中獲取DAG任務(wù),將其下發(fā)給任一 閑置的所述工作線程;當(dāng)所述工作線程完成DAG任務(wù)時(shí),將完成的DAG任務(wù)ID寫入所述第 二 DAG任務(wù)完成反饋隊(duì)列中;(8)所述主線程實(shí)時(shí)監(jiān)測(cè)所述第二 DAG任務(wù)完成反饋隊(duì)列,當(dāng)有完成的DAG任務(wù) 時(shí),所述主線程更新所述第二 DAG圖,重新執(zhí)行步驟(6);當(dāng)所有的任務(wù)都完成后,所述主線 程將退出監(jiān)測(cè),進(jìn)入等待下一個(gè)新任務(wù)狀態(tài)。所述多級(jí)并行化編程方法還包括進(jìn)程間的容錯(cuò)處理和進(jìn)程內(nèi)的容錯(cuò)處理,所述進(jìn) 程間的容錯(cuò)處理由所述DAG任務(wù)解析線程、第一超時(shí)隊(duì)列、所述通信線程池中的任務(wù)分配 線程、所述任務(wù)分配線程、第一 DAG任務(wù)注冊(cè)表、容錯(cuò)線程之間的相互通信實(shí)現(xiàn);所述進(jìn)程 內(nèi)的容錯(cuò)處理由所述主線程、第二超時(shí)隊(duì)列、所述工作線程、第二 DAG任務(wù)注冊(cè)表、所述工 作線程池之間的相互通信實(shí)現(xiàn);具體地,所述進(jìn)程間的容錯(cuò)處理包括將所述DAG任務(wù)解析線程獲取到的DAG任務(wù)下發(fā)到所述第一超時(shí)隊(duì)列中;當(dāng)所述通信線程池中的任務(wù)分配線程獲取到DAG任務(wù)后,所述任務(wù)分配線程將到 所述第一 DAG任務(wù)注冊(cè)表中進(jìn)行登記,記錄任務(wù)分配線程ID及DAG任務(wù)ID ;當(dāng)所述DAG任務(wù)解析線程實(shí)時(shí)監(jiān)測(cè)發(fā)現(xiàn)有完成的DAG任務(wù)時(shí),將從所述第一超時(shí) 隊(duì)列中將該DAG任務(wù)ID刪除;所述容錯(cuò)線程實(shí)時(shí)監(jiān)測(cè)所述第一超時(shí)隊(duì)列,根據(jù)第一超時(shí)閾值檢測(cè)是否存在DAG 任務(wù)超時(shí);當(dāng)發(fā)現(xiàn)有DAG任務(wù)超時(shí),從所述第一超時(shí)隊(duì)列中刪除DAG任務(wù)ID,否則,繼續(xù)反 復(fù)監(jiān)測(cè)所述第一超時(shí)隊(duì)列;所述進(jìn)程內(nèi)的容錯(cuò)處理包括將所述主線程獲取到的DAG任務(wù)下發(fā)到所述第二超時(shí)隊(duì)列中,當(dāng)所述工作線程獲 取一可計(jì)算的DAG任務(wù)后,所述工作線程將到所述第二 DAG任務(wù)注冊(cè)表中進(jìn)行登記,記錄工 作線程ID及DAG任務(wù)ID ;所述主線程實(shí)時(shí)監(jiān)測(cè)所述第二超時(shí)隊(duì)列,根據(jù)第二超時(shí)閾值檢測(cè)是否存在DAG任 務(wù)超時(shí),當(dāng)發(fā)現(xiàn)有DAG任務(wù)超時(shí)時(shí),所述工作線程池殺死所述工作線程,重新創(chuàng)建一新工作 線程替代被殺死的工作線程,將超時(shí)的DAG任務(wù)從所述第二超時(shí)隊(duì)列中刪除。所述容錯(cuò)線程實(shí)時(shí)監(jiān)測(cè)所述第一超時(shí)隊(duì)列,根據(jù)第一超時(shí)閾值檢測(cè)是否存在DAG 任務(wù)超時(shí),具體為當(dāng)前時(shí)刻與所述第一超時(shí)隊(duì)列的起始時(shí)間做差,得到的差值大于等于所述第一超 時(shí)閾值時(shí),視為存在DAG任務(wù)超時(shí)。所述主線程實(shí)時(shí)監(jiān)測(cè)所述第二超時(shí)隊(duì)列,根據(jù)第二超時(shí)閾值檢測(cè)是否存在DAG任 務(wù)超時(shí),具體為當(dāng)前時(shí)刻與所述第二超時(shí)隊(duì)列的起始時(shí)間做差,得到的差值大于等于所述第二超 時(shí)閾值時(shí),視為存在DAG任務(wù)超時(shí)。所述第一超時(shí)閾值大于第二超時(shí)閾值。
本發(fā)明提供的技術(shù)方案的有益效果是該方法通過(guò)對(duì)進(jìn)程間和進(jìn)程內(nèi)的處理,充分結(jié)合了混合硬件體系結(jié)構(gòu)的特征,在 提高集群硬件環(huán)境利用率方面具有明顯效應(yīng),而且?guī)椭_發(fā)人員簡(jiǎn)化并行編程和復(fù)用已有 的并行代碼,減少了編程的復(fù)雜度,降低了出錯(cuò)率;并且該方法考慮了容錯(cuò),進(jìn)一步地降低 了出錯(cuò)率。
圖1是本發(fā)明提供的進(jìn)程間的處理結(jié)構(gòu)框圖;圖2是本發(fā)明提供的進(jìn)程間的流程圖;圖3是本發(fā)明提供的進(jìn)程內(nèi)的處理結(jié)構(gòu)框圖;圖4是本發(fā)明提供的進(jìn)程內(nèi)的流程圖;圖5是本發(fā)明提供的進(jìn)程間容錯(cuò)處理的流程圖;圖6是本發(fā)明提供的進(jìn)程內(nèi)容錯(cuò)處理的流程圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方 式作進(jìn)一步地詳細(xì)描述。為了減少并行編程的復(fù)雜度,降低出錯(cuò)率,本發(fā)明實(shí)施例提供了一種多級(jí)并行化 編程方法,該方法包括進(jìn)程間的處理和進(jìn)程內(nèi)的處理,其中,進(jìn)程間的處理采用主從模式, 從進(jìn)程端采用了動(dòng)態(tài)進(jìn)程池,進(jìn)程間的處理由主進(jìn)程、從進(jìn)程、DAG任務(wù)解析線程、第一線程 池緩沖區(qū)、通信線城池、任務(wù)分配線程、數(shù)據(jù)同步線程和第一 DAG任務(wù)完成反饋隊(duì)列之間的 相互通信實(shí)現(xiàn);進(jìn)程內(nèi)的處理,采用了主從模式,進(jìn)程內(nèi)的處理由主線程、第二線程池緩沖 區(qū)、工作線程池、工作線程和第二 DAG任務(wù)完成反饋隊(duì)列之間的相互通信實(shí)現(xiàn),詳細(xì)描述參 見下文一、進(jìn)程間的處理參見圖1和圖2,當(dāng)系統(tǒng)啟動(dòng)時(shí),主進(jìn)程將根據(jù)用戶的參數(shù)配置自動(dòng)創(chuàng)建各個(gè)部分 的線程,然后主進(jìn)程中的各個(gè)DAG(DireCted Acyclic Graph,有向無(wú)環(huán)圖)任務(wù)解析線程開 始工作;101 =DAG任務(wù)解析線程解析第一 DAG圖,獲取并下發(fā)DAG任務(wù)到第一線程池緩沖 區(qū);該步驟具體為DAG任務(wù)解析線程解析第一 DAG圖,獲取入度為零的DAG任務(wù),并將 獲取到的DAG任務(wù)下發(fā)到第一線程池緩沖區(qū)。其中,第一 DAG圖可以根據(jù)用戶提供的參數(shù) 由系統(tǒng)DAG Pattern (參數(shù))生成。102 通信線程池中的閑置線程從第一線程池緩沖區(qū)中獲取DAG任務(wù),任務(wù)分配線 程下發(fā)DAG任務(wù)給相應(yīng)的從進(jìn)程并進(jìn)入等待確認(rèn)信息的狀態(tài);當(dāng)?shù)谝痪€程池緩沖區(qū)不為空時(shí),處在通信線程池中的閑置線程將自動(dòng)從第一線程 池緩沖區(qū)中任意獲取可計(jì)算的DAG任務(wù);當(dāng)?shù)谝痪€程池緩沖區(qū)為空時(shí),處在通信線程池中 的閑置線程將進(jìn)入休眠狀態(tài)。圖1中主進(jìn)程下包括一通信線程池、一從進(jìn)程池,通信線程池中包括3個(gè)任務(wù)分配線程,分別為任務(wù)分配線程1、任務(wù)分配線程2和任務(wù)分配線程3,從進(jìn)程池中包括3個(gè)從 進(jìn)程,分別為從進(jìn)程1、從進(jìn)程2和從進(jìn)程3,有3個(gè)可計(jì)算的DAG任務(wù),分別為DAG任務(wù)1、 DAG任務(wù)2和DAG任務(wù)3,從進(jìn)程池中任務(wù)分配線程1將可計(jì)算的DAG任務(wù)1下發(fā)給從進(jìn)程 池中的從進(jìn)程1,任務(wù)分配線程1進(jìn)入等待從進(jìn)程1的確認(rèn)信息的狀態(tài);從進(jìn)程池中任務(wù)分 配線程2將可計(jì)算的DAG任務(wù)2下發(fā)給從進(jìn)程池中的從進(jìn)程2,任務(wù)分配線程2進(jìn)入等待從 進(jìn)程2的確認(rèn)信息的狀態(tài);從進(jìn)程池中任務(wù)分配線程3將可計(jì)算的DAG任務(wù)3下發(fā)給從進(jìn) 程池中的從進(jìn)程3,任務(wù)分配線程3進(jìn)入等待從進(jìn)程3的確認(rèn)信息的狀態(tài)。其中,通信線程池中的任務(wù)分配線程的數(shù)量可以為4個(gè)或5個(gè)或多個(gè),本發(fā)明實(shí)施 例以任務(wù)分配線程的數(shù)量為3個(gè)進(jìn)行說(shuō)明,具體實(shí)現(xiàn)時(shí)本發(fā)明實(shí)施例對(duì)此不做限制。103:當(dāng)任意一從進(jìn)程完成DAG任務(wù),其對(duì)完成的數(shù)據(jù)塊內(nèi)容進(jìn)行廣播,數(shù)據(jù)同步 線程使主進(jìn)程和所有從進(jìn)程進(jìn)行數(shù)據(jù)同步更新;廣播完畢后,發(fā)送確認(rèn)信息給相應(yīng)的任務(wù) 分配線程;例如當(dāng)從進(jìn)程1完成DAG任務(wù)后,從進(jìn)程1對(duì)完成的數(shù)據(jù)塊內(nèi)容進(jìn)行廣播,使得 主進(jìn)程和所有從進(jìn)程獲知從進(jìn)程1完成了 DAG任務(wù),并接收數(shù)據(jù)塊內(nèi)容,根據(jù)數(shù)據(jù)塊內(nèi)容對(duì) 自身的數(shù)據(jù)進(jìn)行同步的更新。當(dāng)從進(jìn)程1廣播完畢后,將發(fā)送確認(rèn)信息“ok”給任務(wù)分配線 程1,通知任務(wù)分配線程1 ;當(dāng)從進(jìn)程2廣播完畢后,將發(fā)送確認(rèn)信息“ok”給任務(wù)分配線程 2,通知任務(wù)分配線程2 ;當(dāng)從進(jìn)程3廣播完畢后,將發(fā)送確認(rèn)信息“ok”給任務(wù)分配線程3, 通知任務(wù)分配線程3。其中,確認(rèn)信息還可以為其他的字符,具體實(shí)現(xiàn)時(shí),本發(fā)明實(shí)施例對(duì)此 不做限制。104:任務(wù)分配線程接收到相應(yīng)從進(jìn)程的確認(rèn)信息后,將已完成的DAG任務(wù) ID(IDentity,身份識(shí)別碼)寫入第一 DAG任務(wù)完成反饋隊(duì)列;例如任務(wù)分配線程1接收到從進(jìn)程1的確認(rèn)信息后,將從進(jìn)程1已完成的DAG任 務(wù)ID寫入到第一 DAG任務(wù)完成反饋隊(duì)列中;任務(wù)分配線程2接收到從進(jìn)程2的確認(rèn)信息 后,將從進(jìn)程2已完成的DAG任務(wù)ID寫入到第一 DAG任務(wù)完成反饋隊(duì)列中,任務(wù)分配線程 3接收到從進(jìn)程3的確認(rèn)信息后,將從進(jìn)程3已完成的DAG任務(wù)ID寫入到第一 DAG任務(wù)完 成反饋隊(duì)列中。其中,將完成的DAG任務(wù)ID寫入到第一 DAG任務(wù)完成反饋隊(duì)列時(shí),遵循先來(lái)先入 列的方式進(jìn)行。105 =DAG任務(wù)解析線程實(shí)時(shí)監(jiān)測(cè)第一 DAG任務(wù)完成反饋隊(duì)列,當(dāng)有完成的DAG任 務(wù)時(shí),更新第一 DAG圖;否則,重新執(zhí)行步驟101,當(dāng)所有的任務(wù)都完成,退出監(jiān)測(cè),流程結(jié)
束ο二、進(jìn)程內(nèi)的處理參見圖3和圖4所示,當(dāng)某個(gè)從進(jìn)程獲取到相應(yīng)的任務(wù)分配線程下發(fā)的DAG任務(wù) 后,開始進(jìn)行DAG任務(wù)的計(jì)算,具體為201 主線程獲取從進(jìn)程發(fā)送的DAG任務(wù),解析第二 DAG圖,獲取并下發(fā)DAG任務(wù)到 第二線程池緩沖區(qū);該步驟具體為主線程通過(guò)解析第二 DAG圖,尋找入度為零的DAG任務(wù),并將獲取到 的DAG任務(wù)下發(fā)到第二線程池緩沖區(qū);其中,第二DAG圖由用戶提供或者根據(jù)用戶提供的參 數(shù)由DAG Pattern動(dòng)態(tài)生成。
202 工作線程池從第二線程池緩沖區(qū)中獲取DAG任務(wù),將其下發(fā)給任一閑置的工 作線程;當(dāng)工作線程完成DAG任務(wù)時(shí),將完成的DAG任務(wù)ID寫入第二 DAG任務(wù)完成反饋隊(duì) 列中;圖3中給出了第二線程池緩沖區(qū)和工作線程池,該工作線程池中有4個(gè)工作線程, 分別為工作線程1、工作線程2、工作線程3和工作線程4,工作線程池判斷工作線程1、工作 線程2、工作線程3和工作線程4中是否存在閑置的工作線程,若存在,工作線程池從第二線 程池緩沖區(qū)中獲取任意可計(jì)算的DAG任務(wù),將其下發(fā)給任一閑置的工作線程,該閑置的工 作線程開始計(jì)算;否則,處在工作線程池緩沖區(qū)內(nèi)的DAG任務(wù)處于等待,直到有閑置的工作 線程為止;當(dāng)工作線程完成DAG任務(wù)時(shí),將完成的DAG任務(wù)ID寫入第二 DAG任務(wù)完成反饋 隊(duì)列中。其中,工作線程池中的工作線程的數(shù)量可以為4個(gè)或5個(gè)或多個(gè),本發(fā)明實(shí)施例以 工作線程的數(shù)量為4個(gè)進(jìn)行說(shuō)明,具體實(shí)現(xiàn)時(shí)本發(fā)明實(shí)施例對(duì)此不做限制。203 主線程實(shí)時(shí)監(jiān)測(cè)第二DAG任務(wù)完成反饋隊(duì)列,當(dāng)有完成的DAG任務(wù)時(shí),主線程 更新第二 DAG圖,重新執(zhí)行步驟201 ;當(dāng)所有的任務(wù)都完成后,主線程將退出監(jiān)測(cè),進(jìn)入等待 下一個(gè)新任務(wù)狀態(tài)。進(jìn)一步地,為了降低出錯(cuò)率,本發(fā)明實(shí)施例還提供了容錯(cuò)處理,包括進(jìn)程間的容錯(cuò) 處理和進(jìn)程內(nèi)的容錯(cuò)處理,進(jìn)程間的容錯(cuò)處理由DAG任務(wù)解析線程、第一超時(shí)隊(duì)列、通信線 程池中的任務(wù)分配線程、任務(wù)分配線程、第一 DAG任務(wù)注冊(cè)表、容錯(cuò)線程之間的相互通信實(shí) 現(xiàn);進(jìn)程內(nèi)的容錯(cuò)處理由主線程、第二超時(shí)隊(duì)列、工作線程、第二 DAG任務(wù)注冊(cè)表、工作線程 池之間的相互通信實(shí)現(xiàn);詳見下文描述三、進(jìn)程間的容錯(cuò)處理參見圖1和圖5,該進(jìn)程間的容錯(cuò)處理具體為301 將DAG任務(wù)解析線程獲取到的DAG任務(wù)下發(fā)到第一超時(shí)隊(duì)列中;其中,第一超時(shí)隊(duì)列接收DAG任務(wù)解析線程下發(fā)的DAG任務(wù),每一個(gè)DAG任務(wù)都有 一個(gè)time_Start屬性(起始時(shí)間),該屬性用于記錄DAG任務(wù)入第一超時(shí)隊(duì)列的時(shí)間。例 如第一超時(shí)隊(duì)列接收到3個(gè)DAG任務(wù),分別為DAG任務(wù)1、DAG任務(wù)2和DAG任務(wù)3,DAG任 務(wù) 1 的 time_start 屬性為 time_startl、DAG 任務(wù) 2 的 time_start 屬性為 time_start2 和 DAG任務(wù)3的time_start屬性為time_start3,DAG任務(wù)1的下發(fā)時(shí)間為14:23、DAG任務(wù)2 的下發(fā)時(shí)間為14:24和DAG任務(wù)3的下發(fā)時(shí)間為14:25,則,time_startl為14:23 ;time_ start2 為 14:24 ;time_start3 為 14:25。302 當(dāng)通信線程池中的任務(wù)分配線程獲取到DAG任務(wù)后,該任務(wù)分配線程將到第 一 DAG任務(wù)注冊(cè)表中進(jìn)行登記,記錄任務(wù)分配線程ID及DAG任務(wù)ID ;例如任務(wù)分配線程1獲取一個(gè)DAG任務(wù)(DAG任務(wù)ID為12),那么該任務(wù)分配線 程1會(huì)去第一 DAG任務(wù)注冊(cè)表進(jìn)行登記,記錄任務(wù)分配線程ID和DAG任務(wù)ID。303 當(dāng)DAG任務(wù)解析線程實(shí)時(shí)監(jiān)測(cè)發(fā)現(xiàn)有完成的DAG任務(wù)時(shí),將從第一超時(shí)隊(duì)列 中將該DAG任務(wù)ID刪除;304:容錯(cuò)線程實(shí)時(shí)監(jiān)測(cè)第一超時(shí)隊(duì)列,根據(jù)第一超時(shí)閾值檢測(cè)是否存在DAG任務(wù) 超時(shí);當(dāng)發(fā)現(xiàn)有DAG任務(wù)超時(shí),從第一超時(shí)隊(duì)列中刪除DAG任務(wù)ID,否則,繼續(xù)反復(fù)監(jiān)測(cè)第 一超時(shí)隊(duì)列。
該步驟的具體執(zhí)行方法為當(dāng)前時(shí)刻與第一超時(shí)隊(duì)列的timejtart做差,得到的 差值大于等于第一超時(shí)閾值時(shí),視為存在DAG任務(wù)超時(shí);否則,不存在DAG任務(wù)超時(shí),第一超 時(shí)閾值的設(shè)定根據(jù)實(shí)際應(yīng)用中的具體情況進(jìn)行設(shè)定,具體實(shí)現(xiàn)時(shí),本發(fā)明實(shí)施例對(duì)此不做 限制。四、進(jìn)程內(nèi)的容錯(cuò)處理參見圖3和圖6,該進(jìn)程內(nèi)的容錯(cuò)處理具體為401 將主線程獲取到的DAG任務(wù)下發(fā)到第二超時(shí)隊(duì)列中,當(dāng)工作線程獲取一可計(jì) 算的DAG任務(wù)后,該工作線程將到第二 DAG任務(wù)注冊(cè)表中進(jìn)行登記,記錄工作線程ID及要 計(jì)算的DAG任務(wù)ID ;例如工作線程1獲取一個(gè)DAG任務(wù)(DAG任務(wù)ID為12),那么該工作線程1會(huì)去 第二 DAG任務(wù)注冊(cè)表進(jìn)行登記,記錄工作線程ID和DAG任務(wù)ID。402 主線程實(shí)時(shí)監(jiān)測(cè)第二超時(shí)隊(duì)列,根據(jù)第二超時(shí)閾值檢測(cè)是否存在DAG任務(wù)超 時(shí),當(dāng)發(fā)現(xiàn)有DAG任務(wù)超時(shí)時(shí),工作線程池殺死工作線程,重新創(chuàng)建一新工作線程替代被殺 死的工作線程,將超時(shí)的DAG任務(wù)從第二超時(shí)隊(duì)列中刪除。該步驟的具體執(zhí)行方法為當(dāng)前時(shí)刻與第二超時(shí)隊(duì)列的timejtart做差,得到的 差值大于等于第二超時(shí)閾值時(shí),視為存在DAG任務(wù)超時(shí),工作線程池殺死該工作線程;否 則,不存在DAG任務(wù)超時(shí),第二超時(shí)閾值的設(shè)定根據(jù)實(shí)際應(yīng)用中的具體情況進(jìn)行設(shè)定,具體 實(shí)現(xiàn)時(shí),本發(fā)明實(shí)施例對(duì)此不做限制。其中,第一超時(shí)閾值應(yīng)滿足大于第二超時(shí)閾值。綜上所述,本發(fā)明實(shí)施例提供了一種多級(jí)并行化編程方法,該方法通過(guò)對(duì)進(jìn)程間 和進(jìn)程內(nèi)的處理,充分結(jié)合了混合硬件體系結(jié)構(gòu)的特征,在提高集群硬件環(huán)境利用率方面 具有明顯效應(yīng),而且?guī)椭_發(fā)人員簡(jiǎn)化并行編程和復(fù)用已有的并行代碼,減少了編程的復(fù) 雜度;并且該方法考慮了容錯(cuò),進(jìn)一步地降低了出錯(cuò)率;降低了非計(jì)算機(jī)專業(yè)人員設(shè)計(jì)開 發(fā)并行計(jì)算應(yīng)用程序的難度,縮短設(shè)計(jì)與開發(fā)周期,而且能夠使完成的并行計(jì)算應(yīng)用程序 結(jié)構(gòu)更為合理,性能更為優(yōu)化,從而提高相應(yīng)學(xué)科領(lǐng)域的研究效率和應(yīng)用水平;同時(shí),對(duì)推 動(dòng)并行計(jì)算在各個(gè)行業(yè)的應(yīng)用與發(fā)展、提高各專業(yè)領(lǐng)域的計(jì)算機(jī)應(yīng)用水平具有重要研究意 義及應(yīng)用價(jià)值本領(lǐng)域技術(shù)人員可以理解附圖只是一個(gè)優(yōu)選實(shí)施例的示意圖,上述本發(fā)明實(shí)施例 序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和 原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
一種多級(jí)并行化編程方法,包括進(jìn)程間的處理和進(jìn)程內(nèi)的處理,所述進(jìn)程間的處理由主進(jìn)程、從進(jìn)程、DAG任務(wù)解析線程、第一線程池緩沖區(qū)、通信線城池、任務(wù)分配線程、數(shù)據(jù)同步線程和第一DAG任務(wù)完成反饋隊(duì)列之間的相互通信實(shí)現(xiàn);所述進(jìn)程內(nèi)的處理由主線程、第二線程池緩沖區(qū)、工作線程池、工作線程和第二DAG任務(wù)完成反饋隊(duì)列之間的相互通信實(shí)現(xiàn);其特征在于,所述進(jìn)程間的處理包括(1)所述DAG任務(wù)解析線程解析第一DAG圖,獲取并下發(fā)DAG任務(wù)到所述第一線程池緩沖區(qū);(2)所述通信線程池中的閑置線程從所述第一線程池緩沖區(qū)中獲取DAG任務(wù),所述任務(wù)分配線程下發(fā)DAG任務(wù)給相應(yīng)的所述從進(jìn)程并進(jìn)入等待確認(rèn)信息的狀態(tài);(3)當(dāng)任意一所述從進(jìn)程完成DAG任務(wù),其對(duì)完成的數(shù)據(jù)塊內(nèi)容進(jìn)行廣播,所述數(shù)據(jù)同步線程使所述主進(jìn)程和所有所述從進(jìn)程進(jìn)行數(shù)據(jù)同步更新;廣播完畢后,發(fā)送確認(rèn)信息給相應(yīng)的所述任務(wù)分配線程;(4)所述任務(wù)分配線程接收到相應(yīng)的所述從進(jìn)程的確認(rèn)信息后,將已完成的DAG任務(wù)ID寫入所述第一DAG任務(wù)完成反饋隊(duì)列;(5)所述DAG任務(wù)解析線程實(shí)時(shí)監(jiān)測(cè)所述第一DAG任務(wù)完成反饋隊(duì)列,當(dāng)有完成的DAG任務(wù)時(shí),更新所述第一DAG圖;否則,重新執(zhí)行步驟(1),當(dāng)所有的任務(wù)都完成,退出監(jiān)測(cè),流程結(jié)束;所述進(jìn)程內(nèi)的處理包括(6)所述主線程獲取所述從進(jìn)程發(fā)送的DAG任務(wù),解析第二DAG圖,獲取并下發(fā)DAG任務(wù)到所述第二線程池緩沖區(qū);(7)所述工作線程池從所述第二線程池緩沖區(qū)中獲取DAG任務(wù),將其下發(fā)給任一閑置的所述工作線程;當(dāng)所述工作線程完成DAG任務(wù)時(shí),將完成的DAG任務(wù)ID寫入所述第二DAG任務(wù)完成反饋隊(duì)列中;(8)所述主線程實(shí)時(shí)監(jiān)測(cè)所述第二DAG任務(wù)完成反饋隊(duì)列,當(dāng)有完成的DAG任務(wù)時(shí),所述主線程更新所述第二DAG圖,重新執(zhí)行步驟(6);當(dāng)所有的任務(wù)都完成后,所述主線程將退出監(jiān)測(cè),進(jìn)入等待下一個(gè)新任務(wù)狀態(tài)。
2.根據(jù)權(quán)利要求1所述的多級(jí)并行化編程方法,其特征在于,所述多級(jí)并行化編程方 法還包括進(jìn)程間的容錯(cuò)處理和進(jìn)程內(nèi)的容錯(cuò)處理,所述進(jìn)程間的容錯(cuò)處理由所述DAG任務(wù) 解析線程、第一超時(shí)隊(duì)列、所述通信線程池中的任務(wù)分配線程、所述任務(wù)分配線程、第一 DAG 任務(wù)注冊(cè)表、容錯(cuò)線程之間的相互通信實(shí)現(xiàn);所述進(jìn)程內(nèi)的容錯(cuò)處理由所述主線程、第二超 時(shí)隊(duì)列、所述工作線程、第二 DAG任務(wù)注冊(cè)表、所述工作線程池之間的相互通信實(shí)現(xiàn);具體 地,所述進(jìn)程間的容錯(cuò)處理包括將所述DAG任務(wù)解析線程獲取到的DAG任務(wù)下發(fā)到所述第一超時(shí)隊(duì)列中;當(dāng)所述通信線程池中的任務(wù)分配線程獲取到DAG任務(wù)后,所述任務(wù)分配線程將到所述 第一 DAG任務(wù)注冊(cè)表中進(jìn)行登記,記錄任務(wù)分配線程ID及DAG任務(wù)ID ;當(dāng)所述DAG任務(wù)解析線程實(shí)時(shí)監(jiān)測(cè)發(fā)現(xiàn)有完成的DAG任務(wù)時(shí),將從所述第一超時(shí)隊(duì)列 中將該DAG任務(wù)ID刪除;所述容錯(cuò)線程實(shí)時(shí)監(jiān)測(cè)所述第一超時(shí)隊(duì)列,根據(jù)第一超時(shí)閾值檢測(cè)是否存在DAG任務(wù)超時(shí);當(dāng)發(fā)現(xiàn)有DAG任務(wù)超時(shí),從所述第一超時(shí)隊(duì)列中刪除DAG任務(wù)ID,否則,繼續(xù)反復(fù)監(jiān) 測(cè)所述第一超時(shí)隊(duì)列;所述進(jìn)程內(nèi)的容錯(cuò)處理包括將所述主線程獲取到的DAG任務(wù)下發(fā)到所述第二超時(shí)隊(duì)列中,當(dāng)所述工作線程獲取一 可計(jì)算的DAG任務(wù)后,所述工作線程將到所述第二 DAG任務(wù)注冊(cè)表中進(jìn)行登記,記錄工作線 程ID及DAG任務(wù)ID ;所述主線程實(shí)時(shí)監(jiān)測(cè)所述第二超時(shí)隊(duì)列,根據(jù)第二超時(shí)閾值檢測(cè)是否存在DAG任務(wù)超 時(shí),當(dāng)發(fā)現(xiàn)有DAG任務(wù)超時(shí)時(shí),所述工作線程池殺死所述工作線程,重新創(chuàng)建一新工作線程 替代被殺死的工作線程,將超時(shí)的DAG任務(wù)從所述第二超時(shí)隊(duì)列中刪除。
3.根據(jù)權(quán)利要求2所述的多級(jí)并行化編程方法,其特征在于,所述容錯(cuò)線程實(shí)時(shí)監(jiān)測(cè) 所述第一超時(shí)隊(duì)列,根據(jù)第一超時(shí)閾值檢測(cè)是否存在DAG任務(wù)超時(shí),具體為當(dāng)前時(shí)刻與所述第一超時(shí)隊(duì)列的起始時(shí)間做差,得到的差值大于等于所述第一超時(shí)閾 值時(shí),視為存在DAG任務(wù)超時(shí)。
4.根據(jù)權(quán)利要求2所述的多級(jí)并行化編程方法,其特征在于,所述主線程實(shí)時(shí)監(jiān)測(cè)所 述第二超時(shí)隊(duì)列,根據(jù)第二超時(shí)閾值檢測(cè)是否存在DAG任務(wù)超時(shí),具體為當(dāng)前時(shí)刻與所述第二超時(shí)隊(duì)列的起始時(shí)間做差,得到的差值大于等于所述第二超時(shí)閾 值時(shí),視為存在DAG任務(wù)超時(shí)。
5.根據(jù)權(quán)利要求2所述的多級(jí)并行化編程方法,其特征在于,所述第一超時(shí)閾值大于 第二超時(shí)閾值。
全文摘要
本發(fā)明公開了一種多級(jí)并行化編程方法,涉及并行編程模型、模式與方法領(lǐng)域,該方法通過(guò)對(duì)進(jìn)程間和進(jìn)程內(nèi)的處理,充分結(jié)合了混合硬件體系結(jié)構(gòu)的特征,在提高集群硬件環(huán)境利用率方面具有明顯效應(yīng),而且?guī)椭_發(fā)人員簡(jiǎn)化并行編程和復(fù)用已有的并行代碼,減少了編程的復(fù)雜度,降低了出錯(cuò)率;并且該方法考慮了容錯(cuò),進(jìn)一步地降低了出錯(cuò)率。
文檔編號(hào)G06F9/44GK101887367SQ201010205530
公開日2010年11月17日 申請(qǐng)日期2010年6月22日 優(yōu)先權(quán)日2010年6月22日
發(fā)明者于策, 孫濟(jì)洲, 孫超, 張濤, 徐禎, 湯善江, 王萌萌 申請(qǐng)人:天津大學(xué)