本技術(shù)涉及分布式計算系統(tǒng),特別地涉及基于飛騰ft-6678n的分布式計算系統(tǒng)中實現(xiàn)“訂閱與發(fā)布”通信模式的方法及其系統(tǒng),并且采用了非阻塞的實現(xiàn)方式使得通信能夠與計算并行,極大地提高了ft-6678n處理器的使用效率,特別適用于多ft-6678n或多通用處理器的分布式并行計算系統(tǒng)中。
背景技術(shù):
1、mpi(message?passing?interface)是一種用于并行計算的消息傳遞接口,也是一個消息傳遞函數(shù)庫的標(biāo)準(zhǔn)說明,提供了進(jìn)程間點對點通信和組通信兩種通信模式。在基于mpi得編程模型中,計算系統(tǒng)包括一個或多個彼此通過調(diào)用庫函數(shù)進(jìn)行消息收、發(fā)通信的進(jìn)程。mpi為程序員提供一個并行環(huán)境庫,程序員通過調(diào)用mpi的庫程序來達(dá)到程序員所要達(dá)到的并行計算目的。
2、mpi一般運行于通用處理器,主要運行在windows或linux環(huán)境中,并且不同節(jié)點間的消息通過以太網(wǎng)進(jìn)行傳輸。mpi的節(jié)點指參與并行計算的單個計算單元。節(jié)點可以是一臺獨立的計算機(jī),或者是一個多處理器系統(tǒng)中的單個處理器。每個節(jié)點運行一個或多個進(jìn)程,這些進(jìn)程通過mpi進(jìn)行通信和協(xié)作。
3、在多ft-6678n之間有srio(serial?rapidio)通信鏈路,它的數(shù)據(jù)通信速率(3.125g、x4模式下)是千兆以太網(wǎng)的10倍,并且在數(shù)據(jù)傳輸時可以采用的dma通信方式,在不需要處理器的參與的情況下就可以完成數(shù)據(jù)的傳輸,極大地減小了處理器的負(fù)載,讓處理器不必花費大量的時間去完成數(shù)據(jù)的傳輸,而去專注于做計算,從而提高了處理器的使用率。
4、mpi基于通用操作系統(tǒng),自身功能豐富且對通用操作系統(tǒng)依賴較多,并且底層僅提供對網(wǎng)絡(luò)的支持而缺少對srio鏈路的支持。而在飛騰ft-6678n上運行的是輕量級的嵌入式操作系統(tǒng),在該系統(tǒng)中實現(xiàn)mpi的遷移是困難的。
5、“訂閱與發(fā)布”(publish&subscribe)通信模式,是一種消息通信的模式,也是一種軟件架構(gòu)設(shè)計模式。用于解耦消息的發(fā)布者與接收者。在這種通信模式中,消息發(fā)布者負(fù)責(zé)發(fā)布消息,而訂閱者則可以選擇訂閱其感興趣的消息主題。當(dāng)發(fā)布者有新消息發(fā)布時,訂閱者將收到相應(yīng)的消息。“訂閱與發(fā)布”通信模式中,發(fā)布者與訂閱者基于例如主題(topic)而傳遞消息。發(fā)布者產(chǎn)生具有某主題的消息,而該主題的訂閱者將接收到該主題下的消息。發(fā)布者與接收者的行為被簡化為發(fā)布特定主題消息與接收特定主題消息,而無需關(guān)心彼此的網(wǎng)絡(luò)地址、消息被產(chǎn)生和接收的時間,消息的發(fā)布與接收過程也不會造成對消息通信對端的阻塞。發(fā)布者和訂閱者可以獨立于彼此存在和運行。
6、在分布式計算系統(tǒng)中使用訂閱與發(fā)布通信模式能簡化消息的發(fā)布者與訂閱者實現(xiàn)消息通信的復(fù)雜度。分布式計算系統(tǒng)中可以同時存在多個發(fā)布者與多個訂閱者。而對于特定的主題,該主題的消息的發(fā)布者是唯一的,訂閱者可以有多個。發(fā)布者可以同時基于不同的主題發(fā)布消息,還可以基于同一主題發(fā)布多個消息。訂閱者也可以同時接收不同主題的消息。
技術(shù)實現(xiàn)思路
1、傳統(tǒng)水聲信號處理所采用的系統(tǒng)框架,是基于高度并行化的計算平臺,實現(xiàn)的數(shù)據(jù)流模型。水聲信號處理系統(tǒng)中各個計算節(jié)點按照軟件流水線的方式,并發(fā)進(jìn)行計算和通信工作,各計算節(jié)點協(xié)同完成高性能水聲計算任務(wù)。這樣的架構(gòu)要求系統(tǒng)中每個節(jié)點獨立完成數(shù)據(jù)接收、信號處理計算以及數(shù)據(jù)發(fā)送的操作,盡可能實現(xiàn)解耦,各個節(jié)點按照各自的節(jié)拍(數(shù)據(jù)接收、信號處理計算與數(shù)據(jù)發(fā)送)并發(fā)運行。在這種模式下,會帶來兩個問題:一是計算節(jié)點之間的通信(數(shù)據(jù)接收與數(shù)據(jù)發(fā)送節(jié)拍)通常需要較長的時間,在阻塞通信尚未結(jié)束時,計算節(jié)點的信號處理計算節(jié)拍無法被執(zhí)行而只能等待,從而浪費了節(jié)點的計算資源;二是在基于網(wǎng)絡(luò)、srio以及共享內(nèi)存的通信方式都涉及到如底層硬件相關(guān)的具體實現(xiàn)(如在底層使用以太網(wǎng)鏈路時,需要事先知道通信雙方的ip地址和通信端口號;在底層使用srio鏈路時,需要事先知道對端的目的id以及數(shù)據(jù)存放地址;在底層使用共享鏈路時,需要事先知道對端數(shù)據(jù)存放地址)。為了避免沖突,在多ft-6678n的系統(tǒng)中網(wǎng)絡(luò)的ip地址、srio的id等信息都與ft-6678n的物理位置(如機(jī)箱、槽位等)進(jìn)行綁定,最終導(dǎo)致應(yīng)用程序只能運行在系統(tǒng)中固定物理位置的ft-6678n上。這限制了對應(yīng)用程序的復(fù)制與分發(fā),為一套基于飛騰ft-6678n的多處理器分布式并行計算系統(tǒng)開發(fā)的應(yīng)用程序,僅能運行于該系統(tǒng),在希望將其運行于另一分布式計算系統(tǒng)時,需要進(jìn)行繁雜的開發(fā)適配工作。
2、進(jìn)一步地,由于缺乏基礎(chǔ)軟件的支持,當(dāng)前用于基于飛騰ft-6678n的多處理器分布式并行計算系統(tǒng)的應(yīng)用程序無法基于訂閱與發(fā)布通信模式進(jìn)行消息通信。
3、為解決上述技術(shù)問題的一種或多種,根據(jù)本技術(shù)的實施例,提供了一種消息通信中間件。中間件是一種獨立的軟件,位于不同的應(yīng)用程序之間或分布式應(yīng)用程序的不同部分之間,為它們提供通信和數(shù)據(jù)管理的服務(wù)。它充當(dāng)了一個橋梁,使得不同的應(yīng)用程序能夠互相交互,而不需要開發(fā)者了解底層的通信細(xì)節(jié)。通過所提供的消息通信中間件將基于飛騰ft-6678n的多處理器分布式并行計算系統(tǒng)中的以太網(wǎng)、srio鏈路和內(nèi)存共享等通信方式封裝起來,隔離用戶應(yīng)用程序與具體硬件實現(xiàn),為用戶提供簡單的函數(shù)接口來實現(xiàn)節(jié)點之間的數(shù)據(jù)通信與同步的方法,降低了高性能信號處理任務(wù)的開發(fā)者的開發(fā)周期和開發(fā)難度,提高了系統(tǒng)的可靠性和擴(kuò)展性。并且采用非阻塞通信方式使得應(yīng)用程序中的信號處理計算節(jié)拍與通信節(jié)拍并行或重疊,從而提高應(yīng)用程序執(zhí)行的效率。
4、進(jìn)一步地,通過例如中間件還實現(xiàn)了對“訂閱與發(fā)布”的通信模式的支持。為希望進(jìn)行消息通信的應(yīng)用程序提供代表“發(fā)布”(如haos_i_publish())和“訂閱”(如haos_i_subscriber())通信接口。允許消息的發(fā)布者通過簡單地調(diào)用發(fā)布通信接口,而消息的接收者通過調(diào)用接收通信接口,來實現(xiàn)基于飛騰ft-6678n的多處理器分布式并行計算系統(tǒng)中的消息通信。
5、根據(jù)本技術(shù)的第一方面,提供了根據(jù)本技術(shù)第一方面的第一用于消息通信中間件的方法,其中所述消息通信中間件運行于基于飛騰ft-6678n多處理器分布式并行計算系統(tǒng)的各節(jié)點,所述各節(jié)點通過srio通信鏈路互聯(lián),所述方法包括:響應(yīng)于通信接口haos_i_send()被調(diào)用,從通信接口中獲取代表通信組的參數(shù)與代表要發(fā)送的數(shù)據(jù)的參數(shù),以及對通信接口haos_i_send()的調(diào)用返回;若調(diào)用所述通信接口haos_i_send()的節(jié)點是通信組的主成員,向所述通信組的從成員發(fā)送信息包以告知所述通信組的從成員其已調(diào)用了通信接口haos_i_sen?d(),以及告知要發(fā)送的數(shù)據(jù)的數(shù)據(jù)緩存地址;響應(yīng)于通信接口haos_i_recv()被調(diào)用,從通信接口中獲取代表通信組的參數(shù)與代表用于接收數(shù)據(jù)的數(shù)據(jù)緩存的參數(shù),以及對通信接口haos_i_recv()的調(diào)用返回;若調(diào)用所述通信接口haos_i_recv()的節(jié)點是通信組的從成員,判斷所述通信組的主成員是否已調(diào)用了通信接口haos_i_send();若所述通信組的主成員已調(diào)用了通信接口haos_i_send(),從所述通信組的主成員的數(shù)據(jù)緩存搬移要發(fā)送的數(shù)據(jù)到用于接收數(shù)據(jù)的數(shù)據(jù)緩存;若所述通信組的主成員尚未調(diào)用通信接口haos_i_send(),標(biāo)記已準(zhǔn)備好接收數(shù)據(jù);響應(yīng)于收到來自通信組的主成員的代表所述通信組的主成員已調(diào)用了通信接口haos_i_send()的信息包,若已準(zhǔn)備好接收數(shù)據(jù),所述通信接口haos_i_recv()的所述通信組的從成員從所述通信組的主成員的數(shù)據(jù)緩存搬移要發(fā)送的數(shù)據(jù)到用于接收數(shù)據(jù)的數(shù)據(jù)緩存;響應(yīng)于從所述通信組的主成員接收了其要發(fā)送的數(shù)據(jù),標(biāo)記所述通信接口haos_i_recv()對應(yīng)的通信過程已處理完成,以及向所述通信組的主成員發(fā)送代表其已接收了要發(fā)送的數(shù)據(jù)的信息包;響應(yīng)于收到來自所述通信組的從成員的代表其已接收了要發(fā)送的數(shù)據(jù)的信息包,調(diào)用了所述通信接口haos_i_send()的所述通信組的主成員標(biāo)記所述通信接口haos_i_send()對應(yīng)的通信過程已處理完成。
6、根據(jù)本技術(shù)第一方面的第二用于消息通信中間件的方法,其中:所述通信組的主成員通過向所述通信組的從成員發(fā)送haos_sndrdy信息包來告知所述通信組的從成員其已調(diào)用了通信接口haos_i_send();所述通信組的從成員通過向所述通信組的主成員發(fā)送haos_sndok信息包來告知所述通信組的主成員其已接收了要發(fā)送的數(shù)據(jù)。
7、根據(jù)本技術(shù)第一方面的第三用于消息通信中間件的方法,還包括:所述通信組的從成員在守護(hù)線程中監(jiān)聽來自所述通信組的主成員的haos_sndrdy信息包;響應(yīng)于通信接口haos_i_recv()被調(diào)用,若調(diào)用所述通信接口haos_i_recv()的節(jié)點是通信組的從成員,且所述通信組的主成員已調(diào)用了通信接口haos_i_send(),調(diào)用所述通信接口haos_i_recv()的節(jié)點的主線程從所述通信組的主成員的數(shù)據(jù)緩存搬移要發(fā)送的數(shù)據(jù)到用于接收數(shù)據(jù)的數(shù)據(jù)緩存;響應(yīng)于收到來自通信組的主成員的代表所述通信組的主成員已調(diào)用了通信接口haos_i_send()的信息包,若所述通信組的從成員已準(zhǔn)備好接收數(shù)據(jù),所述通信接口haos_i_recv()的節(jié)點的守護(hù)線程從所述通信組的主成員的數(shù)據(jù)緩存搬移要發(fā)送的數(shù)據(jù)到用于接收數(shù)據(jù)的數(shù)據(jù)緩存;所述通信組的從成員的守護(hù)線程響應(yīng)于接收了來自所述通信組的主成員的要發(fā)送的數(shù)據(jù),通知所述通信組的從成員的主線程所述通信接口haos_i_recv()對應(yīng)的通信過程已處理完成;所述通信組的主成員的守護(hù)線程響應(yīng)于收到來自所述通信組的從成員的告知其已接收了要發(fā)送的數(shù)據(jù)的信息包,通知所述通信組的主成員的主線程所述通信接口haos_i_send()對應(yīng)的通信過程已處理完成。
8、根據(jù)本技術(shù)第一方面的第四用于消息通信中間件的方法,還包括:響應(yīng)于通信接口haos_i_test()被調(diào)用,從通信接口中獲取要被監(jiān)測的通信過程,根據(jù)所述要被監(jiān)測的通信過程是否已處理完成,生成用于所述通信接口haos_i_test()的返回值,以及對通信接口haos_i_test()的調(diào)用返回;響應(yīng)于通信接口haos_i_wait()被調(diào)用,從通信接口中獲取要被監(jiān)測的通信過程,若所述要被監(jiān)測的通信過程未處理完成,阻塞對通信接口haos_i_wait()的調(diào)用,響應(yīng)于所述要被監(jiān)測的通信過程已處理完成,生成用于所述通信接口haos_i_wait()的代表所述要被監(jiān)測的通信過程已處理完成的返回值,以及對通信接口haos_i_wait()的調(diào)用返回。
9、根據(jù)本技術(shù)第一方面的第五用于消息通信中間件的方法,其中,所述通信組包括一個主成員和多個從成員;若調(diào)用所述通信接口haos_i_send()的節(jié)點是通信組的主成員,其向所述通信組的每個從成員發(fā)送要發(fā)送的數(shù)據(jù);若調(diào)用所述通信接口haos_i_recv()的節(jié)點是通信組的主成員,其從所述通信組的每個從成員接收其要發(fā)送的數(shù)據(jù)。
10、根據(jù)本技術(shù)第一方面的第六用于消息通信中間件的方法,還包括:若調(diào)用所述通信接口haos_i_send()的節(jié)點是通信組的從成員,向所述通信組的主成員發(fā)送信息包以告知所述通信組的主成員其已調(diào)用了通信接口haos_i_send();所述通信接口haos_i_send()的節(jié)點響應(yīng)于收到指示所述通信組的主成員已調(diào)用了通信接口haos_i_recv()的信息包,從指示所述通信組的主成員已調(diào)用了通信接口haos_i_recv()的信息包中獲取所述通信組的主成員用于接收要發(fā)送的數(shù)據(jù)的數(shù)據(jù)緩存地址,向所述通信組的主成員的用于接收要發(fā)送的數(shù)據(jù)的數(shù)據(jù)緩存發(fā)送要發(fā)送的數(shù)據(jù);響應(yīng)于向所述通信組的主成員發(fā)送了要發(fā)送的數(shù)據(jù),標(biāo)記所述通信接口haos_i_send()對應(yīng)的通信過程已處理完成,以及向所述通信組的主成員發(fā)送代表其已發(fā)送了要發(fā)送的數(shù)據(jù)的信息包;若調(diào)用所述通信接口haos_i_recv()的節(jié)點是通信組的主成員,若所述通信組的從成員已調(diào)用了通信接口haos_i_send(),向所述通信組的從成員發(fā)送指示其已準(zhǔn)備好接收數(shù)據(jù)的信息包,若所述通信組的從成員尚未調(diào)用通信接口haos_i_send(),標(biāo)記其已準(zhǔn)備好接收數(shù)據(jù);若所述通信組的主成員已準(zhǔn)備好接收數(shù)據(jù),調(diào)用所述通信接口haos_i_recv()的節(jié)點響應(yīng)于收到指示所述通信組的從成員已調(diào)用了通信接口haos_i_send()的信息包,向所述通信組的從成員發(fā)送指示其已準(zhǔn)備好接收數(shù)據(jù)的信息包;響應(yīng)于從所述通信組的主成員接收了代表所述通信組的從成員已發(fā)送了要發(fā)送的數(shù)據(jù)的信息包,標(biāo)記所述通信接口haos_i_recv()對應(yīng)的通信過程已處理完成。
11、根據(jù)本技術(shù)第一方面的第七用于消息通信中間件的方法,還包括:響應(yīng)于通信接口haos_i_scatter()被所述通信組的主成員調(diào)用,從通信接口中獲取代表通信組的參數(shù)與代表要發(fā)送的數(shù)據(jù)的參數(shù),以及對通信接口haos_i_scatter()的調(diào)用返回,其中所述通信組包括一個主成員和多個從成員;若調(diào)用所述通信接口haos_i_scatter()的節(jié)點是通信組的主成員,向所述通信組的每個從成員發(fā)送信息包以告知所述通信組的從成員其已調(diào)用了通信接口haos_i_scatter(),以及告知要發(fā)送的數(shù)據(jù)的數(shù)據(jù)緩存地址;響應(yīng)于通信接口haos_i_recv()被調(diào)用,從通信接口中獲取代表通信組的參數(shù)與代表用于接收數(shù)據(jù)的數(shù)據(jù)緩存的參數(shù),以及對通信接口haos_i_recv()的調(diào)用返回;若調(diào)用所述通信接口haos_i_recv()的節(jié)點是通信組的從成員,判斷所述通信組的主成員是否已調(diào)用了通信接口haos_i_scatter();若所述通信組的主成員已調(diào)用了通信接口haos_i_scatter(),從所述通信組的主成員的數(shù)據(jù)緩存搬移要發(fā)送的數(shù)據(jù)到用于接收數(shù)據(jù)的數(shù)據(jù)緩存;若所述通信組的主成員尚未調(diào)用通信接口haos_i_scatter(),標(biāo)記已準(zhǔn)備好接收數(shù)據(jù);響應(yīng)于收到來自通信組的主成員的代表所述通信組的主成員已調(diào)用了通信接口haos_i_scatter()的信息包,若已準(zhǔn)備好接收數(shù)據(jù),所述通信接口haos_i_recv()的節(jié)點從所述通信組的主成員的數(shù)據(jù)緩存搬移要發(fā)送的數(shù)據(jù)到用于接收數(shù)據(jù)的數(shù)據(jù)緩存;響應(yīng)于從所述通信組的主成員接收了其要發(fā)送的數(shù)據(jù),標(biāo)記所述通信接口haos_i_recv()對應(yīng)的通信過程已處理完成,以及向所述通信組的主成員發(fā)送代表其已接收了要發(fā)送的數(shù)據(jù)的信息包;響應(yīng)于收到來自所述通信組的所有從成員的代表其已接收了要發(fā)送的數(shù)據(jù)的信息包,調(diào)用了所述通信接口haos_i_scatter()的所述通信組的主成員標(biāo)記所述通信接口haos_i_scatter()對應(yīng)的通信過程已處理完成。
12、根據(jù)本技術(shù)第一方面的第八用于消息通信中間件的方法,還包括:響應(yīng)于通信接口haos_i_gather()被所述通信組的主成員調(diào)用,從通信接口中獲取代表通信組的參數(shù)與代表要發(fā)送的數(shù)據(jù)的參數(shù),以及對通信接口haos_i_gather()的調(diào)用返回,其中所述通信組包括一個主成員和多個從成員;判斷所述通信組的從成員是否已調(diào)用了通信接口haos_i_send();若所述通信組的從成員已調(diào)用了通信接口haos_i_send(),向所述通信組的每個已調(diào)用了通信接口haos_i_send()的第一從成員發(fā)送指示其已準(zhǔn)備好接收數(shù)據(jù)的信息包,若所述通信組的一個或多個從成員尚未調(diào)用通信接口haos_i_send(),標(biāo)記其已準(zhǔn)備好接收數(shù)據(jù);若所述通信組的主成員已準(zhǔn)備好接收數(shù)據(jù),響應(yīng)于收到指示所述通信組的一個或多個第二從成員已調(diào)用了通信接口haos_i_send()的信息包,向所述通信組的所述一個或多個第二從成員發(fā)送指示其已準(zhǔn)備好接收數(shù)據(jù)的信息包;響應(yīng)于從所述通信組的所有從成員都接收了其要發(fā)送的數(shù)據(jù),標(biāo)記所述通信接口haos_i_gather()對應(yīng)的通信過程已處理完成。
13、根據(jù)本技術(shù)的第二方面的第一用于基于飛騰ft-6678n多處理器分布式并行計算系統(tǒng)的節(jié)點的方法,其中所述基于飛騰ft-6678n多處理器分布式并行計算系統(tǒng)包括多個互連的節(jié)點,所述節(jié)點包括第一入站緩存、第二入站緩存、第一出站緩存以及第二出站緩存,所述節(jié)點運行消息通信中間件,所述消息通信中間件是根據(jù)本技術(shù)第二方面所述的消息通信中間件;所述方法包括:重復(fù)地執(zhí)行任務(wù)處理循環(huán),在任務(wù)處理循環(huán)中執(zhí)行下列步驟:調(diào)用通信接口haos_i_recv()使用第一入站緩存從與當(dāng)前節(jié)點互連的第一節(jié)點接收數(shù)據(jù),其中所述當(dāng)前節(jié)點與所述第一節(jié)點屬于第一通信組;調(diào)用通信接口haos_i_send()使用第一出站緩存向與當(dāng)前節(jié)點互連的第二節(jié)點接收數(shù)據(jù),其中所述當(dāng)前節(jié)點與所述第二節(jié)點屬于第二通信組;利用第二入站緩存的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理,所述數(shù)據(jù)處理的結(jié)果被保存到第二出站緩存;等待所述調(diào)用通信接口haos_i_recv()使用第一入站緩存從與當(dāng)前節(jié)點互連的第一節(jié)點接收數(shù)據(jù)的通信過程完成,以及等待調(diào)用通信接口haos_i_send()使用第一出站緩存向與當(dāng)前節(jié)點互連的第二節(jié)點接收數(shù)據(jù)的通信過程完成;調(diào)用通信接口haos_i_recv()使用第二入站緩存從與當(dāng)前節(jié)點互連的第一節(jié)點接收數(shù)據(jù);調(diào)用通信接口haos_i_send()使用第二出站緩存向與當(dāng)前節(jié)點互連的第二節(jié)點接收數(shù)據(jù);利用第一入站緩存的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理,所述數(shù)據(jù)處理的結(jié)果被保存到第一出站緩存;等待所述調(diào)用通信接口haos_i_recv()使用第二入站緩存從與當(dāng)前節(jié)點互連的第一節(jié)點接收數(shù)據(jù)的通信過程完成,以及等待調(diào)用通信接口haos_i_send()使用第二出站緩存向與當(dāng)前節(jié)點互連的第二節(jié)點接收數(shù)據(jù)的通信過程完成。
14、根據(jù)本技術(shù)的第二方面的第二用于基于飛騰ft-6678n多處理器分布式并行計算系統(tǒng)的節(jié)點的方法,其中,所述通信接口haos_i_recv()與所述通信接口haos_i_send()都是非阻塞的;以及在所述任務(wù)處理循環(huán)中,所述調(diào)用通信接口haos_i_recv()使用第一入站緩存從與當(dāng)前節(jié)點互連的第一節(jié)點接收數(shù)據(jù)的步驟,所述調(diào)用通信接口haos_i_send()使用第一出站緩存向與當(dāng)前節(jié)點互連的第二節(jié)點接收數(shù)據(jù)的步驟,以及所述利用第二入站緩存的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理的步驟被并行執(zhí)行;以及所述調(diào)用通信接口haos_i_recv()使用第二入站緩存從與當(dāng)前節(jié)點互連的第一節(jié)點接收數(shù)據(jù)的步驟,所述調(diào)用通信接口haos_i_send()使用第二出站緩存向與當(dāng)前節(jié)點互連的第二節(jié)點接收數(shù)據(jù)的步驟,以及所述利用第一入站緩存的數(shù)據(jù)進(jìn)行數(shù)據(jù)處理的步驟被并行執(zhí)行。
15、根據(jù)本技術(shù)的第三方面,提供了根據(jù)本技術(shù)第三方面的第一用于實現(xiàn)訂閱與發(fā)布通信模式的消息通信中間件的方法,其中所述消息通信中間件運行于包括多個節(jié)點的基于飛騰ft-6678n多處理器分布式并行計算系統(tǒng)的各節(jié)點,所述各節(jié)點通過srio鏈路耦合,所述方法包括:響應(yīng)于通信接口haos_i_publish()被調(diào)用,從通信接口中獲取代表要發(fā)布的主題的參數(shù),向所述并行計算系統(tǒng)的各節(jié)點發(fā)送攜帶了要發(fā)布的主題和自身的網(wǎng)絡(luò)地址的代表發(fā)布者的第一數(shù)據(jù)包,創(chuàng)建與要發(fā)布的主題相關(guān)聯(lián)的通信組,自身作為所創(chuàng)建的通信組的主成員;響應(yīng)于收到攜帶了要訂閱的主題和訂閱者網(wǎng)絡(luò)地址的代表訂閱者的第二數(shù)據(jù)包,若所述要訂閱的主題和所述要發(fā)布的主題一致,將訂閱者作為所創(chuàng)建的通信組的從成員;響應(yīng)于通信接口haos_i_subscribe()被調(diào)用,從通信接口中獲取代表要訂閱的主題的參數(shù),向所述并行計算系統(tǒng)的各節(jié)點發(fā)送攜帶了要訂閱的主題和自身的網(wǎng)絡(luò)地址的代表訂閱者的第二數(shù)據(jù)包,自身作為與要訂閱的主題相關(guān)聯(lián)的通信組的從成員;響應(yīng)于收到攜帶了要發(fā)布的主題和發(fā)布者網(wǎng)絡(luò)地址的代表發(fā)布者的第一數(shù)據(jù)包,若所述要發(fā)布的主題和所述要訂閱的主題一致,將發(fā)布者作為與要訂閱的主題相關(guān)聯(lián)的通信組的主成員。
16、提供了根據(jù)本技術(shù)第三方面的第二用于實現(xiàn)訂閱與發(fā)布通信模式的消息通信中間件的方法,其中:響應(yīng)于收到攜帶了要訂閱的主題和訂閱者網(wǎng)絡(luò)地址的代表訂閱者的第二數(shù)據(jù)包,若所述要訂閱的主題和所述要發(fā)布的主題一致,還向訂閱者發(fā)送回應(yīng)數(shù)據(jù)包;響應(yīng)于收到訂閱者發(fā)送的對第一數(shù)據(jù)包的回應(yīng)數(shù)據(jù)包,將訂閱者作為所創(chuàng)建的通信組的從成員;響應(yīng)于收到攜帶了要發(fā)布的主題和發(fā)布者網(wǎng)絡(luò)地址的代表發(fā)布者的第一數(shù)據(jù)包,若所述要發(fā)布的主題和所述要訂閱的主題一致,還向發(fā)布者發(fā)送回應(yīng)數(shù)據(jù)包;響應(yīng)于收到發(fā)布者發(fā)送的對第二數(shù)據(jù)包的回應(yīng)數(shù)據(jù)包,將發(fā)布者作為所創(chuàng)建的通信組的主成員。
17、提供了根據(jù)本技術(shù)第三方面的第三用于實現(xiàn)訂閱與發(fā)布通信模式的消息通信中間件的方法,其中:所述第一數(shù)據(jù)包與所述第二數(shù)據(jù)包是udp組播包;所述回應(yīng)數(shù)據(jù)包是udp單播包或udp組播包。
18、提供了根據(jù)本技術(shù)第二方面的第四用于實現(xiàn)訂閱與發(fā)布通信模式的消息通信中間件的方法,其中:響應(yīng)于收到攜帶了要訂閱的主題和訂閱者網(wǎng)絡(luò)地址的代表訂閱者的第二數(shù)據(jù)包,若所述要訂閱的主題尚未被發(fā)布,緩存所述第二數(shù)據(jù)包,不向訂閱者發(fā)送回應(yīng)數(shù)據(jù)包;響應(yīng)于收到攜帶了要發(fā)布的主題和發(fā)布者網(wǎng)絡(luò)地址的代表發(fā)布者的第一數(shù)據(jù)包,若所述要發(fā)布的主題尚未被訂閱,緩存所述第一數(shù)據(jù)包,不向發(fā)布者發(fā)送回應(yīng)數(shù)據(jù)包。
19、提供了根據(jù)本技術(shù)第二方面的第五用于實現(xiàn)訂閱與發(fā)布通信模式的消息通信中間件的方法,其中,響應(yīng)于通信接口haos_i_send()被調(diào)用,從通信接口中獲取代表通信組的參數(shù)與代表要發(fā)送的數(shù)據(jù)的參數(shù),以及對通信接口haos_i_send()的調(diào)用返回;響應(yīng)于通信接口haos_i_recv()被調(diào)用,從通信接口中獲取代表通信組的參數(shù)與代表用于接收數(shù)據(jù)的數(shù)據(jù)緩存的參數(shù),向通信組的發(fā)送方告知用于接收數(shù)據(jù)的緩存地址,以及對通信接口haos_i_recv()的調(diào)用返回;響應(yīng)于從通信組的接收方收到用于接收數(shù)據(jù)的緩存地址,將要發(fā)送的數(shù)據(jù)搬移到用于接收數(shù)據(jù)的緩存,以及標(biāo)記所述通信接口haos_i_send()對應(yīng)的通信過程已處理完成;響應(yīng)于從通信組的發(fā)送方收到要發(fā)送的數(shù)據(jù),標(biāo)記所述通信接口haos_i_recv()對應(yīng)的通信過程已處理完成。
20、提供了根據(jù)本技術(shù)第二方面的第六用于實現(xiàn)訂閱與發(fā)布通信模式的消息通信中間件的方法,其中,響應(yīng)于通信接口haos_i_recv()被調(diào)用,通過dio方式向通信組的發(fā)送方發(fā)送用于接收數(shù)據(jù)的緩存地址,以及還通過門鈴告知通信組的發(fā)送方已向其發(fā)送了用于接收數(shù)據(jù)的緩存地址;響應(yīng)于收到門鈴,通信組的發(fā)送方識別出從通信組的接收方收到了用于接收數(shù)據(jù)的緩存地址;響應(yīng)于從通信組的接收方收到用于接收數(shù)據(jù)的緩存地址,將要發(fā)送的數(shù)據(jù)搬移到用于接收數(shù)據(jù)的緩存后,還通過門鈴告知通信組的接收方要發(fā)送的數(shù)據(jù)已被搬移到用于接收數(shù)據(jù)的緩存;響應(yīng)于收到門鈴,通信組的接收方識別出要發(fā)送的數(shù)據(jù)已存在于用于接收數(shù)據(jù)的緩存中。
21、提供了根據(jù)本技術(shù)第二方面的第七用于實現(xiàn)訂閱與發(fā)布通信模式的消息通信中間件的方法,其中,通信組的發(fā)送方響應(yīng)于收到門鈴,還在指定地址寫入響應(yīng)標(biāo)記,通信組的接收方通過讀取響應(yīng)標(biāo)志來識別通信組的發(fā)送方已成功響應(yīng)了門鈴;和/或通信組的接收方響應(yīng)于收到門鈴,還在指定地址寫入響應(yīng)標(biāo)記,通信組的發(fā)送方通過讀取響應(yīng)標(biāo)志來識別通信組的接收方已成功響應(yīng)了門鈴。
22、提供了根據(jù)本技術(shù)第二方面的第八用于實現(xiàn)訂閱與發(fā)布通信模式的消息通信中間件的方法,其中,響應(yīng)于通信接口haos_i_send()被調(diào)用,從通信接口中獲取代表通信組的參數(shù)與代表要發(fā)送的數(shù)據(jù)的參數(shù),以及對通信接口haos_i_send()的調(diào)用返回;調(diào)用通信接口haos_i_send()的所述通信組的主成員向所述通信組的從成員告知其已調(diào)用了通信接口haos_i_send(),以及告知要發(fā)送的數(shù)據(jù)的數(shù)據(jù)緩存地址;響應(yīng)于通信接口haos_i_recv()被調(diào)用,從通信接口中獲取代表通信組的參數(shù)與代表用于接收數(shù)據(jù)的數(shù)據(jù)緩存的參數(shù),以及對通信接口haos_i_recv()的調(diào)用返回;調(diào)用通信接口haos_i_recv()的所述通信組的從成員判斷所述通信組的主成員是否已調(diào)用了通信接口haos_i_send();若所述通信組的主成員已調(diào)用了通信接口haos_i_send(),從所述通信組的主成員的數(shù)據(jù)緩存搬移要發(fā)送的數(shù)據(jù)到用于接收數(shù)據(jù)的數(shù)據(jù)緩存;響應(yīng)于從所述通信組的主成員接收了其要發(fā)送的數(shù)據(jù),標(biāo)記所述通信接口haos_i_recv()對應(yīng)的通信過程已處理完成,以及向所述通信組的主成員告知其已接收了要發(fā)送的數(shù)據(jù);響應(yīng)于所述通信組的從成員已接收了要發(fā)送的數(shù)據(jù),調(diào)用了所述通信接口haos_i_send()的所述通信組的主成員標(biāo)記所述通信接口haos_i_send()對應(yīng)的通信過程已處理完成。
23、提供了根據(jù)本技術(shù)第二方面的第九用于實現(xiàn)訂閱與發(fā)布通信模式的消息通信中間件的方法,其中,調(diào)用通信接口haos_i_recv()的所述通信組的從成員若判斷出所述通信組的主成員尚未調(diào)用通信接口haos_i_send(),標(biāo)記已準(zhǔn)備好接收數(shù)據(jù);響應(yīng)于所述通信組的主成員向所述通信組的從成員告知其已調(diào)用了通信接口haos_i_send(),調(diào)用所述通信接口haos_i_recv()的所述通信組的從所述通信組的主成員的數(shù)據(jù)緩存搬移要發(fā)送的數(shù)據(jù)到用于接收數(shù)據(jù)的數(shù)據(jù)緩存。
24、根據(jù)本技術(shù)第四方面,提供了根據(jù)本技術(shù)第五方面的在基于飛騰ft-6678n多處理器分布式并行計算系統(tǒng)的節(jié)點之間使用訂閱與發(fā)布通信模式進(jìn)行消息通信的方法,其中所述基于飛騰ft-6678n多處理器分布式并行計算系統(tǒng)包括多個通過srio互連的節(jié)點,每個所述節(jié)點運行消息通信中間件,所述多個互連的節(jié)點包括第一節(jié)點與第二節(jié)點;所述消息通信中間件用于執(zhí)行根據(jù)本技術(shù)第四方面所述的方法;所述使用訂閱與發(fā)布通信模式進(jìn)行消息通信的方法包括:第一節(jié)點調(diào)用通信接口haos_i_publish()發(fā)布指定主題,其中通信接口haos_i_publish()攜帶代表主題的參數(shù);第二節(jié)點調(diào)用通信接口haos_i_subscribe()訂閱指定主題,其中通信接口haos_i_subscribe()攜帶代表主題的參數(shù);第一節(jié)點將要發(fā)送給第二節(jié)點的消息作為就指定主題發(fā)布的消息;第二節(jié)點從指定主題接收第一節(jié)點要發(fā)送給第二節(jié)點的消息。
25、根據(jù)本技術(shù)第四方面的第二在基于飛騰ft-6678n多處理器分布式并行計算系統(tǒng)的節(jié)點之間使用訂閱與發(fā)布通信模式進(jìn)行消息通信的方法,其中,第一節(jié)點調(diào)用通信接口haos_i_send()就指定主題通過訂閱與發(fā)布通信模式發(fā)布消息,其中,通信接口haos_i_send()攜帶代表指定主題的參數(shù)與代表要發(fā)布的消息的參數(shù),所述代表指定主題的參數(shù)關(guān)聯(lián)于用于通信接口haos_i_send()的通信組;第二節(jié)點調(diào)用通信接口haos_i_recv()從指定主題接收消息,其中,通信接口haos_i_recv()攜帶代表指定主題的參數(shù)與代表要接收的消息的緩存的參數(shù),所述代表指定主題的參數(shù)關(guān)聯(lián)于用于通信接口haos_i_recv()的通信組。
26、根據(jù)本技術(shù)第四方面的第三在基于飛騰ft-6678n多處理器分布式并行計算系統(tǒng)的節(jié)點之間使用訂閱與發(fā)布通信模式進(jìn)行消息通信的方法,還包括:一個或多個第三節(jié)點調(diào)用通信接口haos_i_subscribe()訂閱指定主題,其中通信接口haos_i_subscribe()攜帶代表主題的參數(shù);第一節(jié)點將要發(fā)送給第二節(jié)點與一個或多個第三節(jié)點的消息作為就指定主題通過訂閱與發(fā)布通信模式發(fā)布的消息;一個或多個第三節(jié)點通過訂閱與發(fā)布通信模式從指定主題接收第一節(jié)點要發(fā)送給第二節(jié)點與一個或多個第三節(jié)點的消息;每個第三節(jié)點調(diào)用通信接口haos_i_recv()從指定主題接收消息。
27、根據(jù)本技術(shù)第四方面的第四在基于飛騰ft-6678n多處理器分布式并行計算系統(tǒng)的節(jié)點之間使用訂閱與發(fā)布通信模式進(jìn)行消息通信的方法,其中:第一節(jié)點重復(fù)調(diào)用通信接口haos_i_send()就指定主題通過訂閱與發(fā)布通信模式發(fā)布多個消息;第二節(jié)點重復(fù)調(diào)用通信接口haos_i_recv()從指定主題接收多個消息。
28、根據(jù)本技術(shù)的第五方面,提供了一種計算設(shè)備,包括存儲器、處理器及存儲在存儲器上并可在處理器上運行的計算機(jī)程序,所述處理器執(zhí)行所述程序時實現(xiàn)根據(jù)本技術(shù)第一方面至第四方面提供的方法之一。
29、本技術(shù)的積極技術(shù)效果在于:
30、基于飛騰ft-6678n的多處理器分布式并行計算系統(tǒng)中的消息通信中間件處于應(yīng)用程序和操作系統(tǒng)之間,屏蔽了操作系統(tǒng)和硬件驅(qū)動的操作細(xì)節(jié),讓用戶不需了解內(nèi)部數(shù)據(jù)鏈路和鏈路協(xié)議的細(xì)節(jié)與異構(gòu),提供了節(jié)點或節(jié)點上的任務(wù)(進(jìn)程或線程)間數(shù)據(jù)傳輸?shù)慕y(tǒng)一服務(wù)。無論任務(wù)位于哪個處理器、哪個節(jié)點、什么物理位置上,無論采用的通信技術(shù)(以太網(wǎng)、srio、共享內(nèi)存等)是什么。應(yīng)用程序調(diào)用消息通信中間件提供的接口即可實現(xiàn)通信和同步,而不用關(guān)心底層的任何細(xì)節(jié)。從而運行于系統(tǒng)的某個節(jié)點的應(yīng)用程序能夠被容易地或直接遷移到其他節(jié)點,而無需修改應(yīng)用程序。
31、基于飛騰ft-6678n的多處理器分布式并行計算系統(tǒng)中的應(yīng)用程序,利用根據(jù)本技術(shù)實施例的消息中間件,采用軟件流水線的處理模式處理分布式的信號處理任務(wù),同采用串行通信的方式相比,性能可提高3倍。由于消息通信中間件提供了非阻塞通信模式,使得軟件流水線的每個節(jié)點的一個任務(wù)處理循環(huán)內(nèi)的分屬不同任務(wù)階段的3個節(jié)拍(數(shù)據(jù)接收、信號處理計算與數(shù)據(jù)發(fā)送)被并行能被并行處理,信號處理計算節(jié)拍與數(shù)據(jù)接收節(jié)拍和數(shù)據(jù)發(fā)送節(jié)拍的處理時間可重疊,使得單一節(jié)拍的處理時間內(nèi)完成一個任務(wù)處理循環(huán)內(nèi)的相鄰3個節(jié)拍的處理。從而一個任務(wù)處理循環(huán)內(nèi)的處理時間縮短為原來的1/3,整體任務(wù)處理性能提高到原來的3倍。從而提升了總體性能。可以理解,上述性能分析基于3個節(jié)拍(數(shù)據(jù)接收、信號處理計算與數(shù)據(jù)發(fā)送)各自耗時大體相同的假設(shè),在3個節(jié)拍各自耗時不同的情況下,性能提升的數(shù)值有不同。
32、基于飛騰ft-6678n的多處理器分布式并行計算系統(tǒng)中的應(yīng)用程序,利用根據(jù)本技術(shù)實施例的消息中間件,還能基于訂閱與發(fā)布通信模式進(jìn)行消息通信,而無需關(guān)心消息發(fā)送方/接收方的物理信息,也無需關(guān)心發(fā)送/接收消息的時機(jī),并且對消息的發(fā)送/接收操作既不會影響消息通信的對端行為,也可不阻塞消息的發(fā)送/接收方自身的其他數(shù)據(jù)處理。
33、基于飛騰ft-6678n的多處理器分布式并行計算系統(tǒng)中的消息通信中間件在srio鏈路上實現(xiàn)了訂閱與發(fā)布通信模式。應(yīng)用程序通過發(fā)布與訂閱指定的主題,并就所訂閱的主題發(fā)布消息與接收消息,實現(xiàn)位于不同ft-6678n節(jié)點的應(yīng)用程序之間的消息通信。不同ft-6678n節(jié)點之間的消息通信僅需描述消息所屬的主題即可通信,而無需知曉和處理與消息發(fā)送方/接收方有關(guān)的物理信息,也無需處理消息發(fā)送和接收的先后順序。并且,基于訂閱與發(fā)布模式的消息通信可以是非阻塞的,在發(fā)起消息發(fā)送/接收后,節(jié)點的應(yīng)用程序可以并行處理其他計算任務(wù),而不會被消息通信所阻塞。一個節(jié)點的消息通信發(fā)送也不會被另一節(jié)點的消息接收過程所阻塞。從而簡化了應(yīng)用程序在不同ft-6678n節(jié)點之間的消息通信的代碼復(fù)雜度,并且提高了應(yīng)用程序的數(shù)據(jù)處理與通信效率。