国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種面向CPU/GPU異構(gòu)集群的數(shù)據(jù)流編程方法和系統(tǒng)與流程

      文檔序號(hào):12887031閱讀:412來源:國(guó)知局
      一種面向CPU/GPU異構(gòu)集群的數(shù)據(jù)流編程方法和系統(tǒng)與流程

      本發(fā)明屬于計(jì)算機(jī)編譯技術(shù)領(lǐng)域,更具體地,涉及一種面向cpu/gpu異構(gòu)集群的數(shù)據(jù)流編程方法和系統(tǒng)。



      背景技術(shù):

      傳統(tǒng)cpu多核處理器和cpu集群有時(shí)無法滿足某些應(yīng)用程序?qū)Υ笠?guī)模和超大規(guī)模計(jì)算的需求,圖形處理器(graphicprocessingunit,gpu)在諸如cpu/gpu異構(gòu)架構(gòu)服務(wù)器上的高性能浮點(diǎn)計(jì)算、并行計(jì)算等方面有巨大的優(yōu)勢(shì),因此逐漸得到廣泛應(yīng)用。一種多cpu與多gpu相結(jié)合的異構(gòu)計(jì)算機(jī)逐漸成為研究對(duì)象,在該架構(gòu)下,傳統(tǒng)核cpu與計(jì)算核gpu可以同時(shí)工作,任務(wù)以多粒度并行方式執(zhí)行。因此,cpu/gpu異構(gòu)集群系統(tǒng)成為了一個(gè)解決超大規(guī)模計(jì)算問題值得深入探索的高效編程平臺(tái)。數(shù)據(jù)流編程語言(dataflowprogramminglanguage,dfpl)以其能夠面向領(lǐng)域編程(domainspecificprogramming)的特征近年來得到廣泛應(yīng)用,與該語言對(duì)應(yīng)的數(shù)據(jù)流編程模型(dataflowstreamprogrammingmodel)因其具有將計(jì)算與通信分離的特性,被研究人員發(fā)現(xiàn)并提出。在當(dāng)前需要高性能計(jì)算的大數(shù)據(jù)時(shí)代,傳統(tǒng)并行計(jì)算模型已經(jīng)不能滿足大規(guī)模應(yīng)用的性能需求。

      在以高性能計(jì)算為核心的大數(shù)據(jù)時(shí)代,傳統(tǒng)多核并行模型已經(jīng)不能滿足大規(guī)模計(jì)算的需求。傳統(tǒng)多核集群平臺(tái)下的任務(wù)劃分與調(diào)度方法并不能在異構(gòu)體系下簡(jiǎn)單復(fù)制,傳統(tǒng)cpu集群平臺(tái)下的大規(guī)模并行計(jì)算模型都會(huì)采用如hadoop、spark、strom等分布式存儲(chǔ)框架來提供服務(wù)器節(jié)點(diǎn)間的網(wǎng)絡(luò)數(shù)據(jù)通信?,F(xiàn)有的cpu與gpu同時(shí)工作存在無法合理分配目標(biāo)體系結(jié)構(gòu)下的硬件資源,沒有充分挖掘數(shù)據(jù)流程序中存在的并行性,程序性能較低的技術(shù)問題。



      技術(shù)實(shí)現(xiàn)要素:

      針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種面向cpu/gpu異構(gòu)集群的數(shù)據(jù)流編程方法和系統(tǒng),現(xiàn)有的cpu與gpu同時(shí)工作存在無法合理分配目標(biāo)體系結(jié)構(gòu)下的硬件資源,沒有充分挖掘數(shù)據(jù)流程序中存在的并行性,程序性能較低的技術(shù)問題。

      為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種面向cpu/gpu異構(gòu)集群的數(shù)據(jù)流編程方法,包括以下步驟:

      (1)利用數(shù)據(jù)流程序得到sdf圖,對(duì)sdf圖進(jìn)行層次性二級(jí)任務(wù)劃分與調(diào)度,得到sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射;

      (2)根據(jù)sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射,對(duì)每個(gè)任務(wù)單元設(shè)置階段號(hào),得到任務(wù)單元的執(zhí)行順序;

      (3)將異構(gòu)集群節(jié)點(diǎn)之間以生產(chǎn)者/消費(fèi)者模式為基礎(chǔ),與mpi接口保持一致,將每個(gè)異構(gòu)集群節(jié)點(diǎn)以分布式存儲(chǔ)和共享存儲(chǔ)相結(jié)合的方式,構(gòu)造cpu和gpu共享存儲(chǔ)空間,得到異構(gòu)集群多任務(wù)數(shù)據(jù)通信模型;

      (4)利用sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射和異構(gòu)集群多任務(wù)數(shù)據(jù)通信模型,得到任務(wù)單元之間的數(shù)據(jù)通信,根據(jù)任務(wù)單元的執(zhí)行順序和任務(wù)單元之間的數(shù)據(jù)通信得到數(shù)據(jù)流程序的目標(biāo)代碼。

      進(jìn)一步的,步驟(1)的具體實(shí)現(xiàn)方式:

      對(duì)數(shù)據(jù)流程序進(jìn)行詞法分析和語法分析后得到的sdf圖,對(duì)sdf圖進(jìn)行進(jìn)程級(jí)任務(wù)劃分,得到sdf子圖,sdf子圖反映sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的映射,對(duì)sdf子圖進(jìn)行線程級(jí)任務(wù)劃分,得到sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射。

      進(jìn)一步的,進(jìn)程級(jí)任務(wù)劃分的具體實(shí)現(xiàn)方式為:

      將sdf圖的每個(gè)任務(wù)單元預(yù)處理為一個(gè)獨(dú)立的粗化group;根據(jù)相鄰group粗化收益,進(jìn)行粗粒度劃分直到劃分粗化圖個(gè)數(shù)等于異構(gòu)集群節(jié)點(diǎn)個(gè)數(shù);利用細(xì)粒度邊界調(diào)整粗化圖,生成的無環(huán)子圖為sdf子圖。

      進(jìn)一步的,線程級(jí)任務(wù)劃分的具體實(shí)現(xiàn)方式為:

      對(duì)sdf子圖進(jìn)行任務(wù)單元融合和邊界調(diào)整,得到sdf子圖劃分后的凸子圖,進(jìn)而得到凸子圖到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射,利用凸子圖與任務(wù)單元的映射關(guān)系,得到sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射。

      進(jìn)一步的,設(shè)置階段號(hào)的具體實(shí)現(xiàn)方式為:

      遍歷異構(gòu)集群節(jié)點(diǎn)根據(jù)進(jìn)程級(jí)任務(wù)劃分獲取的sdf子圖;對(duì)sdf子圖的任務(wù)單元集合進(jìn)行拓?fù)渑判?,選擇對(duì)應(yīng)的階段賦值函數(shù)設(shè)置每個(gè)任務(wù)單元的階段號(hào)。

      按照本發(fā)明的另一方面,提供了一種面向cpu/gpu異構(gòu)集群的數(shù)據(jù)流編程系統(tǒng),包括以下步驟:

      二級(jí)任務(wù)劃分與調(diào)度模塊,用于利用數(shù)據(jù)流程序得到sdf圖,對(duì)sdf圖進(jìn)行層次性二級(jí)任務(wù)劃分與調(diào)度,得到sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射;

      設(shè)置階段號(hào)模塊,用于根據(jù)sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射,對(duì)每個(gè)任務(wù)單元設(shè)置階段號(hào),得到任務(wù)單元的執(zhí)行順序;

      數(shù)據(jù)通信模塊,用于將異構(gòu)集群節(jié)點(diǎn)之間以生產(chǎn)者/消費(fèi)者模式為基礎(chǔ),與mpi接口保持一致,將每個(gè)異構(gòu)集群節(jié)點(diǎn)以分布式存儲(chǔ)和共享存儲(chǔ)相結(jié)合的方式,構(gòu)造cpu和gpu共享存儲(chǔ)空間,得到異構(gòu)集群多任務(wù)數(shù)據(jù)通信模型;

      目標(biāo)代碼模塊,用于利用sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射和異構(gòu)集群多任務(wù)數(shù)據(jù)通信模型,得到任務(wù)單元之間的數(shù)據(jù)通信,根據(jù)任務(wù)單元的執(zhí)行順序和任務(wù)單元之間的數(shù)據(jù)通信得到數(shù)據(jù)流程序的目標(biāo)代碼。

      進(jìn)一步的,二級(jí)任務(wù)劃分與調(diào)度模塊的具體實(shí)現(xiàn)方式:

      對(duì)數(shù)據(jù)流程序進(jìn)行詞法分析和語法分析后得到的sdf圖,對(duì)sdf圖進(jìn)行進(jìn)程級(jí)任務(wù)劃分,得到sdf子圖,sdf子圖反映sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的映射,對(duì)sdf子圖進(jìn)行線程級(jí)任務(wù)劃分,得到sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射。

      進(jìn)一步的,進(jìn)程級(jí)任務(wù)劃分的具體實(shí)現(xiàn)方式為:

      將sdf圖的每個(gè)任務(wù)單元預(yù)處理為一個(gè)獨(dú)立的粗化group;根據(jù)相鄰group粗化收益,進(jìn)行粗粒度劃分直到劃分粗化圖個(gè)數(shù)等于異構(gòu)集群節(jié)點(diǎn)個(gè)數(shù);利用細(xì)粒度邊界調(diào)整粗化圖,生成的無環(huán)子圖為sdf子圖。

      進(jìn)一步的,線程級(jí)任務(wù)劃分的具體實(shí)現(xiàn)方式為:

      對(duì)sdf子圖進(jìn)行任務(wù)單元融合和邊界調(diào)整,得到sdf子圖劃分后的凸子圖,進(jìn)而得到凸子圖到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射,利用凸子圖與任務(wù)單元的映射關(guān)系,得到sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射。

      進(jìn)一步的,設(shè)置階段號(hào)的具體實(shí)現(xiàn)方式為:

      遍歷異構(gòu)集群節(jié)點(diǎn)根據(jù)進(jìn)程級(jí)任務(wù)劃分獲取的sdf子圖;對(duì)sdf子圖的任務(wù)單元集合進(jìn)行拓?fù)渑判颍x擇對(duì)應(yīng)的階段賦值函數(shù)設(shè)置每個(gè)任務(wù)單元的階段號(hào)。

      總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:

      (1)本發(fā)明提供的數(shù)據(jù)流編程方法以數(shù)據(jù)流程序經(jīng)詞法分析和語法分析后得到的同步數(shù)據(jù)流圖(sdf圖)作為輸入,對(duì)其依次進(jìn)行層次性二級(jí)任務(wù)劃分與調(diào)度、設(shè)置階段號(hào)、數(shù)據(jù)通信,最后生成目標(biāo)代碼。完成數(shù)據(jù)流程序的并行化處理,提高執(zhí)行性能。使得cpu與gpu同時(shí)工作合理分配目標(biāo)體系結(jié)構(gòu)下的硬件資源,充分挖掘數(shù)據(jù)流程序中存在的并行性,提高程序性能。

      (2)優(yōu)選的,對(duì)數(shù)據(jù)流程序經(jīng)詞、語法分析后得到的sdf圖進(jìn)行進(jìn)程級(jí)任務(wù)劃分和線程級(jí)任務(wù)劃分后,將sdf圖內(nèi)任務(wù)單元負(fù)載均衡的映射到異構(gòu)集群節(jié)點(diǎn)內(nèi)cpu核或gpu上,使得任務(wù)單元執(zhí)行并行化,提高程序執(zhí)行性能。

      (3)優(yōu)選的,進(jìn)程級(jí)任務(wù)劃分同時(shí)考慮異構(gòu)集群節(jié)點(diǎn)間負(fù)載均衡與通信開銷,將sdf圖劃分為多個(gè)無環(huán)子圖分別映射到異構(gòu)集群各節(jié)點(diǎn)上,將sdf圖各任務(wù)單元在異構(gòu)集群各節(jié)點(diǎn)上并行執(zhí)行,提高程序整體執(zhí)行性能。

      (4)優(yōu)選的,線程級(jí)任務(wù)劃分考慮異構(gòu)集群節(jié)點(diǎn)內(nèi)cpu核間或gpu間負(fù)載均衡和通信開銷,將sdf子圖內(nèi)任務(wù)單元映射到不同cpu核或gpu上并行執(zhí)行,提高程序執(zhí)行性能。

      (5)優(yōu)選的,對(duì)sdf圖內(nèi)任務(wù)單元計(jì)算階段號(hào),得到各個(gè)任務(wù)單元的執(zhí)行順序,完成流水線并行,提高程序執(zhí)行性能。

      附圖說明

      圖1為本發(fā)明實(shí)施例提供的一種面向cpu/gpu異構(gòu)集群的數(shù)據(jù)流編程方法的流程圖;

      圖2為本發(fā)明實(shí)施例1提供面向cpu/gpu異構(gòu)集群的數(shù)據(jù)流編程框架圖;

      圖3為本發(fā)明實(shí)施例1中進(jìn)程級(jí)多路圖劃分算法流程圖;

      圖4為本發(fā)明實(shí)施例1中線程級(jí)動(dòng)態(tài)適應(yīng)性劃分算法中sdf子圖actor融合示例圖;

      圖5本發(fā)明實(shí)施例1中線程級(jí)動(dòng)態(tài)適應(yīng)性劃分算法中sdf子圖actor節(jié)點(diǎn)映射示例圖;

      圖6為本發(fā)明實(shí)施例1中集群節(jié)點(diǎn)內(nèi)actor階段賦值示例圖;

      圖7為本發(fā)明實(shí)施例1中異構(gòu)集群系統(tǒng)多任務(wù)數(shù)據(jù)通信框架圖;

      圖8為本發(fā)明實(shí)施例1中異構(gòu)集群節(jié)點(diǎn)內(nèi)數(shù)據(jù)通信存儲(chǔ)映射機(jī)制模型圖;

      具體實(shí)施方式

      為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。

      如圖1所示,一種面向cpu/gpu異構(gòu)集群的數(shù)據(jù)流編程方法,包括以下步驟:

      (1)對(duì)數(shù)據(jù)流程序進(jìn)行詞法分析和語法分析后得到的sdf圖,對(duì)sdf圖進(jìn)行層次性二級(jí)任務(wù)劃分與調(diào)度,得到sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射;

      (2)根據(jù)sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射,對(duì)每個(gè)任務(wù)單元設(shè)置階段號(hào),得到任務(wù)單元的執(zhí)行順序;

      (3)將異構(gòu)集群節(jié)點(diǎn)之間以生產(chǎn)者/消費(fèi)者模式為基礎(chǔ),與mpi接口保持一致,將每個(gè)異構(gòu)集群節(jié)點(diǎn)以分布式存儲(chǔ)和共享存儲(chǔ)相結(jié)合的方式,構(gòu)造cpu和gpu共享存儲(chǔ)空間,得到異構(gòu)集群多任務(wù)數(shù)據(jù)通信模型;

      (4)利用sdf圖中任務(wù)單元到異構(gòu)集群節(jié)點(diǎn)的cpu核或gpu的映射和異構(gòu)集群多任務(wù)數(shù)據(jù)通信模型,得到任務(wù)單元之間的數(shù)據(jù)通信,根據(jù)任務(wù)單元的執(zhí)行順序和任務(wù)單元之間的數(shù)據(jù)通信得到數(shù)據(jù)流程序的目標(biāo)代碼。

      實(shí)施例1

      如圖2所示為本實(shí)施例1在costream數(shù)據(jù)流編譯系統(tǒng)中的編譯框架圖,以costream語言編寫的數(shù)據(jù)流程序作為初步輸入,通過costream編譯系統(tǒng)前端進(jìn)行詞法分析和語義分析將源程序構(gòu)造成由頂層文法節(jié)點(diǎn)表示的抽象語法樹;對(duì)該抽象語法樹轉(zhuǎn)換為一個(gè)以任務(wù)單元actor為單位通過數(shù)據(jù)流stream連接而成的有向無環(huán)圖即sdf圖,圖中節(jié)點(diǎn)對(duì)應(yīng)源程序任務(wù)單元表示計(jì)算,邊對(duì)應(yīng)源程序數(shù)據(jù)流表示節(jié)點(diǎn)間的依賴關(guān)系與數(shù)據(jù)通信方向;以源程序?qū)?yīng)的sdf圖為處理對(duì)象,根據(jù)異構(gòu)集群節(jié)點(diǎn)數(shù)目以及節(jié)點(diǎn)內(nèi)硬件結(jié)構(gòu)配置分別進(jìn)行層次性二級(jí)任務(wù)劃分與調(diào)度;然后根據(jù)sdf圖內(nèi)actor到集群節(jié)點(diǎn)內(nèi)cpu核或gpu的映射結(jié)果進(jìn)行階段賦值,構(gòu)造軟件流水線;多任務(wù)流數(shù)據(jù)通信包括并行任務(wù)間(進(jìn)程間)消息傳遞和單個(gè)任務(wù)內(nèi)(進(jìn)程內(nèi))主控程序與計(jì)算kernel間數(shù)據(jù)通信。系統(tǒng)采用分布式存儲(chǔ)與共享存儲(chǔ)相結(jié)合的方式,并行任務(wù)間消息傳遞與傳統(tǒng)mpi接口保持一致,單個(gè)任務(wù)流內(nèi)提供數(shù)據(jù)共享,使得cpu主控程序和gpu計(jì)算kernel通過對(duì)共享數(shù)據(jù)的訪問隱藏系統(tǒng)主存與顯存之間的顯式數(shù)據(jù)傳輸。

      (1)完成costream數(shù)據(jù)流源程序?qū)?yīng)的sdf圖內(nèi)actor與異構(gòu)集群節(jié)點(diǎn)及節(jié)點(diǎn)內(nèi)cpu核或gpu映射的二級(jí)任務(wù)劃分與調(diào)度步驟

      該步驟包括兩個(gè)子步驟:進(jìn)程級(jí)任務(wù)劃分和線程級(jí)任務(wù)劃分。集群節(jié)點(diǎn)間的任務(wù)劃分在進(jìn)程級(jí)層面即屬于一級(jí)劃分,合理的將sdf圖的任務(wù)單元?jiǎng)澐值礁鱾€(gè)服務(wù)器節(jié)點(diǎn)是后續(xù)處理的基礎(chǔ)也是整個(gè)數(shù)據(jù)流并行編程模型的關(guān)鍵。異構(gòu)并行系統(tǒng)又具有其獨(dú)特性,節(jié)點(diǎn)內(nèi)任務(wù)劃分在線程級(jí)層面屬于二級(jí)劃分,需要考慮當(dāng)前服務(wù)器節(jié)點(diǎn)的結(jié)構(gòu)特征,對(duì)純cpu服務(wù)器節(jié)點(diǎn)考慮負(fù)載均衡的將任務(wù)映射到cpu多核,而對(duì)cpu/gpu混合架構(gòu)服務(wù)器節(jié)點(diǎn)則同時(shí)考慮負(fù)載均衡與降低通信開銷的情況下將并行任務(wù)劃分到gpu端,提高程序執(zhí)行性能。具體步驟如下:

      (1.1)進(jìn)程級(jí)任務(wù)劃分:集群節(jié)點(diǎn)間任務(wù)劃分不僅需要綜合考慮actor的工作量以達(dá)到劃分后負(fù)載相對(duì)均衡,而且需要衡量actor之間的數(shù)據(jù)依賴關(guān)系,最大程度的降低劃分后子圖之間的數(shù)據(jù)通信開銷,以使得負(fù)載和通信最優(yōu)化,充分利用集群硬件資源。多層k路圖劃分策略(multilevelk-waypartitioningscheme)以圖論相關(guān)知識(shí)為基礎(chǔ)是一種針對(duì)一般圖的劃分算法,它主要考慮劃分各部分負(fù)載相對(duì)均衡同時(shí)減少劃分之間的通信,相對(duì)來說可以得到不錯(cuò)的劃分結(jié)果,由于數(shù)據(jù)流源程序?qū)?yīng)的sdf圖是一個(gè)有向無環(huán)圖,結(jié)合sdf圖本身包含的數(shù)據(jù)流的特性以及集群節(jié)點(diǎn)間網(wǎng)絡(luò)延遲帶來的通信開銷影響對(duì)mkp劃分算法改進(jìn),設(shè)計(jì)并實(shí)現(xiàn)了進(jìn)程級(jí)多路圖劃分算法。如圖3所示,具體步驟為:首先輸入costream源程序?qū)?yīng)的sdf圖,將每個(gè)actor預(yù)處理為一個(gè)獨(dú)立的粗化group;然后,計(jì)算相鄰group的粗化收益進(jìn)行粗粒度劃分直到劃分子圖個(gè)數(shù)等于集群節(jié)點(diǎn)個(gè)數(shù);最后,細(xì)粒度邊界調(diào)整粗化圖,生成無環(huán)子圖降低節(jié)點(diǎn)間的通信開銷,并將結(jié)果映射到集群節(jié)點(diǎn)。

      (1.2)線程級(jí)任務(wù)劃分:進(jìn)程級(jí)多路圖任務(wù)劃分將sdf圖劃分為多個(gè)子圖,使得每個(gè)子圖的任務(wù)單元actor映射到對(duì)應(yīng)的集群節(jié)點(diǎn),下一步對(duì)于劃分到每個(gè)服務(wù)器節(jié)點(diǎn)上的sdf子圖進(jìn)行線程級(jí)任務(wù)劃分完成actor到集群節(jié)點(diǎn)內(nèi)cpu核心或gpu之間的映射。由于經(jīng)過進(jìn)程級(jí)一級(jí)任務(wù)劃分后,每個(gè)集群節(jié)點(diǎn)上映射一個(gè)sdf子圖,任務(wù)量已大大減少,對(duì)于部分并行任務(wù)量不足的應(yīng)用程序如果強(qiáng)制劃分到所有cpu核心或全部gpu,非但不能提高并行度還會(huì)增大核間或gpu間通信開銷降低程序執(zhí)行性能。因此,考慮到數(shù)據(jù)流程序一級(jí)任務(wù)劃分映射后的actor工作量對(duì)以上算法做出改進(jìn),設(shè)計(jì)并實(shí)現(xiàn)了一種線程級(jí)動(dòng)態(tài)適應(yīng)性劃分算法,該算法在運(yùn)行時(shí)根據(jù)actor工作負(fù)載確定最終劃分份數(shù),最大程度上實(shí)現(xiàn)任務(wù)并行化同時(shí)最小化數(shù)據(jù)通信開銷。該算法基本步驟為:

      (1.2.1)sdf子圖actor節(jié)點(diǎn)融合:如圖4所示,遍歷actor節(jié)點(diǎn)集合根據(jù)達(dá)到穩(wěn)態(tài)調(diào)度后計(jì)算的工作量與通信量構(gòu)鄰接點(diǎn)融合收益值,根據(jù)相鄰節(jié)點(diǎn)融合收益值從大到小依次進(jìn)行節(jié)點(diǎn)融合。具體操作為:對(duì)當(dāng)前異構(gòu)集群節(jié)點(diǎn)映射的sdf子圖包含的actor集合,每個(gè)actor看為一個(gè)set,進(jìn)行拓?fù)渑判颍粚?duì)排序后的拓?fù)湫蛄屑弦来翁幚?,?duì)每個(gè)set遍歷其上下鄰接節(jié)點(diǎn)集合,判斷相鄰set融合收益,若收益為正則進(jìn)行融合;對(duì)每次融合后的set集合構(gòu)成的子圖計(jì)算當(dāng)前劃分子圖的負(fù)載與劃分理論平均負(fù)載,調(diào)整當(dāng)前劃分移除負(fù)載大的set,直到該子圖負(fù)載小于或等于理論平均負(fù)載。

      (1.2.2)邊界調(diào)整:考慮負(fù)載均衡并使得每個(gè)劃分子圖為凸子圖。為了最大程度的降低各個(gè)粗化劃分子圖之間的通信開銷,對(duì)每個(gè)劃分子圖進(jìn)行邊界調(diào)整,保證每個(gè)劃分子圖p都是一個(gè)凸子圖(converxsubgraph,cs),非凸子圖(non-convetxsubgraph,ncs)會(huì)導(dǎo)致相鄰子圖之間高額的通信開銷。對(duì)于cs定義如下:如果圖p,滿足結(jié)點(diǎn)一邊結(jié)構(gòu)為g(v,c),不存在任何一條從結(jié)點(diǎn)vm到vn且包含結(jié)點(diǎn)vp的邊,其中,vm∈p,vn∈p,則圖p稱為凸子圖。

      (1.2.3)sdf劃分子圖與actor節(jié)點(diǎn)映射關(guān)系映射:如圖5所示,該步驟相當(dāng)于一個(gè)反融合操作,對(duì)每個(gè)劃分子圖進(jìn)行逆向還原得到每個(gè)actor對(duì)應(yīng)的劃分編號(hào)。具體步驟為:經(jīng)sdf子圖actor節(jié)點(diǎn)映射及邊界調(diào)整后,得到粗化圖p0,p1,p2,每個(gè)粗化圖內(nèi)包含一個(gè)actor集合;同時(shí)考慮負(fù)載均衡和減少子圖間的通信開銷適當(dāng)調(diào)整邊界actor節(jié)點(diǎn),然后進(jìn)行逆向處理;得到每個(gè)actor與劃分子圖編號(hào)的映射關(guān)系。

      (2)根據(jù)層次性二級(jí)任務(wù)劃分與調(diào)度結(jié)果構(gòu)造進(jìn)行階段賦值構(gòu)造軟件流水線步驟

      該步驟主要針對(duì)步驟(1)的任務(wù)劃分結(jié)果確定進(jìn)程級(jí)和線程級(jí)劃分的任務(wù)的流水線執(zhí)行過程,使得程序執(zhí)行延遲盡可能的小。為了使得數(shù)據(jù)流應(yīng)用程序經(jīng)并行化處理后正確執(zhí)行,根據(jù)二級(jí)劃分映射結(jié)果對(duì)每個(gè)actor設(shè)置階段號(hào)確定執(zhí)行順序,構(gòu)造軟件流水線調(diào)度。階段賦值算法步驟為:遍歷集群節(jié)點(diǎn)根據(jù)一級(jí)任務(wù)劃分結(jié)果獲取映射到當(dāng)前服務(wù)器節(jié)點(diǎn)的sdf子圖;對(duì)sdf子圖actor集合進(jìn)行拓?fù)渑判?,根?jù)服務(wù)器節(jié)點(diǎn)硬件結(jié)構(gòu)選擇對(duì)應(yīng)的階段賦值函數(shù)計(jì)算每個(gè)actor的執(zhí)行階段號(hào)。如圖6所示,圖6(a)描述了cpu多核服務(wù)器架構(gòu)階段賦值處理方式:對(duì)于指定的actor如果其父actor與其分配在相同服務(wù)器和相同cpu核,則當(dāng)前actor階段號(hào)與父actor相同;如果其父actor與其分配在相同服務(wù)器但是不同cpu核,則當(dāng)前actor對(duì)其父actor的執(zhí)行階段有依賴關(guān)系,階段號(hào)為父actor階段號(hào)加1;如果父actor分配在不同服務(wù)器,此時(shí)涉及到集群節(jié)點(diǎn)間的異步流水,則當(dāng)前actor階段號(hào)設(shè)置為父actor階段號(hào)加2。圖6(b)描述了cpu/gpu混合架構(gòu)服務(wù)器階段賦值處理方式:在混合架構(gòu)內(nèi)為actor設(shè)置階段號(hào)需要同時(shí)考慮是否與其父節(jié)點(diǎn)分配到相同服務(wù)器以及同時(shí)映射到cpu端或gpu端,若與父actor同時(shí)分配到一個(gè)服務(wù)器內(nèi)的相同cpu核或同一個(gè)gpu,則當(dāng)前actor階段號(hào)與其父actor相同;若與父actor同時(shí)分配到一個(gè)服務(wù)器內(nèi)的cpu端或gpu端,但是不在同一核或同一gpu上,則階段號(hào)為父actot加1;若當(dāng)前actor與父actor不在同一服務(wù)器上或者分別位于cpu端和gpu端,則需要再增加一個(gè)階段號(hào)處理集群節(jié)點(diǎn)間的異步流水或混合架構(gòu)服務(wù)器節(jié)點(diǎn)內(nèi)cpu與gpu間的數(shù)據(jù)通信,當(dāng)前actor階段號(hào)為父actor加2。

      (3)根據(jù)異構(gòu)集群硬件架構(gòu),對(duì)集群節(jié)點(diǎn)間網(wǎng)絡(luò)通信和節(jié)點(diǎn)內(nèi)數(shù)據(jù)通信采用mpi/opencl混合編程模型構(gòu)造多任務(wù)數(shù)據(jù)通信步驟

      面向cpu/gpu的異構(gòu)集群平臺(tái)是由傳統(tǒng)cpu服務(wù)器與圖形處理器gpu構(gòu)成的架構(gòu),不僅需要考慮服務(wù)器節(jié)點(diǎn)之間的網(wǎng)絡(luò)通信,還需要考慮將并行計(jì)算任務(wù)移植到gpu上執(zhí)行同時(shí)完成節(jié)點(diǎn)內(nèi)數(shù)據(jù)通信。基于以上需求,設(shè)計(jì)并實(shí)現(xiàn)一種mpi/opencl混合編程模型,如圖7所示,對(duì)于系統(tǒng)內(nèi)任務(wù)流之間采用基于生產(chǎn)者/消費(fèi)者模式的消息傳遞機(jī)制控制數(shù)據(jù)通信,任務(wù)流內(nèi)cpu上運(yùn)行的邏輯處理主控程序模塊和gpu上運(yùn)行的大數(shù)據(jù)量kernel計(jì)算模塊,通過構(gòu)造共享緩沖區(qū)實(shí)現(xiàn)數(shù)據(jù)通信。

      (3.1)節(jié)點(diǎn)間數(shù)據(jù)通信:數(shù)據(jù)流源程序?qū)?yīng)的同步數(shù)據(jù)流任務(wù)圖經(jīng)過二級(jí)任務(wù)劃分后,完成了將整個(gè)sdf圖中所有actor任務(wù)單元到集群節(jié)點(diǎn)編號(hào)以及節(jié)點(diǎn)內(nèi)cpu核與gpu的映射。每個(gè)集群節(jié)點(diǎn)劃分到的部分actor任務(wù)單元對(duì)應(yīng)一個(gè)sdf子圖,內(nèi)部actor通過共享存儲(chǔ)實(shí)現(xiàn)數(shù)據(jù)通信,而邊界actor通過消息傳遞機(jī)制完成。因此,節(jié)點(diǎn)間數(shù)據(jù)通信模塊分為構(gòu)造發(fā)送、接收緩沖區(qū),sdf子圖內(nèi)actor間通信邊構(gòu)造兩個(gè)步驟來完成。

      (3.1.1)構(gòu)造發(fā)送、接收緩沖區(qū):異構(gòu)集群節(jié)點(diǎn)間數(shù)據(jù)通信基于以消息傳遞機(jī)制為基礎(chǔ)的mpi并行編程模型實(shí)現(xiàn),mpi提供了一組可以直接調(diào)用的可靠的通信接口。結(jié)合數(shù)據(jù)流程序的特性,構(gòu)造生產(chǎn)者、消費(fèi)者通用類,。將發(fā)送、接收緩沖區(qū)封裝起來,并選擇利用mpi非阻塞消息傳遞機(jī)制使得計(jì)算與數(shù)據(jù)通信盡可能重疊執(zhí)行,降低通信開銷。

      (3.1.2)對(duì)每個(gè)集群服務(wù)器節(jié)點(diǎn)映射的sdf子圖內(nèi)各個(gè)actor與其相鄰actor之間構(gòu)造通信邊。遍歷異構(gòu)集群服務(wù)器節(jié)點(diǎn)得到每個(gè)節(jié)點(diǎn)對(duì)應(yīng)sdf子圖的actor集合;對(duì)當(dāng)前任務(wù)單元curactor的所有出邊連接的任務(wù)單元outactor進(jìn)行分析,得到其劃分到的集群節(jié)點(diǎn)劃分編號(hào);若被劃分到同一臺(tái)服務(wù)器節(jié)點(diǎn)則兩者通過共享存儲(chǔ)實(shí)現(xiàn)數(shù)據(jù)傳輸,否則curactor作為生產(chǎn)者角色,outactor作為消費(fèi)者角色構(gòu)造網(wǎng)絡(luò)通信邊實(shí)現(xiàn)數(shù)據(jù)傳輸。

      (3.2)節(jié)點(diǎn)內(nèi)cpu端邏輯任務(wù)與gpu端kernel計(jì)算的數(shù)據(jù)通信。數(shù)據(jù)流程序的多級(jí)任務(wù)劃分,對(duì)sdf圖中所有actor分析,根據(jù)每個(gè)actor的狀態(tài)完成了各個(gè)任務(wù)單元向cpu端或gpu端的分配與映射。劃分到cpu端的actor依然按照原始方式完成,劃分到gpu端的actor將核心計(jì)算任務(wù)通過opencl的kernel來完成。因此,異構(gòu)集群節(jié)點(diǎn)內(nèi)的數(shù)據(jù)通信即是cpu端邏輯任務(wù)與gpu端kernel計(jì)算的數(shù)據(jù)通信。

      如圖8所示,一種系統(tǒng)主存/顯存問存儲(chǔ)映射機(jī)制來實(shí)現(xiàn)集群節(jié)點(diǎn)任務(wù)流內(nèi)cpu與gpu能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)的共享訪問。存儲(chǔ)空間p是為cpu和gpu提供的一個(gè)共享空間,由系統(tǒng)主存host和顯存device相互映射而成,cpu邏輯任務(wù)可直接訪問,gpu計(jì)算任務(wù)通過opencl提供的api間接訪問

      本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。

      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1