匹配于高性能計(jì)算機(jī)結(jié)構(gòu)的多級(jí)嵌套數(shù)據(jù)驅(qū)動(dòng)計(jì)算方法
【專(zhuān)利摘要】本發(fā)明提供了一種匹配于高性能計(jì)算機(jī)結(jié)構(gòu)的多級(jí)嵌套數(shù)據(jù)驅(qū)動(dòng)計(jì)算方法,該方法主要是為了適應(yīng)于高性能計(jì)算機(jī)的體系結(jié)構(gòu),包括:匹配計(jì)算資源即計(jì)算節(jié)點(diǎn)-處理器-處理器核的進(jìn)程-線程組-線程的三級(jí)嵌套并行計(jì)算組織,其中,在進(jìn)程以及線程組兩級(jí)采用靜態(tài)數(shù)據(jù)分配方法且在線程組內(nèi)支持任務(wù)動(dòng)態(tài)調(diào)度,以及匹配網(wǎng)絡(luò)-內(nèi)存-緩存的三級(jí)嵌套數(shù)據(jù)通信與數(shù)據(jù)劃分。本方法解決了現(xiàn)有技術(shù)在實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算時(shí)面臨的計(jì)算并行性與數(shù)據(jù)局部性方面的低效問(wèn)題,達(dá)到了有效負(fù)載平衡并提高通信、訪存和計(jì)算效率的技術(shù)效果。
【專(zhuān)利說(shuō)明】匹配于高性能計(jì)算機(jī)結(jié)構(gòu)的多級(jí)嵌套數(shù)據(jù)驅(qū)動(dòng)計(jì)算方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,特別涉及一種匹配于高性能計(jì)算機(jī)結(jié)構(gòu)的多級(jí)嵌套數(shù)據(jù)驅(qū)動(dòng)計(jì)算方法。
【背景技術(shù)】
[0002]主流高性能計(jì)算機(jī)體系結(jié)構(gòu)是分布式多核多處理器機(jī)群,其發(fā)展趨勢(shì)是計(jì)算資源的增多與存儲(chǔ)層次的加深。具體而言,計(jì)算資源的組織層次為:機(jī)群一計(jì)算節(jié)點(diǎn)一處理器一處理器核,對(duì)應(yīng)存儲(chǔ)資源的組織層次為:分布式內(nèi)存一本地共享內(nèi)存一處理器最外層共享Cache-處理器核私有Cache,當(dāng)前高性能計(jì)算機(jī)系統(tǒng)的實(shí)際性能取決于程序的并行度和數(shù)據(jù)訪問(wèn)的局部性。
[0003]在高性能計(jì)算中,數(shù)據(jù)驅(qū)動(dòng)(Data-Driven)并行計(jì)算技術(shù)用于求解具有非規(guī)則數(shù)據(jù)依賴的問(wèn)題。數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算的實(shí)現(xiàn)通常分為三個(gè)步驟:
[0004]步驟1:將計(jì)算空間進(jìn)行劃分并分配給處理器計(jì)算資源(也可以稱(chēng)之為計(jì)算單元);
[0005]步驟2:用有向無(wú)環(huán)圖對(duì)劃分后的子空間之間的數(shù)據(jù)依賴關(guān)系進(jìn)行建模;
[0006]步驟3:按照上述有向圖指定的合法拓?fù)渑判?,運(yùn)行時(shí)依次驅(qū)動(dòng)就緒的子空間進(jìn)行并行計(jì)算。
[0007]在數(shù)據(jù)驅(qū)動(dòng)的并行計(jì)算過(guò)程中,通信與計(jì)算是交叉的,具有異步與非規(guī)則的特征,這為匹配當(dāng)前高性能計(jì)算機(jī)系統(tǒng)對(duì)并行性和數(shù)據(jù)局部性的要求提出了極大挑戰(zhàn)。傳統(tǒng)的標(biāo)準(zhǔn)并行計(jì)算模型,即分布式環(huán)境下基于MPI消息傳遞機(jī)制的多進(jìn)程并行以及共享存儲(chǔ)模式下基于OpenMP的多線程并行,均無(wú)法適應(yīng)當(dāng)前高性能計(jì)算機(jī)的三級(jí)并行(單機(jī)_處理器-處理器核)體系結(jié)構(gòu)且不能高效支持對(duì)運(yùn)行時(shí)就緒計(jì)算任務(wù)的動(dòng)態(tài)調(diào)度。
[0008]針對(duì)現(xiàn)有技術(shù)中在實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算時(shí)面臨的計(jì)算并行性與數(shù)據(jù)局部性方面的效率低下的技術(shù)問(wèn)題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0009]本發(fā)明實(shí)施例提供了一種匹配于高性能計(jì)算機(jī)結(jié)構(gòu)的多級(jí)嵌套數(shù)據(jù)驅(qū)動(dòng)計(jì)算方法,以解決現(xiàn)有技術(shù)中在實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算時(shí)面臨的計(jì)算并行性與數(shù)據(jù)局部性方面的效率低下的技術(shù)問(wèn)題,該方法包括:
[0010]將計(jì)算資源分為三級(jí)組織,所述三級(jí)組織包括:進(jìn)程、線程組和線程,其中,每個(gè)進(jìn)程對(duì)應(yīng)一個(gè)計(jì)算節(jié)點(diǎn),每個(gè)線程組對(duì)應(yīng)一個(gè)處理器,每個(gè)線程對(duì)應(yīng)一個(gè)處理器核;
[0011]在通信過(guò)程中,通過(guò)三級(jí)路由傳遞消息,其中,所述三級(jí)路由包括:進(jìn)程之間的物理網(wǎng)絡(luò)、線程組之間的數(shù)據(jù)通道和線程組內(nèi)部的線程之間的數(shù)據(jù)通道。
[0012]在一個(gè)實(shí)施例中,在每個(gè)線程組中分配一個(gè)主線程,除該主線程外的其它線程作為工作線程。
[0013]在一個(gè)實(shí)施例中,在數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算的過(guò)程中,主線程動(dòng)態(tài)調(diào)度可計(jì)算的數(shù)據(jù)塊,按照運(yùn)行時(shí)負(fù)載平衡的原則,將數(shù)據(jù)塊動(dòng)態(tài)分配給工作線程執(zhí)行計(jì)算。
[0014]在一個(gè)實(shí)施例中,按照運(yùn)行時(shí)負(fù)載平衡的原則,將數(shù)據(jù)塊動(dòng)態(tài)分配給工作線程執(zhí)行計(jì)算,包括:
[0015]主線程接收所在線程組的工作線程發(fā)送的消息;
[0016]主線程判斷接收的消息的目的地是否是所在線程組;
[0017]如果是,則將接收到的消息轉(zhuǎn)發(fā)給所在線程組的工作線程中負(fù)載最輕的工作線程。
[0018]在一個(gè)實(shí)施例中,在所述線程組內(nèi)部的線程之間的數(shù)據(jù)通道中,工作線程之間通過(guò)主線程的轉(zhuǎn)發(fā)進(jìn)行通信。
[0019]在一個(gè)實(shí)施例中,每個(gè)進(jìn)程中有一個(gè)主管線程,所述主管線程從所述進(jìn)程內(nèi)各個(gè)線程組的主線程中選舉產(chǎn)生,用于實(shí)現(xiàn)所在進(jìn)程與其它進(jìn)程之間的通信,以及實(shí)現(xiàn)機(jī)群范圍內(nèi)的全局同步。
[0020]在一個(gè)實(shí)施例中,所述主管線程實(shí)現(xiàn)所在進(jìn)程與其它進(jìn)程之間的通信,包括:
[0021]所述主管線程接收所在進(jìn)程的主線程發(fā)送的消息,并將接收的消息轉(zhuǎn)發(fā)至該消息的目的進(jìn)程的主管線程;
[0022]和/或,所述主管線程接收其它進(jìn)程的主管線程發(fā)送的消息,并將消息轉(zhuǎn)發(fā)至所在進(jìn)程內(nèi)的目的線程組的主線程。
[0023]在一個(gè)實(shí)施例中,所述主管線程實(shí)現(xiàn)機(jī)群范圍內(nèi)的全局同步,包括:
[0024]所述主管線程偵聽(tīng)機(jī)群范圍內(nèi)的全局同步信號(hào);
[0025]根據(jù)所述全局同步信號(hào)判斷整個(gè)計(jì)算任務(wù)是否結(jié)束;
[0026]如果計(jì)算結(jié)束,則設(shè)置所在進(jìn)程的數(shù)據(jù)驅(qū)動(dòng)為完成狀態(tài),并通知所在進(jìn)程內(nèi)的各個(gè)線程組退出。
[0027]在一個(gè)實(shí)施例中,從進(jìn)程內(nèi)各個(gè)線程組的主線程中選舉產(chǎn)生主管線程,包括:
[0028]競(jìng)爭(zhēng)互斥鎖;
[0029]獲得所述互斥鎖的主線程作為所在進(jìn)程的主管線程。
[0030]在一個(gè)實(shí)施例中,所述數(shù)據(jù)通道中傳輸?shù)氖侵羔?,指針指向的是?nèi)存空間,內(nèi)存空間中存儲(chǔ)有實(shí)際數(shù)據(jù)。
[0031]在本發(fā)明實(shí)施例中,將計(jì)算資源分為進(jìn)程、線程組和線程三級(jí)組織,其中,每個(gè)進(jìn)程對(duì)應(yīng)一個(gè)計(jì)算節(jié)點(diǎn),每個(gè)線程組對(duì)應(yīng)一個(gè)處理器,每個(gè)線程對(duì)應(yīng)一個(gè)處理器核;在通信過(guò)程中,通過(guò)進(jìn)程之間的物理網(wǎng)絡(luò)、線程組之間的數(shù)據(jù)通道和線程組內(nèi)部的線程之間的數(shù)據(jù)通道三級(jí)路由傳遞消息。通過(guò)匹配計(jì)算節(jié)點(diǎn)-處理器-處理器核的進(jìn)程-線程組-線程三級(jí)嵌套并行計(jì)算組織,其中,在進(jìn)程以及線程組兩級(jí)采用靜態(tài)數(shù)據(jù)分配方法且在線程組內(nèi)支持任務(wù)動(dòng)態(tài)調(diào)度,以及匹配網(wǎng)絡(luò)-內(nèi)存-緩存的三級(jí)嵌套數(shù)據(jù)通信與數(shù)據(jù)劃分,解決了現(xiàn)有技術(shù)中在實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算時(shí)面臨的計(jì)算并行性與數(shù)據(jù)局部性方面的低效問(wèn)題,達(dá)到了有效負(fù)載平衡并提高通信、訪存和計(jì)算效率的技術(shù)效果。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0032]此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,并不構(gòu)成對(duì)本發(fā)明的限定。在附圖中:
[0033]圖1是本發(fā)明實(shí)施例的匹配于高性能計(jì)算機(jī)結(jié)構(gòu)的多級(jí)嵌套數(shù)據(jù)驅(qū)動(dòng)計(jì)算方法的方法流程圖;
[0034]圖2是本發(fā)明實(shí)施例的機(jī)器節(jié)點(diǎn)內(nèi)三級(jí)嵌套的計(jì)算與通信組織示意圖;
[0035]圖3是本發(fā)明實(shí)施例的主線程與工作線程的執(zhí)行步驟方法流程圖;
[0036]圖4是本發(fā)明實(shí)施例的主管線程的執(zhí)行步驟方法流程圖;
[0037]圖5是本發(fā)明實(shí)施例的單向網(wǎng)格掃描的網(wǎng)格示意圖;
[0038]圖6是本發(fā)明實(shí)施例的有向無(wú)環(huán)的網(wǎng)格示意圖;
[0039]圖7是本發(fā)明實(shí)施例的數(shù)據(jù)驅(qū)動(dòng)單元的輸出走向圖;
[0040]圖8是本發(fā)明實(shí)施例的16*16的網(wǎng)格示意圖。
【具體實(shí)施方式】
[0041]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下面結(jié)合實(shí)施方式和附圖,對(duì)本發(fā)明做進(jìn)一步詳細(xì)說(shuō)明。在此,本發(fā)明的示意性實(shí)施方式及其說(shuō)明用于解釋本發(fā)明,但并不作為對(duì)本發(fā)明的限定。
[0042]在本例中,提出了一種匹配于高性能計(jì)算機(jī)結(jié)構(gòu)的多級(jí)嵌套數(shù)據(jù)驅(qū)動(dòng)計(jì)算方法,該方法主要是為了適應(yīng)于高性能計(jì)算機(jī)的體系結(jié)構(gòu),所述的高性能計(jì)算機(jī)就是多核多處理機(jī)群,如圖1所示,包括以下步驟:
[0043]步驟101:將計(jì)算資源分為三級(jí)組織,所述三級(jí)組織包括:進(jìn)程、線程組和線程,其中,每個(gè)進(jìn)程對(duì)應(yīng)一個(gè)計(jì)算節(jié)點(diǎn),每個(gè)線程組對(duì)應(yīng)一個(gè)處理器,每個(gè)線程對(duì)應(yīng)一個(gè)處理器核;
[0044]步驟102:在通信過(guò)程中,通過(guò)三級(jí)路由傳遞消息,其中,所述三級(jí)路由包括:進(jìn)程之間的物理網(wǎng)絡(luò)、線程組之間的數(shù)據(jù)通道和線程組內(nèi)部的線程之間的數(shù)據(jù)通道。
[0045]在本例中,將計(jì)算資源分為進(jìn)程、線程組和線程三級(jí)組織,其中,每個(gè)進(jìn)程對(duì)應(yīng)一個(gè)計(jì)算節(jié)點(diǎn),每個(gè)線程組對(duì)應(yīng)一個(gè)處理器,每個(gè)線程對(duì)應(yīng)一個(gè)處理器核;在通信過(guò)程中,通過(guò)進(jìn)程之間的物理網(wǎng)絡(luò)、線程組之間的數(shù)據(jù)通道和線程組內(nèi)部的線程之間的數(shù)據(jù)通道三級(jí)路由傳遞消息。通過(guò)匹配計(jì)算節(jié)點(diǎn)-處理器-處理器核的進(jìn)程-線程組-線程三級(jí)嵌套并行計(jì)算組織,其中,在進(jìn)程以及線程組兩級(jí)采用靜態(tài)數(shù)據(jù)分配方法且在線程組內(nèi)支持任務(wù)動(dòng)態(tài)調(diào)度,以及匹配網(wǎng)絡(luò)-內(nèi)存-緩存的三級(jí)嵌套數(shù)據(jù)通信與數(shù)據(jù)劃分,解決了現(xiàn)有技術(shù)中在實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算時(shí)面臨的計(jì)算并行性與數(shù)據(jù)局部性方面的低效問(wèn)題,達(dá)到了有效負(fù)載平衡并提高通信、訪存和計(jì)算效率的技術(shù)效果。
[0046]具體的,在實(shí)現(xiàn)的過(guò)程中,在每個(gè)線程組中分配一個(gè)主線程,除該主線程外的其它線程作為工作線程,在數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算的過(guò)程中,主線程動(dòng)態(tài)調(diào)度可計(jì)算的數(shù)據(jù)塊,按照運(yùn)行時(shí)負(fù)載平衡的原則,將數(shù)據(jù)塊動(dòng)態(tài)分配給工作線程執(zhí)行計(jì)算。
[0047]其中,主線程按照運(yùn)行時(shí)負(fù)載平衡的原則,將數(shù)據(jù)塊動(dòng)態(tài)分配給工作線程執(zhí)行計(jì)算,可以包括以下步驟:
[0048]步驟1:主線程接收所在線程組的工作線程發(fā)送的消息;
[0049]步驟2:主線程判斷接收的消息的目的地是否是所在線程組;
[0050]步驟3:如果是,則將接收到的消息轉(zhuǎn)發(fā)給所在線程組的工作線程中負(fù)載最輕的工作線程。
[0051]主線程承載的不僅是所在線程組中的各個(gè)線程之間的通信,還需要負(fù)責(zé)所在線程組與其它線程組之間的通信,即進(jìn)程內(nèi)的通信。
[0052]為了實(shí)現(xiàn)全局的通信和管理,在每個(gè)進(jìn)程組中還會(huì)選舉產(chǎn)生一個(gè)主管線程(即leader線程),該主管線程可以是從進(jìn)程內(nèi)各個(gè)線程組的主線程(即master線程)中選舉產(chǎn)生的,用于實(shí)現(xiàn)所在進(jìn)程與其它進(jìn)程之間的通信,還用于實(shí)現(xiàn)機(jī)群范圍內(nèi)的全局同步,具體的包括:
[0053]I)主管線程接收所在進(jìn)程的主線程發(fā)送的消息,并將接收的消息轉(zhuǎn)發(fā)至該消息的目的進(jìn)程的主管線程;
[0054]2)主管線程接收其它進(jìn)程的主管線程發(fā)送的消息,并將消息轉(zhuǎn)發(fā)至所在進(jìn)程內(nèi)的目的線程組的主線程。
[0055]3)主管線程偵聽(tīng)機(jī)群范圍內(nèi)的全局同步信號(hào),根據(jù)所述全局同步信號(hào)判斷整個(gè)計(jì)算任務(wù)是否結(jié)束,如果計(jì)算結(jié)束,則設(shè)置所在進(jìn)程的數(shù)據(jù)驅(qū)動(dòng)為完成狀態(tài),并通知所在進(jìn)程內(nèi)的各個(gè)線程組退出。
[0056]為了實(shí)現(xiàn)主管線程的選舉,可以設(shè)置一互斥鎖,主線程競(jìng)爭(zhēng)該互斥鎖,獲得該互斥鎖的主線程就作為所在進(jìn)程的主管線程。
[0057]在上述基于計(jì)算機(jī)體系的任務(wù)數(shù)據(jù)處理方法中,通信過(guò)程中的消息傳遞主要經(jīng)過(guò)三級(jí)路由,即:物理網(wǎng)絡(luò)(進(jìn)程之間)_處理器間的數(shù)據(jù)通道(線程組之間)_處理器內(nèi)部的數(shù)據(jù)通道(線程組內(nèi)的線程之間)。具體的,主線程與所在線程組的各個(gè)工作線程之間(即線程組內(nèi)的線程之間)可以通過(guò)進(jìn)行數(shù)據(jù)傳輸?shù)碾p向數(shù)據(jù)通道通信,同一進(jìn)程內(nèi)的主線程之間(即線程組之間)可以通過(guò)該點(diǎn)對(duì)點(diǎn)雙向數(shù)據(jù)通道全相連通信,主管線程與主管線程之間(即進(jìn)程之間)可以通過(guò)物理網(wǎng)絡(luò)通信。
[0058]為了實(shí)現(xiàn)較高的通信效率,不增加額外的數(shù)據(jù)拷貝,在進(jìn)行數(shù)據(jù)傳輸?shù)倪^(guò)程中,雙向數(shù)據(jù)通道中并不傳輸數(shù)據(jù),而是傳輸指針,指針指向的是內(nèi)存空間,內(nèi)存空間中存儲(chǔ)有實(shí)際數(shù)據(jù),這樣只要獲取到指針就相當(dāng)于獲取到了數(shù)據(jù),而數(shù)據(jù)本身并不需要進(jìn)行傳遞,因此,不需要額外的數(shù)據(jù)拷貝。
[0059]下面將結(jié)合一個(gè)具體的實(shí)施例對(duì)上述基于計(jì)算機(jī)體系的任務(wù)數(shù)據(jù)處理方法的原理和機(jī)制進(jìn)行具體說(shuō)明,然而值得注意的是,該具體實(shí)施例僅是為了更好地說(shuō)明本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。
[0060]在本例中,提出了一種匹配于多核多處理器機(jī)群計(jì)算機(jī)體系結(jié)構(gòu)的多級(jí)嵌套數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算方法,以適應(yīng)當(dāng)前主流高性能計(jì)算機(jī)中“計(jì)算節(jié)點(diǎn)-處理器-處理器核”的三級(jí)硬件體系結(jié)構(gòu),從而提高程序運(yùn)行時(shí)的并行度和動(dòng)態(tài)負(fù)載平衡,以便提高計(jì)算并行性、數(shù)據(jù)局部性和通信效率。
[0061]該多級(jí)嵌套數(shù)據(jù)驅(qū)動(dòng)計(jì)算技術(shù)總的來(lái)說(shuō)主要包括兩個(gè)模塊和一個(gè)策略,其中,兩個(gè)模塊指的是多級(jí)嵌套的并行計(jì)算模塊和多級(jí)嵌套的數(shù)據(jù)通信模塊,一個(gè)策略指的是多級(jí)嵌套的問(wèn)題空間(任務(wù)數(shù)據(jù))劃分策略。如圖2所示,是機(jī)器節(jié)點(diǎn)內(nèi)三級(jí)嵌套的計(jì)算與通信組織示意圖,下面結(jié)合圖2對(duì)上述的兩個(gè)模塊和一個(gè)策略進(jìn)行具體說(shuō)明:
[0062]I)多級(jí)嵌套的并行計(jì)算模塊:將計(jì)算資源分為三級(jí)組織:進(jìn)程-線程組-線程,分別對(duì)應(yīng):計(jì)算節(jié)點(diǎn)-處理器-處理器核,具體方案為:
[0063]在機(jī)群范圍內(nèi),每個(gè)計(jì)算節(jié)點(diǎn)運(yùn)行一個(gè)進(jìn)程,進(jìn)程之間為分布式存儲(chǔ)且使用MPI消息傳遞機(jī)制進(jìn)行通信;
[0064]計(jì)算節(jié)點(diǎn)內(nèi)部,每個(gè)處理器固定分配一個(gè)線程組,在每個(gè)線程組內(nèi),采用master-workers多線程模式,其中,master線程(主線程)代表該線程組與其它線程組交互,而worker線程(工作線程)只在本線程組內(nèi)可見(jiàn)。
[0065]此外,每個(gè)進(jìn)程有一個(gè)虛擬的leader線程,由各個(gè)線程組的master線程通過(guò)選舉輪流擔(dān)任,負(fù)責(zé)與其它遠(yuǎn)程進(jìn)程通信并參與機(jī)群范圍內(nèi)的全局同步。
[0066]2)多級(jí)嵌套的數(shù)據(jù)通信模塊,就是在通信過(guò)程中,消息的傳遞經(jīng)過(guò)三級(jí)路由,即:網(wǎng)絡(luò)(進(jìn)程之間)_處理器間數(shù)據(jù)通路(線程組之間)_處理器內(nèi)部數(shù)據(jù)通路(線程組內(nèi)的線程之間),具體方案為:
[0067]線程組內(nèi)部,master和每個(gè)worker之間都有一組雙向數(shù)據(jù)通道,worker線程之間通常不通信,如果通信則通過(guò)master線程來(lái)轉(zhuǎn)發(fā)。
[0068]線程組之間,通過(guò)軟件實(shí)現(xiàn)的雙向數(shù)據(jù)通道來(lái)通信,所有通信操作都由線程組的master線程來(lái)執(zhí)行,進(jìn)程內(nèi)部所有線程組的master線程通過(guò)點(diǎn)對(duì)點(diǎn)的雙向數(shù)據(jù)通道全相連;
[0069]進(jìn)程之間,通過(guò)物理網(wǎng)絡(luò)進(jìn)行通信,使用MPI消息傳遞機(jī)制(或者GASNet等更為底層的通信接口)實(shí)現(xiàn),所有通信操作由leader線程來(lái)完成。進(jìn)程內(nèi)每個(gè)線程組的master都有一條雙向的數(shù)據(jù)通道與leader線程相連。如果master線程要發(fā)送數(shù)據(jù)給遠(yuǎn)程進(jìn)程,則先發(fā)送數(shù)據(jù)給leader線程,由leader線程隨后轉(zhuǎn)發(fā)到遠(yuǎn)程進(jìn)程;同樣,leader線程負(fù)責(zé)接收遠(yuǎn)程進(jìn)程發(fā)送來(lái)的數(shù)據(jù),然后再轉(zhuǎn)發(fā)給本地相關(guān)線程組的master線程。
[0070]上述雙向數(shù)據(jù)通路用兩條SPSC (Single Producer Single Consumer,單生產(chǎn)者單消費(fèi)者)單向隊(duì)列實(shí)現(xiàn)。具體應(yīng)用過(guò)程為:生產(chǎn)者分配消息內(nèi)存空間并填充數(shù)據(jù),然后將該消息結(jié)構(gòu)的內(nèi)存指針通過(guò)數(shù)據(jù)通路傳遞給消費(fèi)者,消費(fèi)者收到指針后決定消費(fèi)或者轉(zhuǎn)發(fā)該消息。在這個(gè)過(guò)程中,指針的傳遞意味著消息的所有權(quán)(Ownership)的轉(zhuǎn)移,擁有該消息所有權(quán)的唯一線程可以消費(fèi)該消息的數(shù)據(jù)并且釋放消息內(nèi)存空間。在這個(gè)過(guò)程中,消息數(shù)據(jù)是零拷貝(Zero-Copy)的。
[0071]3)多級(jí)嵌套的問(wèn)題空間劃分策略,假設(shè)高性能計(jì)算機(jī)系統(tǒng)為包含M個(gè)計(jì)算節(jié)點(diǎn)的機(jī)群,其中,每個(gè)計(jì)算節(jié)點(diǎn)包含P個(gè)處理器,每個(gè)處理器包含C個(gè)核。以網(wǎng)格為例,本發(fā)明中問(wèn)題空間的劃分策略如下:
[0072]3-1)將整個(gè)網(wǎng)格劃分為M個(gè)區(qū)域,每個(gè)區(qū)域分配給唯一一個(gè)進(jìn)程;
[0073]3-2)在每個(gè)進(jìn)程內(nèi),其網(wǎng)格區(qū)域進(jìn)一步劃分為P個(gè)網(wǎng)格子區(qū)域,每個(gè)網(wǎng)格子區(qū)域分配給一個(gè)線程組;
[0074]3-3)在每個(gè)線程組內(nèi),網(wǎng)格子區(qū)域進(jìn)一步劃分為若干網(wǎng)格塊,網(wǎng)格塊為最小的調(diào)度單位。在數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算過(guò)程中,Master線程動(dòng)態(tài)調(diào)度可計(jì)算的網(wǎng)格塊,按照運(yùn)行時(shí)負(fù)載平衡的原則,將網(wǎng)格塊動(dòng)態(tài)分配給workers線程執(zhí)行計(jì)算。
[0075]基于上述計(jì)算與通信軟件模塊以及問(wèn)題空間劃分策略,下面對(duì)本例中的數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算方法進(jìn)行具體說(shuō)明,如圖3所示,包括:
[0076]步驟001:進(jìn)入數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算模塊之前,初始化前述計(jì)算與通信模塊并分配初始可計(jì)算任務(wù)。該步驟可以看作數(shù)據(jù)驅(qū)動(dòng)模塊入口之前的預(yù)處理。
[0077]worker線程重復(fù)執(zhí)行以下步驟直到整個(gè)計(jì)算結(jié)束:
[0078]步驟101:從master線程接收消息,根據(jù)消息數(shù)據(jù)生成新的計(jì)算任務(wù)并更新本地的可計(jì)算任務(wù)隊(duì)列,該任務(wù)隊(duì)列為本worker線程私有,任務(wù)的優(yōu)先級(jí)根據(jù)具體問(wèn)題定義。
[0079]步驟102:從可計(jì)算任務(wù)隊(duì)列中取優(yōu)先級(jí)最高的計(jì)算任務(wù),然后進(jìn)行計(jì)算。
[0080]步驟103:將完成的計(jì)算任務(wù)從就緒隊(duì)列中移除,并將該任務(wù)生成的數(shù)據(jù)打包成消息并傳遞給master線程。
[0081]master線程負(fù)責(zé)本線程組的任務(wù)調(diào)度和通信,重復(fù)執(zhí)行以下步驟直到整個(gè)計(jì)算結(jié)束:
[0082]步驟201:接收本線程組內(nèi)所有worker線程的消息,如果該消息的目的地仍然是本線程組,則根據(jù)當(dāng)前workers的負(fù)載狀況,將該消息轉(zhuǎn)發(fā)給負(fù)載最輕的worker,如果該消息的目的地是本進(jìn)程內(nèi)的其它線程組,則通過(guò)數(shù)據(jù)通路轉(zhuǎn)發(fā)給該目的線程組的master,如果該消息的目的地是遠(yuǎn)程進(jìn)程,則將消息轉(zhuǎn)發(fā)給本進(jìn)程的leader線程。
[0083]步驟202:接收l(shuí)eader線程和其它線程組的消息,根據(jù)當(dāng)前線程組內(nèi)workers的負(fù)載狀況,將收到的消息轉(zhuǎn)發(fā)給負(fù)載最輕的worker。
[0084]步驟203:參與本進(jìn)程內(nèi)leader的選舉(例如:設(shè)置一個(gè)互斥鎖,獲得該鎖的master線程成為leader并執(zhí)行一次leader線程代碼)。
[0085]其中,leader線程負(fù)責(zé)本進(jìn)程與遠(yuǎn)程進(jìn)程之間的網(wǎng)絡(luò)通信以及機(jī)群范圍內(nèi)的全局同步,每次被調(diào)用時(shí)執(zhí)行一遍如圖4所示的步驟:
[0086]步驟301:轉(zhuǎn)發(fā)所有本地線程組master線程的消息到遠(yuǎn)程進(jìn)程;
[0087]步驟302:接收遠(yuǎn)程進(jìn)程的消息并轉(zhuǎn)發(fā)給本地相關(guān)線程組的master線程;
[0088]步驟303:偵聽(tīng)機(jī)群范圍內(nèi)的全局同步信號(hào),判斷是否整個(gè)計(jì)算任務(wù)已經(jīng)結(jié)束;如果計(jì)算結(jié)束,則設(shè)置本進(jìn)程的數(shù)據(jù)驅(qū)動(dòng)過(guò)程為完成狀態(tài),通知進(jìn)程內(nèi)各線程組退出。
[0089]在本例中結(jié)合網(wǎng)格上數(shù)據(jù)驅(qū)動(dòng)的并行掃描算法來(lái)詳細(xì)描述本發(fā)明,需要指出的是,本例中僅是以網(wǎng)格掃描問(wèn)題為例進(jìn)行說(shuō)明,還可以將其應(yīng)用在其它地方。為了描述簡(jiǎn)單,在本例中使用2維結(jié)構(gòu)網(wǎng)格,然而需要注意的是,該方法也適應(yīng)于多維和非結(jié)構(gòu)網(wǎng)格。
[0090]所謂的網(wǎng)格掃描問(wèn)題就是:沿著一個(gè)或者多個(gè)方向?qū)W(wǎng)格單元依次進(jìn)行計(jì)算,在掃描方向上下游網(wǎng)格單元的計(jì)算依賴于其上游網(wǎng)格單元的數(shù)據(jù),只有數(shù)據(jù)依賴得到滿足網(wǎng)格單元才可以進(jìn)行計(jì)算。對(duì)于上述過(guò)程,可以用有向無(wú)環(huán)圖對(duì)單元間的有向數(shù)據(jù)依賴關(guān)系進(jìn)行建模,并用數(shù)據(jù)驅(qū)動(dòng)的方法來(lái)對(duì)單元進(jìn)行并行計(jì)算。將每個(gè)網(wǎng)格單元看成一個(gè)計(jì)算部件,則其執(zhí)行過(guò)程為:從入邊接收數(shù)據(jù)-計(jì)算-向出邊發(fā)送數(shù)據(jù)。
[0091]如圖5至7所示,分別為對(duì)單向網(wǎng)格掃描問(wèn)題、有向無(wú)環(huán)圖建模和數(shù)據(jù)驅(qū)動(dòng)的單元計(jì)算的示意圖,需要注意的是,在實(shí)際應(yīng)用中比較多的是多方向并行掃描。
[0092]具體的,基于以上網(wǎng)格掃描的結(jié)果多級(jí)嵌套的數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算技術(shù)在網(wǎng)格掃描問(wèn)題中的具體實(shí)施步驟包括:
[0093]步驟1:網(wǎng)格區(qū)域分解:采取兩級(jí)靜態(tài)劃分,首先將整個(gè)網(wǎng)格劃分為M(計(jì)算節(jié)點(diǎn)個(gè)數(shù))個(gè)區(qū)域(可以不連續(xù))并分配給進(jìn)程,然后每個(gè)進(jìn)程進(jìn)一步將自己的區(qū)域分成P(計(jì)算節(jié)點(diǎn)內(nèi)處理器的個(gè)數(shù))個(gè)子區(qū)域并分配給每個(gè)線程組。如圖8所示是一個(gè)16*16規(guī)模網(wǎng)格的劃分示意圖,其中包含4個(gè)進(jìn)程,每個(gè)進(jìn)程包含4個(gè)線程組。
[0094]步驟2:初始化源計(jì)算資源:每個(gè)線程組對(duì)自己分到的網(wǎng)格子區(qū)域進(jìn)行初始化,線程組master將當(dāng)前可計(jì)算的網(wǎng)格單元(即掃描方向上無(wú)數(shù)據(jù)依賴的源網(wǎng)格單元)平均分配給worker線程。
[0095]步驟3:數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算:因源網(wǎng)格單元對(duì)其它網(wǎng)格單元沒(méi)有數(shù)據(jù)依賴,可以直接進(jìn)行計(jì)算,其它網(wǎng)格單元?jiǎng)t由其依賴的數(shù)據(jù)來(lái)動(dòng)態(tài)地驅(qū)動(dòng)計(jì)算。
[0096]以圖8中的網(wǎng)格單元C相關(guān)的計(jì)算為例,它可以用(進(jìn)程號(hào),線程組號(hào),本地單元號(hào))即(0,0,15)來(lái)索引。在A完成計(jì)算并發(fā)送消息給C時(shí),線程組(0,0)的master線程將該消息轉(zhuǎn)發(fā)給worker線程(記為w0),即將單元C動(dòng)態(tài)分配給線程w0。C收齊掃描方向上的所有上游單元(即A、B和D)的消息后,《O便可以在C上執(zhí)行計(jì)算。在C完成計(jì)算后,發(fā)送消息給其下游單元(E,F(xiàn)和G)。
[0097]其中,因C到E的通信為跨進(jìn)程,因此,數(shù)據(jù)傳輸包括:
[0098]l)worker線程wO發(fā)送消息給其master線程;
[0099]2)該master線程轉(zhuǎn)發(fā)消息給本進(jìn)程的leader線程;
[0100]3)本進(jìn)程leader線程轉(zhuǎn)發(fā)消息給遠(yuǎn)程進(jìn)程I的leader線程;
[0101]4)進(jìn)程I的leader線程轉(zhuǎn)發(fā)該消息給其線程組(1,0);
[0102]5)進(jìn)程I的線程組(1,0)的master線程收到消息并對(duì)目標(biāo)網(wǎng)格單元E進(jìn)行動(dòng)態(tài)調(diào)度。C到F的通信過(guò)程與C到E的過(guò)程類(lèi)似。
[0103]因C到G的通信為進(jìn)程內(nèi)跨線程組,因此,數(shù)據(jù)傳輸包括:
[0104]l)worker線程wO發(fā)送消息給其master線程;
[0105]2)該master線程轉(zhuǎn)發(fā)該消息給線程組(O, I)的master線程;
[0106]3)線程組(0,1)的master接收消息并對(duì)目標(biāo)網(wǎng)格單元G進(jìn)行動(dòng)態(tài)調(diào)度。
[0107]在具體實(shí)現(xiàn)的時(shí)候,進(jìn)程之間的通信方式可以采用GASNet方式等,這種方式相比MPI需要更底層的庫(kù)實(shí)現(xiàn),線程可以用Pthreads或者重新封裝后的OpenMP實(shí)現(xiàn),進(jìn)程組內(nèi)的workers之間可以增加全相連的數(shù)據(jù)通路。
[0108]在本例中,通過(guò)上述方式進(jìn)行任務(wù)數(shù)據(jù)的處理,主要可以達(dá)到以下效果:
[0109]I)較好的數(shù)據(jù)局部性:進(jìn)程組固定運(yùn)行在一個(gè)多核處理器上且固定分配網(wǎng)格區(qū)域,這種策略避免了處理器之間的頻繁數(shù)據(jù)交互對(duì)處理器最外層Cache (緩存)性能的影響以及跨處理器Socket訪存時(shí)的NUMA效應(yīng),從而保證了線程組內(nèi)線程具有較好的數(shù)據(jù)局部性。
[0110]2)較高的運(yùn)行時(shí)并行度:線程組內(nèi)的workers線程的任務(wù)由master線程動(dòng)態(tài)調(diào)度,從而保證了進(jìn)程組內(nèi)實(shí)時(shí)的負(fù)載均衡,進(jìn)而達(dá)到了最大的運(yùn)行時(shí)計(jì)算并行度。
[0111]3)較高的通信效率:雖然多級(jí)嵌套的消息路由方式增加了消息傳遞的次數(shù),但是由于所有消息轉(zhuǎn)發(fā)操作都是由專(zhuān)門(mén)的master線程來(lái)完成的且增加的轉(zhuǎn)發(fā)操作傳遞的都是消息指針,因而在傳遞實(shí)時(shí)性方面損益很小且不會(huì)增加額外的數(shù)據(jù)拷貝;另一方面,分級(jí)路由降低了所有線程參與通信帶來(lái)的設(shè)計(jì)復(fù)雜度以及數(shù)據(jù)競(jìng)爭(zhēng),消除了計(jì)算節(jié)點(diǎn)內(nèi)多處理器之間頻繁的數(shù)據(jù)移動(dòng)所帶來(lái)的昂貴開(kāi)銷(xiāo)(包括處理器Cache失效和NUMA效應(yīng))。
[0112]基于以上分析可以看出,該匹配于高性能計(jì)算機(jī)結(jié)構(gòu)的多級(jí)嵌套數(shù)據(jù)驅(qū)動(dòng)計(jì)算方法可以極大地提高數(shù)據(jù)驅(qū)動(dòng)應(yīng)用的通信效率。
[0113]在另外一個(gè)實(shí)施例中,還提供了一種軟件,該軟件用于執(zhí)行上述實(shí)施例及優(yōu)選實(shí)施方式中描述的技術(shù)方案。
[0114]在另外一個(gè)實(shí)施例中,還提供了一種存儲(chǔ)介質(zhì),該存儲(chǔ)介質(zhì)中存儲(chǔ)有上述軟件,該存儲(chǔ)介質(zhì)包括但不限于:光盤(pán)、軟盤(pán)、硬盤(pán)、可擦寫(xiě)存儲(chǔ)器等。
[0115]從以上的描述中,可以看出,本發(fā)明實(shí)施例實(shí)現(xiàn)了如下技術(shù)效果:將計(jì)算資源分為進(jìn)程、線程組和線程三級(jí)組織,其中,每個(gè)進(jìn)程對(duì)應(yīng)一個(gè)計(jì)算節(jié)點(diǎn),每個(gè)線程組對(duì)應(yīng)一個(gè)處理器,每個(gè)線程對(duì)應(yīng)一個(gè)處理器核;在通信過(guò)程中,通過(guò)進(jìn)程之間的物理網(wǎng)絡(luò)、線程組之間的數(shù)據(jù)通道和線程組內(nèi)部的線程之間的數(shù)據(jù)通道三級(jí)路由傳遞消息。通過(guò)匹配計(jì)算節(jié)點(diǎn)-處理器-處理器核的進(jìn)程-線程組-線程三級(jí)嵌套并行計(jì)算組織,其中,在進(jìn)程以及線程組兩級(jí)采用靜態(tài)數(shù)據(jù)分配方法且在線程組內(nèi)支持任務(wù)動(dòng)態(tài)調(diào)度,以及匹配網(wǎng)絡(luò)-內(nèi)存-緩存的三級(jí)嵌套數(shù)據(jù)通信與數(shù)據(jù)劃分,解決了現(xiàn)有技術(shù)中在實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算時(shí)面臨的計(jì)算并行性與數(shù)據(jù)局部性方面的低效問(wèn)題,達(dá)到了有效負(fù)載平衡并提高通信、訪存和計(jì)算效率的技術(shù)效果。
[0116]顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明實(shí)施例的各模塊或各步驟可以用通用的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本發(fā)明實(shí)施例不限制于任何特定的硬件和軟件結(jié)合。
[0117]以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明實(shí)施例可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種匹配于高性能計(jì)算機(jī)結(jié)構(gòu)的多級(jí)嵌套數(shù)據(jù)驅(qū)動(dòng)計(jì)算方法,其特征在于,包括: 將計(jì)算資源分為三級(jí)組織,所述三級(jí)組織包括:進(jìn)程、線程組和線程,其中,每個(gè)進(jìn)程對(duì)應(yīng)一個(gè)計(jì)算節(jié)點(diǎn),每個(gè)線程組對(duì)應(yīng)一個(gè)處理器,每個(gè)線程對(duì)應(yīng)一個(gè)處理器核; 在通信過(guò)程中,通過(guò)三級(jí)路由傳遞消息,其中,所述三級(jí)路由包括:進(jìn)程之間的物理網(wǎng)絡(luò)、線程組之間的數(shù)據(jù)通道和線程組內(nèi)部的線程之間的數(shù)據(jù)通道。
2.如權(quán)利要求1所述的方法,其特征在于,在每個(gè)線程組中分配一個(gè)主線程,除該主線程外的其它線程作為工作線程。
3.如權(quán)利要求2所述的方法,其特征在于,在數(shù)據(jù)驅(qū)動(dòng)并行計(jì)算的過(guò)程中,主線程動(dòng)態(tài)調(diào)度可計(jì)算的數(shù)據(jù)塊,按照運(yùn)行時(shí)負(fù)載平衡的原則,將數(shù)據(jù)塊動(dòng)態(tài)分配給工作線程執(zhí)行計(jì)笪
ο
4.如權(quán)利要求3所述的方法,其特征在于,按照運(yùn)行時(shí)負(fù)載平衡的原則,將數(shù)據(jù)塊動(dòng)態(tài)分配給工作線程執(zhí)行計(jì)算,包括: 主線程接收所在線程組的工作線程發(fā)送的消息; 主線程判斷接收的消息的目的地是否是所在線程組; 如果是,則將接收到的消息轉(zhuǎn)發(fā)給所在線程組的工作線程中負(fù)載最輕的工作線程。
5.如權(quán)利要求2所述的方法,其特征在于,在所述線程組內(nèi)部的線程之間的數(shù)據(jù)通道中,工作線程之間通過(guò)主線程的轉(zhuǎn)發(fā)進(jìn)行通信。
6.如權(quán)利要求2所述的方法,其特征在于,每個(gè)進(jìn)程中有一個(gè)主管線程,所述主管線程是從所述進(jìn)程內(nèi)各個(gè)線程組的主線程中選舉產(chǎn)生的,用于實(shí)現(xiàn)所在進(jìn)程與其它進(jìn)程之間的通信,以及實(shí)現(xiàn)機(jī)群范圍內(nèi)的全局同步。
7.如權(quán)利要求6所述的方法,其特征在于,所述主管線程實(shí)現(xiàn)所在進(jìn)程與其它進(jìn)程之間的通信,包括: 所述主管線程接收所在進(jìn)程的主線程發(fā)送的消息,并將接收的消息轉(zhuǎn)發(fā)至該消息的目的進(jìn)程的主管線程; 和/或,所述主管線程接收其它進(jìn)程的主管線程發(fā)送的消息,并將消息轉(zhuǎn)發(fā)至所在進(jìn)程內(nèi)的目的線程組的主線程。
8.如權(quán)利要求6所述的方法,其特征在于,所述主管線程實(shí)現(xiàn)機(jī)群范圍內(nèi)的全局同步,包括: 所述主管線程偵聽(tīng)機(jī)群范圍內(nèi)的全局同步信號(hào); 根據(jù)所述全局同步信號(hào)判斷整個(gè)計(jì)算任務(wù)是否結(jié)束; 如果計(jì)算結(jié)束,則設(shè)置所在進(jìn)程的數(shù)據(jù)驅(qū)動(dòng)為完成狀態(tài),并通知所在進(jìn)程內(nèi)的各個(gè)線程組退出。
9.如權(quán)利要求6所述的方法,其特征在于,從進(jìn)程內(nèi)各個(gè)線程組的主線程中選舉產(chǎn)生主管線程,包括: 競(jìng)爭(zhēng)互斥鎖; 獲得所述互斥鎖的主線程作為所在進(jìn)程的主管線程。
10.如權(quán)利要求1至9中任一項(xiàng)所述的方法,其特征在于,所述數(shù)據(jù)通道中傳輸?shù)氖侵羔?,指針指向的是?nèi)存空間,內(nèi)存空間中存儲(chǔ)有實(shí)際通信數(shù)據(jù)。
【文檔編號(hào)】G06F9/50GK104375882SQ201410677986
【公開(kāi)日】2015年2月25日 申請(qǐng)日期:2014年11月21日 優(yōu)先權(quán)日:2014年11月21日
【發(fā)明者】張愛(ài)清, 莫?jiǎng)t堯, 閆潔 申請(qǐng)人:北京應(yīng)用物理與計(jì)算數(shù)學(xué)研究所