蔡恒雨,寧成明,侯 璇,鄭啟龍,2
1(中國(guó)科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,合肥 230026)
2(中國(guó)科學(xué)技術(shù)大學(xué) 國(guó)家高性能計(jì)算中心,合肥 230026)
高性能計(jì)算設(shè)備進(jìn)入了快速發(fā)展期,如DSP、ASIC和FPAG等硬件系統(tǒng)都在快速發(fā)展,并且逐漸走向成熟.隨著時(shí)代的發(fā)展,人類產(chǎn)生的數(shù)據(jù)越來(lái)越多,采用單個(gè)計(jì)算設(shè)備往往無(wú)法處理這些數(shù)據(jù),通常使用分布式計(jì)算設(shè)備對(duì)這些數(shù)據(jù)進(jìn)行處理和分析.
美國(guó)德州儀器(TI)是一家知名的數(shù)字信號(hào)處理器設(shè)計(jì)和生產(chǎn)公司.它生產(chǎn)的TMS320[1]系列數(shù)字信號(hào)處理器系列具有功能豐富和成本低等特點(diǎn),已經(jīng)廣泛應(yīng)用于各行各業(yè).亞德諾(ADI)公司設(shè)計(jì)了定點(diǎn)DSP芯片如ADSP2111/2115等,浮點(diǎn)DSP芯片如虎鯊TS101和TS201S[2]等,目前也獲得了廣泛使用.Motorola公司也設(shè)計(jì)了定點(diǎn)DSP處理器MC56001和浮點(diǎn)DSP芯片MC96002.BWDSP系列處理器[3]是由中國(guó)電子科技集團(tuán)公司第38研究所研制的一款具有完全自主知識(shí)產(chǎn)權(quán)的芯片,可以實(shí)現(xiàn)高性能計(jì)算,在圖像處理,視頻處理,自然語(yǔ)言處理和雷達(dá)信號(hào)處理[4]等領(lǐng)域具有廣泛應(yīng)用.其中雷達(dá)信號(hào)處理,在我國(guó)軍工業(yè)的發(fā)展中具有十分重要的意義.
分布式系統(tǒng)的發(fā)展中,高性能數(shù)據(jù)通信協(xié)議和并行編程發(fā)揮著重要作用.RapidIO協(xié)議[5]作為一種嵌入式系統(tǒng)的數(shù)據(jù)通信協(xié)議,具有成本低和傳輸速度快的特點(diǎn),廣泛應(yīng)用于各種嵌入式系統(tǒng)的互聯(lián).該協(xié)議可以用于DSP和DSP之間,板卡和板卡之間的互聯(lián),支持的信號(hào)傳輸速率可以達(dá)到1.25GHz、2.5GHz和3.125GHz.同時(shí)出現(xiàn)了許多大規(guī)模的并行計(jì)算機(jī)系統(tǒng),如SMP[6]、MPP和DSM等,而并行計(jì)算通信技術(shù)在并行計(jì)算機(jī)系統(tǒng)中具有重要意義,通常分為數(shù)據(jù)并行和任務(wù)并行機(jī)制.各種并行計(jì)算通信標(biāo)準(zhǔn)層出不窮,如基于消息傳遞的MPI[7]和基于共享內(nèi)存的OpenMP[8].MPI是一種基于消息傳遞的數(shù)據(jù)通信接口,提供了豐富的數(shù)據(jù)通信能力,如點(diǎn)對(duì)點(diǎn)通信和群集通信接口.通過(guò)MPI編程接口,用戶可以輕松的編寫(xiě)并行程序,充分使用分布式計(jì)算系統(tǒng)的并行計(jì)算能力.基于MPI標(biāo)準(zhǔn)誕生了MPICH和OpenMPI兩個(gè)重要的實(shí)現(xiàn).由于MPICH具有更好的可移植性的特點(diǎn),現(xiàn)階段比較流行的是MPICH2.MPICH2[9]支持多種數(shù)據(jù)通信協(xié)議,在消息傳遞基礎(chǔ)上擴(kuò)展了對(duì)共享內(nèi)存的實(shí)現(xiàn),提供了數(shù)據(jù)通信和同步控制功能,還可以用于發(fā)現(xiàn)內(nèi)存一致性錯(cuò)誤[10].
BWDSP芯片具有較強(qiáng)的計(jì)算能力,適合處理計(jì)算密集型任務(wù).雖然BWDSP虛擬平臺(tái)提供了數(shù)據(jù)通信接口和同步功能,用戶使用并不方便.本文在BWDSP虛擬平臺(tái)基礎(chǔ)上,借鑒主流并行編程庫(kù)MPICH,設(shè)計(jì)了優(yōu)化的并行通信庫(kù)MPIRIO,提高在BWDSP虛擬平臺(tái)上進(jìn)行編程的方便性和靈活性,同時(shí)提升并行任務(wù)處理效率.本文接下來(lái)的組織如下:第2部分介紹MPI協(xié)議和BWDSP虛擬平臺(tái);第3部分介紹并行計(jì)算通信MPIRIO的設(shè)計(jì)及其在深度學(xué)習(xí)的應(yīng)用;第4部分介紹MPIRIO的相關(guān)實(shí)驗(yàn)和性能評(píng)估;第5部分是總結(jié).
2.1.1 MPI協(xié)議結(jié)構(gòu)
MPI作為一個(gè)主流的并行通信庫(kù),已經(jīng)獲得廣泛應(yīng)用,發(fā)展出MPICH和OpenMPI兩個(gè)主要分支.本文主要以MPICH2為例進(jìn)行分析,其體系結(jié)構(gòu)可以分為4層架構(gòu),自下而上分別是通信協(xié)議層,CH3層,ADI層和API層,其中通信協(xié)議層具體有SSM通信協(xié)議,SCTP通信協(xié)議和TCP通信協(xié)議[11]等.MPICH2不僅支持消息傳遞機(jī)制,并且擴(kuò)展了對(duì)共享內(nèi)存通信的支持.
MPICH2的上層(MPI/API層)與環(huán)境無(wú)關(guān),它主要是提供用戶接口,并處理與環(huán)境無(wú)關(guān)的MPICH數(shù)據(jù)結(jié)構(gòu).MPICH2新定義了MPID層,即抽象設(shè)備接口層ADI3,為上層應(yīng)用提供一種與具體設(shè)備無(wú)關(guān)的通信接口.并在ADI3下面又抽象出一層通道接口CH3層,提供了CH3接口供開(kāi)發(fā)者實(shí)現(xiàn)自己的通信接口.在本文中,主要是基于BWDSP虛擬平臺(tái)使用的RapidIO協(xié)議設(shè)計(jì)相關(guān)并行通信接口.
2.1.2 MPI通信接口
MPI提供了兩種類型的數(shù)據(jù)通信接口,即阻塞型通信接口和非阻塞型通信接口.同時(shí)提供了4種數(shù)據(jù)的發(fā)送模式,4種發(fā)送模式的相應(yīng)函數(shù)具有相同的調(diào)用參數(shù),但是對(duì)于消息的發(fā)送和接收的狀態(tài)要求不同.結(jié)合兩種類型和4種模式,可以形成8種點(diǎn)對(duì)點(diǎn)通信函數(shù),其函數(shù)名與對(duì)應(yīng)通信類型如下:
1)MPI_Send():阻塞標(biāo)準(zhǔn)通信類型;
2)MPI_Bsend():阻塞緩存通信類型;
3)MPI_Ssend():阻塞同步通信類型;
4)MPI_Rsend():阻塞就緒通信類型;
5)MPI_Isend():非阻塞標(biāo)準(zhǔn)通信類型;
6)MPI_Ibsend():非阻塞緩存通信類型;
7)MPI_Issend():非阻塞同步通信類型;
8)MPI_Irsend():非阻塞就緒通信類型.
MPI標(biāo)準(zhǔn)提供的群集通信函數(shù)主要包括MPI_bcast()、MPI_scatter()、MPI_reduce()和MPI_gather()等.MPI_bcast()函數(shù)提供消息的廣播功能,即發(fā)送節(jié)點(diǎn)將消息發(fā)送到所有其他節(jié)點(diǎn).MPI_scatter()函數(shù)提供消息的分發(fā)功能,即將發(fā)送方的數(shù)據(jù)分成多個(gè)部分,每個(gè)部分發(fā)往不同的接收方節(jié)點(diǎn).MPI_bcast()函數(shù)提供消息的聚集功能,即所有節(jié)點(diǎn)都向一個(gè)接收節(jié)點(diǎn)發(fā)送消息.MPI_reduce()函數(shù)提供消息的規(guī)約功能,即所有節(jié)點(diǎn)都發(fā)送消息,將這些消息按照某種操作運(yùn)算后發(fā)送到接收節(jié)點(diǎn).
2.2.1 BWDSP體系結(jié)構(gòu)
BWDSP系列處理器是由中國(guó)電子科技集團(tuán)公司第38研究所研制32位DSP處理器,其體系結(jié)構(gòu)采用分簇式架構(gòu).每個(gè)處理器上有4個(gè)簇,每個(gè)簇上有4個(gè)支持MAC操作的乘法器,其最高可達(dá)30GOPS的運(yùn)算能力.BWDSP的指令系統(tǒng)支持SIMD和VLIW類型的操作,可以用一條指令同時(shí)實(shí)現(xiàn)多個(gè)數(shù)據(jù)運(yùn)算操作.
BWDSP芯片的最大工作主頻為 500MHz,指令周期為2ns.芯片內(nèi)部數(shù)據(jù)讀取位寬可以達(dá)到512比特,數(shù)據(jù)寫(xiě)位寬可以達(dá)到256比特.由于其體系結(jié)構(gòu)特點(diǎn)和計(jì)算能力較高,適用于深度學(xué)習(xí)應(yīng)用和高性能計(jì)算領(lǐng)域.基于BWDSP芯片設(shè)計(jì)分布式計(jì)算平臺(tái),提供并行編程庫(kù)具有重要意義.
2.2.2 RapidIO協(xié)議
RapidIO協(xié)議作為嵌入式系統(tǒng)互聯(lián)的數(shù)據(jù)通信協(xié)議,具有傳輸速率快和成本低的特點(diǎn),適合未來(lái)高性能嵌入式設(shè)備之間的相互連接.該協(xié)議的3層體系結(jié)構(gòu)自下而上為物理層,傳輸層和邏輯層,主要包括兩種設(shè)備,分別是終端設(shè)備和交換設(shè)備.其中邏輯層位于最上面,定義了數(shù)據(jù)包的格式和語(yǔ)義信息;傳輸層位于中間,主要定義數(shù)據(jù)包的調(diào)度和路由機(jī)制;物理層位于最下面,主要包括物理鏈路的傳輸特性、流量和錯(cuò)誤管理等.
一個(gè)事務(wù)的完整過(guò)程是,RapidIO發(fā)送設(shè)備會(huì)發(fā)出請(qǐng)求數(shù)據(jù)包,交換設(shè)備收到該請(qǐng)求包后,會(huì)判斷是否由自己操作,如果是則直接處理該數(shù)據(jù)包.否則,會(huì)根據(jù)數(shù)據(jù)包中目標(biāo)地址結(jié)合路由表信息,通過(guò)合適出口進(jìn)行轉(zhuǎn)發(fā).當(dāng)接收設(shè)備收到事務(wù)包后,會(huì)對(duì)數(shù)據(jù)包進(jìn)行判斷和處理,并發(fā)送響應(yīng)數(shù)據(jù)包.響應(yīng)數(shù)據(jù)包的傳輸過(guò)程類似請(qǐng)求數(shù)據(jù)包,可以將其視為一種反向的“請(qǐng)求數(shù)據(jù)包”.
2.2.3 BWDSP虛擬平臺(tái)框架
基于BWDSP芯片設(shè)計(jì)了BWDSP虛擬平臺(tái),該虛擬平臺(tái)采用RapidIO協(xié)議作為數(shù)據(jù)交換協(xié)議,實(shí)現(xiàn)BWDSP芯片之間的通信功能,為深度學(xué)習(xí)[12]應(yīng)用和其他高性能計(jì)算應(yīng)用提供基本通信原語(yǔ)和同步控制.
BWDSP單板卡系統(tǒng)的整體設(shè)計(jì)是采取4個(gè)BWDSP模型與1個(gè)RpaidIO交換模型組成,其整體結(jié)構(gòu)圖如圖1所示.BWDSP模型分別連接到交換模型的4個(gè)端口上,將交換模型的剩余端口用于互聯(lián)其他單板卡,或者存儲(chǔ)模型,或者交換模型.外部存儲(chǔ)器模型可以是Flash或者DDR等,實(shí)現(xiàn)BWDSP對(duì)存儲(chǔ)器中信息的快速讀寫(xiě).BWDSP虛擬平臺(tái)向外提供了數(shù)據(jù)傳輸接口MRIO_send()和MRIO_recv()函數(shù),實(shí)現(xiàn)BWDSP芯片之間的數(shù)據(jù)傳輸.
圖1 BWDSP虛擬平臺(tái)框架
BWDSP虛擬平臺(tái)中傳輸?shù)腞apidIO數(shù)據(jù)包長(zhǎng)度為r_lenByte,BWDSP模型的時(shí)鐘頻率為b_freHz,數(shù)據(jù)總線的位寬為b_widthBit.RapidIO交換模型的時(shí)鐘頻率為r_freHz,數(shù)據(jù)傳輸速率為r_speedGbs.虛擬平臺(tái)中的交換芯片在每個(gè)工作周期中,可以完成對(duì)數(shù)據(jù)包的轉(zhuǎn)發(fā)或者處理.當(dāng)BWDSP虛擬平臺(tái)的BWDSP模型和RapidIO交換模型協(xié)同工作時(shí),r_fre和b_fre的關(guān)系滿足公式(1),r_speed和r_fre的關(guān)系滿足公式(2).當(dāng)傳輸?shù)腞apidIO數(shù)據(jù)包長(zhǎng)度為276字節(jié)時(shí),BWDSP虛擬平臺(tái)數(shù)據(jù)傳輸速率可以達(dá)到4.416Gbs.
(1)
r_speed=r_fre×r_len×8
(2)
MPI作為一個(gè)主流的并行通信庫(kù),已經(jīng)獲得廣泛應(yīng)用.同時(shí)MPI提供的群集通信函數(shù)適合深度學(xué)習(xí)模型的并行訓(xùn)練,充分利用訓(xùn)練數(shù)據(jù),并提高訓(xùn)練速度.因此設(shè)計(jì)了基于BWDSP和RapidIO的并行計(jì)算通信庫(kù)MPIRIO,使深度學(xué)習(xí)模型更好的部署在BWDSP虛擬平臺(tái)上.MPIRIO借鑒MPI的分層結(jié)構(gòu),通過(guò)在CH3通道接口層之下增加RapidIO通信協(xié)議實(shí)現(xiàn),將該協(xié)議實(shí)現(xiàn)命名MRIO.
深度學(xué)習(xí)模型中存在多級(jí)并行性,如一個(gè)batch通常包含多條數(shù)據(jù),一條數(shù)據(jù)通常用矩陣表示等.MPIRIO需要設(shè)計(jì)優(yōu)化的群集通信算法[13],提升并行通信能力,使用BWDSP平臺(tái)提供的并行計(jì)算能力.
3.1.1 MPIRIO工作機(jī)制
MPIRIO類似MPI標(biāo)準(zhǔn),通過(guò)將一個(gè)大型計(jì)算任務(wù)分成多個(gè)小任務(wù)進(jìn)行解決.通常并行任務(wù)的處理過(guò)程分為劃分、映射、通信和聚集4個(gè)步驟.
主機(jī)(CPU)將任務(wù)分發(fā)到BWDSP板卡上的各個(gè)BWDSP芯片上,各芯片完成自己的任務(wù)后,通過(guò)RapidIO交換模型進(jìn)行通信,直接將數(shù)據(jù)進(jìn)行交換完成相應(yīng)計(jì)算任務(wù),無(wú)需再將數(shù)據(jù)發(fā)送回主機(jī)端.當(dāng)獲得最終計(jì)算結(jié)果后,選擇其中某個(gè)BWDSP芯片將數(shù)據(jù)傳回主機(jī).其工作機(jī)制如圖2所示,可以減少數(shù)據(jù)傳輸時(shí)間,同時(shí)降低對(duì)主機(jī)計(jì)算資源的占用率,此時(shí)主機(jī)可以調(diào)度其他計(jì)算任務(wù).該工作機(jī)制實(shí)現(xiàn)了雙重計(jì)算和通信的重疊,首先是各BWDSP計(jì)算和BWDSP之間通信的重疊,其次是主機(jī)計(jì)算和BWDSP之間通信的重疊.
圖2 MPIRIO工作機(jī)制圖
深度學(xué)習(xí)模型中數(shù)據(jù)并行模式通常是各計(jì)算設(shè)備對(duì)數(shù)據(jù)進(jìn)行處理,然后將結(jié)果返回給參數(shù)服務(wù)器,由參數(shù)服務(wù)器將更新后的參數(shù)再重新分發(fā)給各計(jì)算設(shè)備.采用MPIRIO之后可以實(shí)現(xiàn)計(jì)算設(shè)備之間相互通信,從而直接進(jìn)行模型參數(shù)的交互,在計(jì)算設(shè)備上對(duì)參數(shù)進(jìn)行更新,降低通信開(kāi)銷.模型并行中考慮流水線實(shí)現(xiàn)方式,即各個(gè)BWDSP計(jì)算完本設(shè)備上的模型層后將結(jié)果數(shù)據(jù)保存并傳給下一個(gè)BWDSP,同時(shí)開(kāi)始計(jì)算下一次的輸入數(shù)據(jù).
3.1.2 MPIRIO通信流程
根據(jù)MPI通信標(biāo)準(zhǔn),設(shè)計(jì)如下6個(gè)MPIRIO函數(shù)(此處忽略函數(shù)相關(guān)參數(shù)介紹):
1)MPIRIO_Init():MPIRIO通信系統(tǒng)初始化;
2)MPIRIO_Finalize():MPIRIO通信系統(tǒng)銷;
3)MPIRIO_Comm_rank():獲得當(dāng)前進(jìn)程在通信域中標(biāo)號(hào);
4)MPIRIO_Comm_size():獲得通信域中進(jìn)程數(shù);
5)MPIRIO_Send():進(jìn)行消息的發(fā)送;
6)MPIRIO_Recv():進(jìn)行消息的接收.
MPIRIO需要提供一些通信管理函數(shù),如判斷發(fā)送和接收結(jié)束等.MPIRIO的數(shù)據(jù)通信流程如圖3所示.發(fā)送方調(diào)用MPIRIO_Send()函數(shù)發(fā)送數(shù)據(jù)后,通過(guò)一系列的函數(shù)調(diào)用會(huì)到達(dá)BWDSP芯片提供的MRIO_send()函數(shù),該函數(shù)根據(jù)數(shù)據(jù)包中的目標(biāo)ID將數(shù)據(jù)包相關(guān)信息送到接收方的expected/unexpected隊(duì)列中.接收方調(diào)用MPIRIO_Recv()函數(shù)后,經(jīng)過(guò)一些列函數(shù)調(diào)用到達(dá)BWDSP芯片提供的MRIO_recv()函數(shù),該函數(shù)會(huì)從芯片的expected/unexpected隊(duì)列中查找,相應(yīng)的數(shù)據(jù)發(fā)送請(qǐng)求是否到達(dá).如果需要的數(shù)據(jù)已經(jīng)到達(dá),則將數(shù)據(jù)交付給上層應(yīng)用進(jìn)行相應(yīng)的處理.
圖3 MPIRIO通信流程圖
3.1.3 MPIRIO群集通信函數(shù)
深度學(xué)習(xí)模型中存在大量計(jì)算并行性,需要MPIRIO提供優(yōu)化的broadcast,reduce和gather等群集通信功能.
MPI提供的broadcast算法采用類似二叉樹(shù)的傳播方式,不考慮進(jìn)程在節(jié)點(diǎn)中的位置,只根據(jù)進(jìn)程rank進(jìn)行傳播,設(shè)共有N個(gè)進(jìn)程,時(shí)間復(fù)雜度近似為O(log2N),如圖4上半部分所示.本設(shè)計(jì)中,BWDSP芯片上只能啟動(dòng)一個(gè)進(jìn)程進(jìn)行計(jì)算,故將一個(gè)BWDSP單板卡看成一個(gè)節(jié)點(diǎn),將多個(gè)BWDSP單板卡互聯(lián)構(gòu)成多板卡系統(tǒng).MPIRIO的廣播算法是由發(fā)送方將數(shù)據(jù)傳到相連的switch中,由該switch采用復(fù)制分發(fā)向各個(gè)輸出端口進(jìn)行轉(zhuǎn)發(fā),時(shí)間復(fù)雜度近似為O(log4N),算法示意圖如圖4下半部分所示.
圖4 MPI和MPIRIO廣播通信示意圖
MPIRIO考慮到深度學(xué)習(xí)模型的參數(shù)更新機(jī)制,通過(guò)reduce操作可以將各計(jì)算設(shè)備得到的參數(shù)梯度值進(jìn)行聚合規(guī)約.MPIRIO利用RapidIO交換模型在gather聚合過(guò)程中,將多個(gè)設(shè)備的參數(shù)梯度值封裝在一個(gè)數(shù)據(jù)包中進(jìn)行傳輸,從而降低數(shù)據(jù)傳輸量,如圖4所示.MPI標(biāo)準(zhǔn)提供的gather操作數(shù)據(jù)包傳輸量大約N×log4N,而MPIRIO的數(shù)據(jù)包傳輸量大約(N-1)×4/3,時(shí)間復(fù)雜度可以參考MPIRIO的廣播算法.MPIRIO的reduce操作也可以采用類似的機(jī)制實(shí)現(xiàn).
設(shè)計(jì)全局通信域MPIRIO_COMM_WOLD和局部通信域MPIRIO_COMM_LOCAL,分別用于全局和局部的群集通信中.BWDSP虛擬平臺(tái)初始化后,形成的整個(gè)拓?fù)浣Y(jié)構(gòu)作為全局通信域.在初始化過(guò)程中,為每個(gè)RapidIO交換模型分配一個(gè)標(biāo)識(shí)符,每個(gè)RapidIO交換模型相連的BWDSP模型組成一個(gè)局部通信域,即每個(gè)BWDSP單板卡作為一個(gè)局部通信域.
算法1描述了MPIRIO的廣播操作MPIRIO_Bcast()函數(shù)的具體實(shí)現(xiàn)過(guò)程.
算法1.MPIRIO_Bcast()函數(shù)算法
輸入:數(shù)據(jù)緩沖區(qū),數(shù)據(jù)個(gè)數(shù),發(fā)送方ID,通信域等
輸出:數(shù)據(jù)傳輸是否成功狀態(tài)
1.系統(tǒng)首先會(huì)感知整個(gè)系統(tǒng)的狀態(tài),這部分功能由MPIRIO_Init()函數(shù)實(shí)現(xiàn),獲得整個(gè)系統(tǒng)的拓?fù)浣Y(jié)構(gòu).
2.if(發(fā)送方ID==通信域中rank標(biāo)識(shí)位)
執(zhí)行3中MRIO_send()函數(shù),并且在調(diào)用MRIO_send()函數(shù)時(shí)提供的數(shù)據(jù)包為廣播類型數(shù)據(jù)包
else
執(zhí)行MRIO_recv()函數(shù),準(zhǔn)備接收發(fā)送方發(fā)送的數(shù)據(jù)包
3.MRIO_send()對(duì)接收到的數(shù)據(jù)包進(jìn)行解析,并調(diào)用相應(yīng)的處理邏輯
if(數(shù)據(jù)包類型==單播數(shù)據(jù)包)
根據(jù)目標(biāo)方ID查找路由表,并進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)
elseif(數(shù)據(jù)包類型==廣播數(shù)據(jù)包)
if(該數(shù)據(jù)包標(biāo)識(shí)符之前未出現(xiàn)過(guò))
for(循環(huán)RapidIO交換模型的每個(gè)端口)//排除輸入該信息的端口
復(fù)制該數(shù)據(jù)包并從循環(huán)到的端口轉(zhuǎn)發(fā)出去
else
不對(duì)該數(shù)據(jù)包進(jìn)行處理,直接丟棄
算法2描述了MPIRIO的聚集操作MPIRIO_Gather()函數(shù)的具體實(shí)現(xiàn)過(guò)程.
算法2.MPIRIO_Gather()函數(shù)算法
輸入:發(fā)送數(shù)據(jù)緩沖區(qū),數(shù)據(jù)個(gè)數(shù),接收數(shù)據(jù)緩沖區(qū),接收方ID,通信域等
輸出:數(shù)據(jù)傳輸是否成功狀態(tài)
1.系統(tǒng)首先會(huì)感知整個(gè)系統(tǒng)的狀態(tài),這部分功能由MPIRIO_Init()函數(shù)實(shí)現(xiàn),獲得整個(gè)系統(tǒng)的拓?fù)浣Y(jié)構(gòu).
2.if(發(fā)送方ID==通信域中rank標(biāo)識(shí)位)
執(zhí)行MRIO_recv()函數(shù),準(zhǔn)備接收發(fā)送方發(fā)送的數(shù)據(jù)包
else
執(zhí)行3中MRIO_send()函數(shù),并且在調(diào)用MRIO_send()函數(shù)時(shí)提供的數(shù)包為聚集類型數(shù)據(jù)包
3.MRIO_send()對(duì)接收到的數(shù)據(jù)包進(jìn)行解析,并調(diào)用相應(yīng)的處理邏輯
if(數(shù)據(jù)包類型==單播數(shù)據(jù)包)
根據(jù)目標(biāo)方ID查找路由表,并進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)
else if(數(shù)據(jù)包類型==聚集數(shù)據(jù)包類型)
對(duì)應(yīng)數(shù)據(jù)包標(biāo)志位計(jì)數(shù)器gather_count++
if(gather_count==(連接設(shè)備端口數(shù)-1))
將RapidIO交換模型中緩存的數(shù)據(jù)封裝,從剩余的端口號(hào)port轉(zhuǎn)發(fā)
else
則將該數(shù)據(jù)包的數(shù)據(jù)部分放入RapidIO交換模型中緩存
3.1.4 MPIRIO同步控制
MPIRIO中需要考慮多種不同優(yōu)先級(jí)和數(shù)據(jù)長(zhǎng)度的包進(jìn)行傳輸,設(shè)計(jì)不同優(yōu)先級(jí)的數(shù)據(jù)流.規(guī)定優(yōu)先級(jí)高的數(shù)據(jù)流可以先進(jìn)行數(shù)據(jù)傳輸,在優(yōu)先級(jí)相同情況下,較短的數(shù)據(jù)包先進(jìn)行發(fā)送.通過(guò)優(yōu)先級(jí)傳輸方式,可以降低系統(tǒng)阻塞的概率,提高數(shù)據(jù)傳輸速率.由于RapidIO交換協(xié)議支持的數(shù)據(jù)包長(zhǎng)度最大為276字節(jié),其中有效數(shù)據(jù)部分為250字節(jié),故上層應(yīng)用發(fā)送的數(shù)據(jù)包長(zhǎng)度過(guò)長(zhǎng)時(shí),BWDSP虛擬平臺(tái)的通信接口會(huì)將數(shù)據(jù)包進(jìn)行拆分,分成多個(gè)具有相同標(biāo)識(shí)符的RapidIO數(shù)據(jù)包進(jìn)行發(fā)送.
BWDSP通信代碼庫(kù)提供通信同步的底層原語(yǔ),上層利用該原語(yǔ)實(shí)現(xiàn)通信過(guò)程的同步控制.深度學(xué)習(xí)中的參數(shù)調(diào)整,需要先得到舊的參數(shù)值和參數(shù)更新值后,才能將舊的參數(shù)調(diào)整為新的參數(shù),并且每一批次的訓(xùn)練數(shù)據(jù)在各個(gè)計(jì)算設(shè)備上的處理順序要保持一致.MPIRIO的通信同步過(guò)程需要考慮底層RapidIO交換模型提供的發(fā)送響應(yīng)機(jī)制,RapidIO采用類似握手協(xié)議機(jī)制實(shí)現(xiàn)同步控制,MPIRIO在RapidIO的基礎(chǔ)上設(shè)計(jì)了MPIRIO_Barrier()函數(shù).MPIRIO_Barrier()函數(shù)作為MPIRIO的同步路障函數(shù),其實(shí)現(xiàn)如圖5所示.
圖5 MPIRIO_Barrier實(shí)現(xiàn)示意圖
算法3描述了MPIRIO的同步路障操作MPIRIO_Barrier()函數(shù)的具體實(shí)現(xiàn)過(guò)程.
算法3.MPIRIO_Barrier()函數(shù)算法
輸入:全局通信域
輸出:函數(shù)執(zhí)行成功標(biāo)志
1.系統(tǒng)首先會(huì)感知整個(gè)系統(tǒng)的狀態(tài),這部分功能由MPIRIO_Init()函數(shù)實(shí)現(xiàn),獲得整個(gè)系統(tǒng)的拓?fù)浣Y(jié)構(gòu).
2.MPIRIO_Barrier()函數(shù)的內(nèi)部實(shí)現(xiàn)
各個(gè)BWDSP芯片執(zhí)行到該函數(shù)后,會(huì)將共享內(nèi)存區(qū)域的barrier_count++
if(barrier_count==全局通信域中size標(biāo)識(shí)位)
該BWDSP芯片繼續(xù)執(zhí)行
通知其他因?yàn)閎arrier而等待的BWDSP芯片繼續(xù)執(zhí)行
else
該BWDSP芯片等待,收到其他BWDSP芯片的通知后繼續(xù)執(zhí)行
3.1.5 MPIRIO性能分析和優(yōu)化
MPIRIO需要提供基本性能分析功能,可以對(duì)系統(tǒng)中的數(shù)據(jù)傳輸量和傳輸時(shí)間等進(jìn)行統(tǒng)計(jì),估計(jì)系統(tǒng)流量的程度,并將統(tǒng)計(jì)結(jié)果返回給用戶.設(shè)計(jì)了MPIRIO_time()函數(shù),該函數(shù)通過(guò)記錄各個(gè)進(jìn)程開(kāi)始執(zhí)行時(shí)的時(shí)鐘周期數(shù)cl_start,系統(tǒng)統(tǒng)計(jì)時(shí)的時(shí)鐘周期數(shù)cl_end,結(jié)合系統(tǒng)時(shí)鐘頻率cl_frequence可以得出進(jìn)程運(yùn)行時(shí)間t_thread,其公式如公式(3)所示.同時(shí)設(shè)計(jì)了MPIRIO_traffic()函數(shù),該函數(shù)可以記錄系統(tǒng)中傳輸?shù)乃袛?shù)據(jù)包的數(shù)量pkt_number.結(jié)合MPIRIO_time()函數(shù),可以得到系統(tǒng)過(guò)去時(shí)間的平均流量程度sys_flow,如公式(4)所示,其中N代表BWDSP模型的數(shù)量,ti_thread是考慮到不同BWDSP模型的執(zhí)行時(shí)間.
(3)
(4)
考慮底層的BWDSP虛擬平臺(tái)經(jīng)過(guò)擴(kuò)展互聯(lián)后,可能形成圖型拓?fù)浣Y(jié)構(gòu),需要設(shè)計(jì)動(dòng)態(tài)路由方案,針對(duì)數(shù)據(jù)通信進(jìn)行優(yōu)化.對(duì)點(diǎn)對(duì)點(diǎn)通信進(jìn)行最佳路由選擇,同時(shí)對(duì)群集通信實(shí)現(xiàn)負(fù)載均衡[14].
BWDSP虛擬平臺(tái)以RapidIO作為交換模型,采用分布式路由算法.故本文采用最小生成樹(shù)算法[15]實(shí)現(xiàn)負(fù)載均衡,該算法是在MPIRIO_Init()函數(shù)中實(shí)現(xiàn)的.MPIRIO_Init()函數(shù)首先感知整個(gè)BWDSP虛擬平臺(tái)系統(tǒng)的拓?fù)浣Y(jié)構(gòu),然后根據(jù)拓?fù)浣Y(jié)構(gòu)信息采用Prim算法獲得最小生成樹(shù)結(jié)構(gòu),并相應(yīng)的修改虛擬平臺(tái)中RapidIO交換模型路由表信息.圖6上半部分是BWDSP平臺(tái)原來(lái)的拓?fù)浣Y(jié)構(gòu),圖6下半部分是最小生成樹(shù)算法生成的拓?fù)浣Y(jié)構(gòu).
圖6 BWDSP平臺(tái)優(yōu)化前后拓?fù)浣Y(jié)構(gòu)
MPIRIO并行計(jì)算通信庫(kù)除了用于常規(guī)的并行計(jì)算任務(wù),如矩陣乘法,蝶形求和等基本算法,還應(yīng)該為深度學(xué)習(xí)應(yīng)用服務(wù),使深度學(xué)習(xí)應(yīng)用在BWDSP虛擬平臺(tái)上的部署成為可能.BWDSP平臺(tái)本身提供了深度學(xué)習(xí)算子庫(kù)bwdnn,包括卷積算子、池化算子和softmax算子等.
由于深度學(xué)習(xí)模型通常較大,難以部署在單個(gè)BWDSP芯片上,通常需要部署在多個(gè)BWDSP芯片構(gòu)成的BWDSP平臺(tái)上.MPIRIO使各個(gè)BWDSP上的深度學(xué)習(xí)模型層與層之間更好的通信,包括前向傳播時(shí)中間結(jié)果的傳遞和反向傳播時(shí)梯度和損失信息的傳遞.
神經(jīng)網(wǎng)絡(luò)中卷積運(yùn)算[16]的本質(zhì)是乘加運(yùn)算,包括一維卷積運(yùn)算、二維卷積運(yùn)算和三維卷積運(yùn)算.以二維卷積為例進(jìn)行分析,由于輸入數(shù)據(jù)與卷積核通道數(shù)一樣,所以二維卷積運(yùn)算輸出數(shù)據(jù)是二維矩陣.卷積運(yùn)算填充方式為“VALID”,則輸出數(shù)據(jù)維度OH和OW滿足公式(5),卷積運(yùn)算相關(guān)參數(shù)介紹如下:
1)IH:輸入數(shù)據(jù)高度;
2)IW:輸入數(shù)據(jù)寬度;
3)CI:輸入數(shù)據(jù)/卷積核通道數(shù);
4)OH:輸出數(shù)據(jù)高度;
5)OW:輸出數(shù)據(jù)寬度;
6)KH:卷積核高度;
7)KW:卷積核寬度;
8)SH:卷積步長(zhǎng)高度;
9)SW:卷積步長(zhǎng)寬度.
(5)
BWDSP進(jìn)行卷積運(yùn)算優(yōu)化時(shí),采用im2col[17]方式實(shí)現(xiàn).即將卷積運(yùn)算的輸入數(shù)據(jù)和卷積核分別轉(zhuǎn)化為二維矩陣和一維矩陣,再進(jìn)行矩陣相乘.BWDSP芯片內(nèi)部有16個(gè)乘加器,可以同時(shí)進(jìn)行16個(gè)乘加運(yùn)算.進(jìn)行數(shù)據(jù)劃分時(shí),將輸入矩陣以16個(gè)滑動(dòng)窗口數(shù)據(jù)為一組分配給BWDSP模型,充分利用BWDSP和MPIRIO提供的并行化能力.
實(shí)驗(yàn)過(guò)程是通過(guò)在不同BWDSP虛擬平臺(tái)拓?fù)浣Y(jié)構(gòu)下,對(duì)MPIRIO的點(diǎn)對(duì)點(diǎn)通信函數(shù)和群集通信函數(shù)功能進(jìn)行測(cè)試.使用MPIRIO對(duì)常規(guī)并行計(jì)算任務(wù),如矩陣乘法和蝶形求和算法進(jìn)行測(cè)試,同時(shí)對(duì)深度學(xué)習(xí)中常見(jiàn)的卷積運(yùn)算進(jìn)行測(cè)試.最后將MPIRIO與MPICH實(shí)現(xiàn)的通信功能進(jìn)行對(duì)比,主要是從數(shù)據(jù)傳輸和時(shí)間進(jìn)行分析,并與已有工作進(jìn)行對(duì)比分析.
在不同BWDSP虛擬平臺(tái)拓?fù)浣Y(jié)構(gòu)下,測(cè)試了MPIRIO設(shè)計(jì)的點(diǎn)對(duì)點(diǎn)通信函數(shù)MPIRIO_Send()和MPIRIO_Recv()函數(shù),群集通信函數(shù)MPIRIO_Bcast()、MPIRIO_Reduce()、MPIRIO_Gather()和MPIRIO_Scatter()函數(shù)的數(shù)據(jù)傳輸性能和實(shí)現(xiàn)原理.如表1所示是在8個(gè)和16個(gè)BWDSP模型下數(shù)據(jù)傳輸測(cè)試結(jié)果,其中數(shù)據(jù)量單位是字節(jié),時(shí)間單位是微秒.由于每個(gè)BWDSP上只能執(zhí)行一個(gè)進(jìn)程,故MPIRIO的測(cè)試中進(jìn)程意義等于BWDSP模型.
表1 MPIRIO在8和16進(jìn)程數(shù)據(jù)傳輸測(cè)試
從表1中可以看出,數(shù)據(jù)傳輸時(shí)間受系統(tǒng)拓?fù)浣Y(jié)構(gòu)影響,系統(tǒng)拓?fù)浣Y(jié)構(gòu)越大越復(fù)雜,則數(shù)據(jù)傳輸時(shí)間越長(zhǎng).以基本的點(diǎn)對(duì)點(diǎn)通信分析,在8個(gè)進(jìn)程控制的情況下,數(shù)據(jù)傳輸量10K左右的情況需要時(shí)間202微秒.在16個(gè)進(jìn)程控制的情況下,傳遞相同數(shù)據(jù)量需要時(shí)間313微秒,這是因?yàn)橄到y(tǒng)拓?fù)浣Y(jié)構(gòu)變得復(fù)雜,數(shù)據(jù)在通信時(shí)需要經(jīng)過(guò)更多的RapidIO交換模型.在相同數(shù)據(jù)傳輸量的情況下,規(guī)約操作需要的時(shí)間最長(zhǎng),這是因?yàn)镸PIRIO可以在RapidIO交換模型中對(duì)數(shù)據(jù)進(jìn)行規(guī)約操作,此部分時(shí)間被考慮在數(shù)據(jù)傳輸時(shí)間中.其次是聚集操作,在RapidIO交換模型中會(huì)對(duì)數(shù)據(jù)包進(jìn)行封裝消耗部分時(shí)間,從而減少數(shù)據(jù)包的傳輸量.廣播操作則是在RapidIO交換模型處對(duì)數(shù)據(jù)包進(jìn)行復(fù)制轉(zhuǎn)發(fā),在一定程度上會(huì)降低數(shù)據(jù)通信時(shí)間.
對(duì)MPIRIO的路障函數(shù)和性能統(tǒng)計(jì)等函數(shù)進(jìn)行了測(cè)試,都可以正確實(shí)現(xiàn)功能,實(shí)現(xiàn)各BWDSP模型的協(xié)同工作.
常規(guī)并行計(jì)算任務(wù)有矩陣乘法和蝶形求和算法等,對(duì)MPIRIO實(shí)現(xiàn)常規(guī)并行計(jì)算任務(wù)進(jìn)行實(shí)驗(yàn)和分析.對(duì)于矩陣乘法,我們采用不同方法進(jìn)行測(cè)試,包括基本分片乘法和類Fox乘法實(shí)驗(yàn)(基本分片乘法用1表示,類Fox乘法用2表示).測(cè)試結(jié)果均正確,表明MPIRIO可以正常實(shí)現(xiàn)矩陣乘法,MPIRIO矩陣乘法實(shí)驗(yàn)結(jié)果如表2所示,是在8個(gè)進(jìn)程下進(jìn)行測(cè)試,時(shí)間單位是微秒.
表2 MPIRIO在8進(jìn)程矩陣乘法時(shí)間
矩陣A和矩陣B進(jìn)行矩陣基本分片乘法,各個(gè)BWDSP模型上擁有矩陣B的所有數(shù)據(jù).BWDSP0號(hào)模型擁有矩陣A的數(shù)據(jù),將矩陣A按照BWDSP模型數(shù)分成8份,通過(guò)MPIRIO_Scatter()函數(shù)進(jìn)行散射.各個(gè)BWDSP模型接收到A的分塊數(shù)據(jù)后,跟矩陣B進(jìn)行相乘,分別得到部分矩陣相乘結(jié)果.然后由BWDSP0模型執(zhí)行規(guī)約算法,獲得各個(gè)BWDSP模型上的部分矩陣相乘結(jié)果,最后BWDSP0模型上擁有整個(gè)矩陣相乘結(jié)果.設(shè)矩陣A數(shù)據(jù)為m×n,矩陣B的數(shù)據(jù)為n×m,數(shù)據(jù)傳播速率為s,BWDSP模型計(jì)算能力為c,讀寫(xiě)數(shù)據(jù)帶寬b,則基本分片乘法時(shí)間t_s如公式(6)所示.
(6)
矩陣A和矩陣B進(jìn)行矩陣類Fox乘法,BWDSP0模型擁有矩陣A和矩陣B的數(shù)據(jù),通過(guò)MPIRIO_Scatter算法將矩陣A按行和矩陣B按列分片發(fā)往各個(gè)BWDSP模型.各個(gè)BWDSP模型完成部分矩陣運(yùn)算后,將自身的矩陣B分片向下一進(jìn)程發(fā)送,得到新的矩陣B分片與自身的矩陣A分片進(jìn)行運(yùn)算.當(dāng)每個(gè)BWDSP模型完成A分片和所有B分片的運(yùn)算后,BWDSP0模型執(zhí)行規(guī)約算法獲得整個(gè)矩陣相乘結(jié)果,其時(shí)間t_c如公式(7)所示.
(7)
從表2可以看出,當(dāng)矩陣乘法數(shù)據(jù)在8×8矩陣到8×50矩陣規(guī)模時(shí),時(shí)間處于增加狀態(tài).由于進(jìn)程啟動(dòng)等開(kāi)銷,以及數(shù)據(jù)傳輸過(guò)程中對(duì)緩存資源的占用開(kāi)銷等,使得矩陣乘法時(shí)間并不是按倍數(shù)進(jìn)行增加.同時(shí)可以看出矩陣乘法2相比較矩陣乘法1,時(shí)間消耗明顯增加了,這是由于采用了時(shí)間換空間的思想,增加了不同BWDSP模型之間數(shù)據(jù)傳輸開(kāi)銷.
蝶形求和算法是一種求解全局和的算法,在MPI并行編程中,是一個(gè)基本測(cè)試用例.MPIRIO中可由用戶編寫(xiě)算法實(shí)現(xiàn)蝶形求和,還可以使用MPIRIO_Reduce()函數(shù)中MPIRIO_SUM實(shí)現(xiàn)類似全局求和功能.分別測(cè)試兩種算法的時(shí)間開(kāi)銷(自編寫(xiě)算法用1表示,MPIRIO_Reduce實(shí)現(xiàn)用2表示),測(cè)試結(jié)果如表3所示,數(shù)據(jù)量單位是字節(jié),時(shí)間單位是微秒.設(shè)BWDSP模型數(shù)為N,則MPIRIO_Reduce()算法的時(shí)間復(fù)雜度約為O(log2N).實(shí)驗(yàn)結(jié)果表明,采用Reduce規(guī)約算法實(shí)現(xiàn)蝶形求和算法優(yōu)于自編寫(xiě)算法,因?yàn)樽跃帉?xiě)算法需要通過(guò)多次點(diǎn)對(duì)點(diǎn)通信實(shí)現(xiàn),并且需要更復(fù)雜的同步控制.規(guī)約算法在RapidIO交換模型中對(duì)數(shù)據(jù)進(jìn)行規(guī)約處理,減少了數(shù)據(jù)包的傳輸.
表3 MPIRIO蝶形求和
MPIRIO的設(shè)計(jì)目標(biāo)之一,是為深度學(xué)習(xí)模型在BWDSP平臺(tái)上的部署服務(wù).神經(jīng)網(wǎng)絡(luò)中主要的卷積算法,可以使用MPIRIO在BWDSP平臺(tái)上運(yùn)行.針對(duì)卷積算法,使用im2col方法進(jìn)行優(yōu)化,將輸入數(shù)據(jù)和卷積核都轉(zhuǎn)化為矩陣形式,然后結(jié)合矩陣相乘算法進(jìn)行實(shí)現(xiàn).
卷積運(yùn)算測(cè)試結(jié)果如表4所示,其中卷積運(yùn)算輸入數(shù)據(jù)填充方式統(tǒng)一為“VALID”,步長(zhǎng)為1,時(shí)間單位為微秒.測(cè)試是在8個(gè)BWDSP模型下進(jìn)行,并將卷積運(yùn)算數(shù)據(jù)平均分配給各BWDSP模型.
表4 MPIRIO卷積運(yùn)算測(cè)試
以表4中第4條數(shù)據(jù)分析,其輸入數(shù)據(jù)維度為36×36×3,卷積核維度為5×5×3,數(shù)據(jù)填充方式.根據(jù)公式(5)知輸出數(shù)據(jù)應(yīng)該為32×32×1維,與表格中輸出數(shù)據(jù)維度一致,表明通過(guò)MPIRIO可以編程實(shí)現(xiàn)卷積運(yùn)算.MPIRIO將表4中第4條卷積運(yùn)算數(shù)據(jù),轉(zhuǎn)化為16×75與75×1的矩陣相乘,并使用基本分片乘法測(cè)試得到時(shí)間,故用MPIRIO設(shè)計(jì)卷積運(yùn)算類似于設(shè)計(jì)矩陣乘法.
MPICH2作為主流的并行編程庫(kù),與其進(jìn)行對(duì)比具有重要意義.硬件環(huán)境為Intel Core i5-2400 CPU @ 3.10GHz,操作系統(tǒng)為ubuntu 16.04 LTS,內(nèi)存8GB,配置并行編程庫(kù)MPICH2,設(shè)為環(huán)境1;Intel Core i7-6700HQ CPU @ 2.60GHz,操作系統(tǒng)windows10,內(nèi)存8GB,軟件環(huán)境為Visual Studio 2017,配置并行編程庫(kù)MPICH2,設(shè)為環(huán)境2.測(cè)試MPICH2的點(diǎn)對(duì)點(diǎn)通信函數(shù)和群集通信函數(shù)性能,并與MPIRIO的通信函數(shù)進(jìn)行對(duì)比,測(cè)試結(jié)果如表5所示,其中數(shù)據(jù)量單位為字節(jié),時(shí)間單位為微秒.
表5 MPICH2通信函數(shù)測(cè)試
為了正確對(duì)比,表1和表5中時(shí)間都是在系統(tǒng)頻率為1MHz下的測(cè)試結(jié)果.環(huán)境1中MPICH2通信時(shí)間普遍比MPIRIO的時(shí)間短,這是因?yàn)镸PICH2是在單機(jī)上進(jìn)行測(cè)試,而MPIRIO是分布式的BWDSP虛擬平臺(tái)上進(jìn)行測(cè)試,數(shù)據(jù)通過(guò)RapidIO交換模型時(shí)需要時(shí)間,從而會(huì)使得數(shù)據(jù)通信時(shí)間略長(zhǎng).可以發(fā)現(xiàn)MPICH2中點(diǎn)對(duì)點(diǎn)通信在8進(jìn)程和16進(jìn)程時(shí)間差距較大,因?yàn)辄c(diǎn)對(duì)點(diǎn)通信采取阻塞通信方式,故循環(huán)向其他進(jìn)程發(fā)送消息需要較長(zhǎng)時(shí)間,隨著進(jìn)程數(shù)的增加通信時(shí)間相應(yīng)增加.
環(huán)境2中各函數(shù)通信時(shí)間相比MPIRIO和環(huán)境1是最多的,主要是因?yàn)楸緦?shí)驗(yàn)選型i5CPU是4核心,而i7CPU核心數(shù)是2核心,在一定程度上i5并發(fā)性高于i7.另一方面是因?yàn)閡bunt系統(tǒng)下直接采用MPICXX進(jìn)行編譯,優(yōu)于windows下visual studio編譯MPI程序.由于上述等因素,MPIRIO的通信時(shí)間也比環(huán)境2的通信時(shí)間低.
修改MPICH2源碼,在其通信函數(shù)中對(duì)發(fā)送和接收數(shù)據(jù)包數(shù)量進(jìn)行統(tǒng)計(jì).通過(guò)MPICH2群集通信數(shù)據(jù)包數(shù)量統(tǒng)計(jì),對(duì)比MPIRIO的群集通信函數(shù)數(shù)據(jù)包數(shù)量,表明MPIRIO群集通信函數(shù)進(jìn)行了優(yōu)化.MPICH2和MPIRIO的群集通信數(shù)據(jù)包數(shù)量統(tǒng)計(jì)情況,如表6所示,數(shù)據(jù)量單位是字節(jié).
表6中的數(shù)據(jù)包數(shù)量是各個(gè)進(jìn)程發(fā)送和接收的數(shù)據(jù)包數(shù)量之和,在相同的8進(jìn)程數(shù)情況下,MPIRIO的群集通信數(shù)據(jù)包數(shù)量比MPICH2少,這是因?yàn)镸PIRIO的群集通信操作進(jìn)行了優(yōu)化.由于采用不同CPU進(jìn)行測(cè)試,發(fā)送的數(shù)據(jù)包的數(shù)量是一樣的,故該測(cè)試不區(qū)分環(huán)境1和環(huán)境2.MPIRIO群集通信接口的實(shí)現(xiàn)在MPI的基礎(chǔ)上進(jìn)行了修改,并擴(kuò)展了RapidIO交換模型的功能,使其可以適應(yīng)MPIRIO設(shè)計(jì)的廣播、聚集和規(guī)約等算法的需求.
表6 MPICH2和MPIRIO群集通信數(shù)據(jù)包數(shù)量
綜合上述實(shí)驗(yàn)結(jié)果和分析,基于 BWDSP虛擬平臺(tái)的并行計(jì)算通信庫(kù)MPIRIO,符合MPI標(biāo)準(zhǔn)規(guī)范,可以實(shí)現(xiàn)BWDSP芯片之間的點(diǎn)對(duì)點(diǎn)通信和群集通信,并對(duì)群集通信函數(shù)進(jìn)行了優(yōu)化.MPIRIO可以用于常規(guī)并行計(jì)算任務(wù),結(jié)合BWDSP體系結(jié)構(gòu)特點(diǎn)對(duì)卷積運(yùn)算進(jìn)行了優(yōu)化.最后通過(guò)與MPICH的對(duì)比實(shí)驗(yàn),表明本文設(shè)計(jì)的MPIRIO群集通信優(yōu)化算法可以正常工作.
本文研究與文獻(xiàn)[3]的研究存在相應(yīng)聯(lián)系,但也具有差異性.兩者都是基于單核BWDSP芯片構(gòu)成的多核平臺(tái)展開(kāi)研究,同時(shí)考慮了深度學(xué)習(xí)在平臺(tái)上的部署運(yùn)行問(wèn)題.但是本文工作是以未來(lái)實(shí)際生產(chǎn)的單板卡和多板卡為原型,設(shè)計(jì)相應(yīng)的并行通信接口,方便用戶對(duì)常規(guī)并行任務(wù)的處理,再此基礎(chǔ)上分析深度學(xué)習(xí)中卷積運(yùn)算并行性特點(diǎn),并對(duì)其進(jìn)行支持.而文獻(xiàn)[3]則是以多個(gè)DSP直接相連作為平臺(tái)原型,并且在此基礎(chǔ)上研究流水線,三緩沖區(qū)等技術(shù),加速深度學(xué)習(xí)運(yùn)行.
本文在BWDSP虛擬平臺(tái)的基礎(chǔ)上,借鑒了已有的MPI標(biāo)準(zhǔn),設(shè)計(jì)了并行計(jì)算通信庫(kù)MPIRIO.MPIRIO是以RapidIO交換模型作為通信協(xié)議,并在RapidIO握手協(xié)議機(jī)制的基礎(chǔ)上實(shí)現(xiàn)了通信的同步控制.在MPICH提供的通信函數(shù)接口基礎(chǔ)上,本文設(shè)計(jì)了優(yōu)化的群集通信函數(shù),主要目標(biāo)是減少通信中數(shù)據(jù)包的傳輸量.同時(shí)在復(fù)雜系統(tǒng)拓?fù)浣Y(jié)構(gòu)下,采用最小生成樹(shù)算法獲得最優(yōu)拓?fù)浣Y(jié)構(gòu),使系統(tǒng)平均傳輸性能較好.本文提供的MPIRIO通信接口,通過(guò)將BWDSP,RapidIO和MPI三者相結(jié)合,相比BWDSP虛擬平臺(tái)提供的基本通信原語(yǔ),提升了用戶編程并部署任務(wù)在虛擬平臺(tái)上的方便性和靈活性,同時(shí)提高了整個(gè)系統(tǒng)的運(yùn)行效率.
本文通過(guò)實(shí)驗(yàn)和對(duì)比實(shí)驗(yàn),證明了MPIRIO的可用性,并分析了MPIRIO相比MPI標(biāo)準(zhǔn)所做出的部分優(yōu)化.在未來(lái)的工作中,進(jìn)一步完善并行通信庫(kù)MPIRIO,提供更多的MPI規(guī)范標(biāo)準(zhǔn)接口,如向量化的通信接口.設(shè)計(jì)更加優(yōu)化的路由選擇和數(shù)據(jù)調(diào)度算法,并提升MPIRIO的可移植性,使其可以適應(yīng)新的硬件平臺(tái).