專(zhuān)利名稱(chēng):一種支持多線程調(diào)用mpi函數(shù)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及測(cè)試技術(shù)領(lǐng)域,特別是涉及一種支持多線程調(diào)用MPI函數(shù)的方法和裝置。
背景技術(shù):
云計(jì)算(云計(jì)算一種通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)以服務(wù)的方式提供動(dòng)態(tài)可伸縮的虛擬化的資源的計(jì)算模式)程序的種類(lèi)可分為并行程序無(wú)通信類(lèi)型,和并行程序有通信類(lèi)型。對(duì)于并行程序無(wú)通信類(lèi)型,該計(jì)算(通常稱(chēng)為作業(yè))的每個(gè)進(jìn)程(即每個(gè)子任務(wù)),可以在任何時(shí)候啟動(dòng),不需要和其他子任務(wù)同時(shí)啟動(dòng),因?yàn)樽尤蝿?wù)間不需通信,每個(gè)子任務(wù)處理完自己的計(jì)算就可以直接結(jié)束。因此云計(jì)算平臺(tái)調(diào)度器可以在不同時(shí)間調(diào)度不同的子任務(wù),處理這種調(diào)度需求的調(diào)度方式稱(chēng)為任務(wù)級(jí)調(diào)度。對(duì)于并行程序有通信類(lèi)型,由于該計(jì)算(即作業(yè))的每個(gè)子任務(wù)都需要互相通信,因此需要等全部子任務(wù)都啟動(dòng)以后,才能開(kāi)始計(jì)算。也即需要云計(jì)算平臺(tái)當(dāng)前擁有能啟動(dòng)該作業(yè)的所有子任務(wù)的資源后,才能將這個(gè)作業(yè)啟動(dòng),否則,需要等到其他作業(yè)計(jì)算完畢,釋放出足夠資源,才能啟動(dòng)該作業(yè)。處理這種調(diào)度需求的調(diào)度方式稱(chēng)為作業(yè)級(jí)調(diào)度。MPI (Message Passing Interface,訊息傳遞接口;一種消息傳遞編程接口,同時(shí)提供了實(shí)現(xiàn)其一系列接口的多語(yǔ)言函數(shù)庫(kù))是云計(jì)算集群上常用的消息傳遞機(jī)制之一,云計(jì)算程序可以使用MPI來(lái)進(jìn)行數(shù)據(jù)的發(fā)送與接收。MPI標(biāo)準(zhǔn)定義了一組函數(shù),使應(yīng)用程序可以將消息從一個(gè)MPI進(jìn)程送到另一個(gè)MPI進(jìn)程。對(duì)于并行程序有通信類(lèi)型,現(xiàn)有技術(shù)中基本上采用OpenMPI進(jìn)行各計(jì)算節(jié)點(diǎn)的進(jìn)程之間的通信。OpenMPI是一種高性能消息傳遞庫(kù),最初是作為融合的技術(shù)和資源從其他幾個(gè)項(xiàng)目(FT-MPI,LA-MPI,LAM/MPI,以及PACX-MPI),它是MP1-2標(biāo)準(zhǔn)的一個(gè)開(kāi)源實(shí)現(xiàn),由一些科研機(jī)構(gòu)和企業(yè)一起開(kāi)發(fā)和維護(hù)。因此,OpenMPI能夠從高性能社區(qū)中獲得專(zhuān)業(yè)技術(shù)、工業(yè)技術(shù)和資源支持,來(lái)創(chuàng)建最好的MPI庫(kù)。OpenMPI提供給系統(tǒng)和軟件供應(yīng)商、程序開(kāi)發(fā)者和研究人員很多便利。易于使用,并運(yùn)行本身在各種各樣的操作系統(tǒng),網(wǎng)絡(luò)互連,以及一批/調(diào)度系統(tǒng)。OpenMPI目前只支持單線程調(diào)用,因?yàn)樵谒O(shè)計(jì)的時(shí)候并沒(méi)有考慮將其運(yùn)用于多線程環(huán)境,一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)沒(méi)有添加多線程訪問(wèn)的保護(hù)。如果在不同的線程中調(diào)用OpenMPI的函數(shù),會(huì)破壞這些關(guān)鍵數(shù)據(jù)結(jié)構(gòu),導(dǎo)致OpenMPI內(nèi)部處理出錯(cuò),使程序發(fā)生異?!,F(xiàn)有技術(shù)中,若使用OpenMPI時(shí),每個(gè)計(jì)算節(jié)點(diǎn)只能使用單線程模式,或者使用嚴(yán)格分階段的程序。其中,嚴(yán)格分階段模式,會(huì)將程序生命周期分為幾個(gè)階段,每個(gè)階段做不同的事情。例如分為計(jì)算和網(wǎng)絡(luò)收發(fā)階段,兩個(gè)階段不會(huì)重疊,即計(jì)算階段時(shí),不會(huì)有網(wǎng)絡(luò)收發(fā)調(diào)用,集中把數(shù)據(jù)全部計(jì)算完畢(可用多線程來(lái)計(jì)算);而網(wǎng)絡(luò)收發(fā)階段時(shí),所有計(jì)算線程全部處于阻塞等待狀態(tài),由單個(gè)網(wǎng)絡(luò)收發(fā)線程來(lái)調(diào)用OpenMPI函數(shù),將剛剛的計(jì)算結(jié)果發(fā)送到其他機(jī)器上,并從其他機(jī)器接收它們的計(jì)算結(jié)果。然后又再次進(jìn)行計(jì)算和網(wǎng)絡(luò)收發(fā)的交替。
而上述兩種方式中,單線程模式?jīng)]有充分利用計(jì)算節(jié)點(diǎn)可支持多線程進(jìn)行處理的優(yōu)點(diǎn);而嚴(yán)格分階段模式,只適合傳統(tǒng)的并行計(jì)算環(huán)境。而在云計(jì)算環(huán)境下,會(huì)有如下缺
占-
^ \\\ ·1、在云計(jì)算環(huán)境中,往往需要使用多線程來(lái)對(duì)數(shù)據(jù)進(jìn)行更細(xì)粒度的切分,并且將計(jì)算更充分地并行起來(lái),使得計(jì)算和網(wǎng)絡(luò)能夠同時(shí)進(jìn)行,提高程序性能。而嚴(yán)格分階段程序中計(jì)算和網(wǎng)絡(luò)不能同時(shí)進(jìn)行,并不能完全發(fā)揮云計(jì)算細(xì)粒度、高并行的優(yōu)勢(shì)。2、程序編寫(xiě)者需要時(shí)刻記住不能在多個(gè)線程使用OpenMPI函數(shù),這對(duì)于云計(jì)算程序編寫(xiě)者來(lái)說(shuō),很容易出錯(cuò),導(dǎo)致程序出現(xiàn)難以察覺(jué)的問(wèn)題。
發(fā)明內(nèi)容
鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的多線程調(diào)用MPI函數(shù)的嘖嘖嘖和相應(yīng)的支持多線程調(diào)用MPI函數(shù)的方法。依據(jù)本發(fā)明的一個(gè)方面,提供了一種支持多線程調(diào)用MPI函數(shù)的方法,包括針對(duì)云計(jì)算中的一個(gè)計(jì)算服務(wù)器,當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作;按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作??蛇x的,還包括針對(duì)OpenMPI庫(kù)構(gòu)建一個(gè)隊(duì)列;針對(duì)OpenMPI庫(kù)中的每個(gè)MPI函數(shù)構(gòu)建相應(yīng)的封裝函數(shù);所述隊(duì)列和所述封裝函數(shù)用于當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作??蛇x的,所述當(dāng)所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù)時(shí),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作包括針對(duì)各線程發(fā)送的對(duì)于一 MPI函數(shù)的MPI調(diào)用請(qǐng)求,所述MPI函數(shù)對(duì)應(yīng)的封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求,并根據(jù)所述MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求,再將所述第一請(qǐng)求放入所述隊(duì)列中。可選的,所述MPI函數(shù)對(duì)應(yīng)的封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求,根據(jù)所述MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求,再將所述第一請(qǐng)求放入所述隊(duì)列中包括通過(guò)所述MPI封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求;將所述MPI調(diào)用請(qǐng)求的參數(shù)以及對(duì)應(yīng)的MPI函數(shù)封裝進(jìn)一結(jié)構(gòu)體中;將所述結(jié)構(gòu)體作為第一請(qǐng)求放入所述隊(duì)列??蛇x的,還包括構(gòu)建一個(gè)生命周期等于或者大于所述任務(wù)生命周期的收發(fā)線程;所述收發(fā)線程用于按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作??蛇x的,所述按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作包括通過(guò)所述收發(fā)線程從所述隊(duì)列中按序讀取MPI調(diào)用請(qǐng)求,并根據(jù)請(qǐng)求內(nèi)容調(diào)用相應(yīng)的MPI函數(shù)進(jìn)行操作??蛇x的,所述封裝函數(shù)的參數(shù)列表與相對(duì)應(yīng)的MPI函數(shù)的參數(shù)列表一致。依據(jù)本發(fā)明的另外一個(gè)方面,提供了一種支持多線程調(diào)用MPI函數(shù)的裝置,包括排序操作模塊,適于針對(duì)云計(jì)算中的一個(gè)計(jì)算服務(wù)器,當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作;調(diào)用執(zhí)行模塊,適于按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作??蛇x的,還包括第一預(yù)置模塊,適于針對(duì)OpenMPI庫(kù)構(gòu)建一個(gè)隊(duì)列;針對(duì)OpenMPI庫(kù)中的每個(gè)MPI函數(shù)構(gòu)建相應(yīng)的封裝函數(shù);所述隊(duì)列和所述封裝函數(shù)用于當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作。可選的,所述排序操作模塊包括第一排序操作模塊,適于針對(duì)各線程發(fā)送的對(duì)于一 MPI函數(shù)的MPI調(diào)用請(qǐng)求,所述MPI函數(shù)對(duì)應(yīng)的封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求,并根據(jù)所述MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求,再將所述第一請(qǐng)求放入所述隊(duì)列中。可選的,所述第一排序操作模塊包括攔截模塊,適于通過(guò)所述MPI封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求;結(jié)構(gòu)體封裝模塊,適于將所述MPI調(diào)用請(qǐng)求的參數(shù)以及對(duì)應(yīng)的MPI函數(shù)封裝進(jìn)一結(jié)構(gòu)體中;結(jié)構(gòu)體放置模塊,適于將所述結(jié)構(gòu)體作為第一請(qǐng)求放入所述隊(duì)列。可選的,還包括第二預(yù)置模塊,適于構(gòu)建一個(gè)生命周期等于或者大于所述任務(wù)生命周期的收發(fā)線程;所述收發(fā)線程用于按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作??蛇x的,所述調(diào)用執(zhí)行模塊包括第一調(diào)用執(zhí)行模塊,適于通過(guò)所述收發(fā)線程從所述隊(duì)列中按序讀取MPI調(diào)用請(qǐng)求,并根據(jù)請(qǐng)求內(nèi)容調(diào)用相應(yīng)的MPI函數(shù)進(jìn)行操作??蛇x的,所述封裝函數(shù)的參數(shù)列表與相對(duì)應(yīng)的MPI函數(shù)的參數(shù)列表一致。根據(jù)本發(fā)明的支持多線程調(diào)用MPI函數(shù)的方法可以針對(duì)多線程中每個(gè)線程的MPI調(diào)用請(qǐng)求,將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作,由此解決了現(xiàn)有技術(shù)中取得了針對(duì)現(xiàn)有OpenMPI只支持單線程調(diào)用的機(jī)制,針對(duì)多線程的應(yīng)用環(huán)境,多線程調(diào)用OpenMPI庫(kù)的MPI函數(shù)時(shí),破壞MPI函數(shù)的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的情況,導(dǎo)致OpenMPI內(nèi)部處理出錯(cuò),使程序發(fā)生異常,進(jìn)而無(wú)法不能完全發(fā)揮云計(jì)算細(xì)粒度、高并行的優(yōu)勢(shì)的問(wèn)題,達(dá)到了可以使多線程調(diào)用MPI庫(kù),在云計(jì)算環(huán)境中,可充分發(fā)揮云計(jì)算細(xì)粒度、高并行的優(yōu)勢(shì)有益效果。
通過(guò)閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的本發(fā)明一種支持多線程調(diào)用MPI函數(shù)的方法實(shí)施例一的流程示意圖;圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的本發(fā)明一種支持多線程調(diào)用MPI函數(shù)的方法實(shí)施例二的流程示意圖;圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的本發(fā)明一種支持多線程調(diào)用MPI函數(shù)的裝置實(shí)施例一的結(jié)構(gòu)示意圖;以及圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種支持多線程調(diào)用MPI函數(shù)的裝置實(shí)施例二的結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面將參照附圖更詳細(xì)地描述本公開(kāi)的示例性實(shí)施例。雖然附圖中顯示了本公開(kāi)的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開(kāi)而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開(kāi),并且能夠?qū)⒈竟_(kāi)的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。參照?qǐng)D1,其示出了本發(fā)明一種支持多線程調(diào)用MPI函數(shù)的方法實(shí)施例一的流程示意圖,具體可以包括步驟110,針對(duì)云計(jì)算中的一個(gè)計(jì)算服務(wù)器,當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作;對(duì)于現(xiàn)有技術(shù)的OpenMPI庫(kù)的各種MPI函數(shù),只支持單線程調(diào)用,因?yàn)樵谒O(shè)計(jì)的時(shí)候并沒(méi)有考慮將其運(yùn)用于多線程環(huán)境,一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)沒(méi)有添加多線程訪問(wèn)的保護(hù)。即每個(gè)MPI函數(shù)公用一個(gè)內(nèi)存數(shù)組存儲(chǔ)運(yùn)行參數(shù),如果同時(shí)存在多個(gè)線程請(qǐng)求調(diào)用多個(gè)MPI函數(shù),則該多個(gè)線程的參數(shù)會(huì)同時(shí)往該共同的內(nèi)存數(shù)組中存儲(chǔ),那么可能存在沖突,導(dǎo)致關(guān)鍵數(shù)據(jù)結(jié)構(gòu)被破壞。而本發(fā)明實(shí)施例中,對(duì)云計(jì)算中的每個(gè)計(jì)算服務(wù)器來(lái)說(shuō),針對(duì)每個(gè)計(jì)算服務(wù)器采用多線程執(zhí)行一個(gè)有通信類(lèi)型的作業(yè)(即任務(wù))時(shí),當(dāng)有線程發(fā)送MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù)時(shí),則將這些線程的MPI調(diào)用請(qǐng)求進(jìn)行排序操作。比如將各線程發(fā)送的MPI調(diào)用請(qǐng)求采用同步加鎖機(jī)制,針對(duì)多個(gè)請(qǐng)求同時(shí)調(diào)用OpenMPI庫(kù)中的函數(shù)時(shí),只在每一時(shí)刻只允許一個(gè)線程將參數(shù)寫(xiě)入公用的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)中(內(nèi)存數(shù)組)。步驟120,按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作。對(duì)各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作后,那么對(duì)于各MPI調(diào)用請(qǐng)求則存在先后順序,則可按順序逐個(gè)調(diào)用排序后的MPI調(diào)用請(qǐng)求進(jìn)行操作。即使多線程的同步工作方式在調(diào)用OpenMPI庫(kù)的MPI函數(shù)時(shí)可符合OpenMPI庫(kù)的單線程機(jī)制。參照?qǐng)D2,其示出了本發(fā)明優(yōu)選的一種支持多線程調(diào)用MPI函數(shù)的方法實(shí)施例二的流程示意圖,具體可以包括步驟200,針對(duì)OpenMPI庫(kù)構(gòu)建一個(gè)隊(duì)列;針對(duì)OpenMPI庫(kù)中的每個(gè)MPI函數(shù)構(gòu)建相應(yīng)的封裝函數(shù);所述隊(duì)列和所述封裝函數(shù)用于當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作。本發(fā)明實(shí)施例中,因?yàn)镺penMPI庫(kù)的各MPI函數(shù)公用一個(gè)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)進(jìn)行參數(shù)的存儲(chǔ)等動(dòng)作,因此為了避免出現(xiàn)線程同步調(diào)用MPI函數(shù)的情況出現(xiàn),針對(duì)整個(gè)OpenMPI庫(kù)構(gòu)建一個(gè)隊(duì)列,而為了使針對(duì)各MPI函數(shù)的、可能由多個(gè)線程發(fā)送的多個(gè)MPI調(diào)用請(qǐng)求,均放入前述隊(duì)列中,則針對(duì)每個(gè)MPI函數(shù)加一個(gè)封裝函數(shù),該封裝函數(shù)用于將針對(duì)對(duì)應(yīng)封裝的MPI函數(shù)的MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求放入前述隊(duì)列中。其中,所述封裝函數(shù)的參數(shù)列表與相對(duì)應(yīng)的MPI函數(shù)的參數(shù)列表一致。具體為每個(gè)OpenMPI函數(shù)提供一個(gè)封裝函數(shù),例如為MPI_Send函數(shù)提供一個(gè)名為MPI_ThreadSend函數(shù),MPI_ThreadSend的參數(shù)列表與MPI_Send函數(shù)保持一致。用戶(hù)不直接調(diào)用MPI_Send函數(shù),而是通過(guò)MPI_ThreadSend函數(shù),使用OpenMPI的發(fā)送功能。MPI_ThreadSend將對(duì)應(yīng)MPI_Send函數(shù)的調(diào)用請(qǐng)求處理為第一請(qǐng)求放入所述隊(duì)列中。步驟210,構(gòu)建一個(gè)生命周期等于或者大于所述任務(wù)生命周期的收發(fā)線程;所述收發(fā)線程用于按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作。在本發(fā)明實(shí)施例中,為將對(duì)前述隊(duì)列中的第一請(qǐng)求進(jìn)行處理,創(chuàng)建一個(gè)生命周期大于或者等于所述任務(wù)生命周期(即前述作業(yè)的生命周期)的收發(fā)線程,專(zhuān)門(mén)讀取所述隊(duì)列中的第一請(qǐng)求。該線程從隊(duì)列里按次序讀出一個(gè)個(gè)請(qǐng)求,并根據(jù)請(qǐng)求內(nèi)容調(diào)用相應(yīng)的OpenMPI函數(shù)。例如對(duì)于前述放入隊(duì)列的針對(duì)MPI_Send的第一請(qǐng)求,該收發(fā)線程從隊(duì)列中讀到一個(gè)MPI_Send的請(qǐng)求時(shí),就直接調(diào)用第一請(qǐng)求里的MPI_Send函數(shù)進(jìn)行執(zhí)行。在本發(fā)明實(shí)施例中,收發(fā)線程最優(yōu)的生命周期等于所述任務(wù)生命周期。那么,在前述針對(duì)OpenMPI庫(kù)構(gòu)建一個(gè)隊(duì)列;針對(duì)OpenMPI庫(kù)中的每個(gè)MPI函數(shù)構(gòu)建相應(yīng)的封裝函數(shù)的情況下,則進(jìn)入,當(dāng)所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù)時(shí),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作過(guò)程步驟220,針對(duì)各線程發(fā)送的對(duì)于一 MPI函數(shù)的MPI調(diào)用請(qǐng)求,所述MPI函數(shù)對(duì)應(yīng)的封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求,并根據(jù)所述MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求,再將所述第一請(qǐng)求放入所述隊(duì)列中。如前所述的針對(duì)每一 MPI函數(shù)的封裝函數(shù),其功能為將針對(duì)對(duì)應(yīng)封裝的MPI函數(shù)的MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求放入前述隊(duì)列中。那么本步驟中,當(dāng)某個(gè)線程發(fā)送一個(gè)MPI調(diào)用請(qǐng)求,請(qǐng)求調(diào)用某個(gè)MPI函數(shù)時(shí),該MPI函數(shù)對(duì)于的封裝函數(shù)則攔截所述MPI調(diào)用請(qǐng)求,然后根據(jù)所述MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求,再將所述第一請(qǐng)求放入所述隊(duì)列中。進(jìn)一步的,所述針對(duì)各線程發(fā)送的對(duì)于一MPI函數(shù)的MPI調(diào)用請(qǐng)求,所述MPI函數(shù)對(duì)應(yīng)的封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求,并根據(jù)所述MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求,再將所述第一請(qǐng)求放入所述隊(duì)列中包括步驟S221,通過(guò)所述MPI封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求;如前所述,針對(duì)每個(gè)MPI函數(shù)的MPI封裝函數(shù),其封裝函數(shù)的參數(shù)列表與實(shí)際的MPI函數(shù)保持一致。那么線程發(fā)送的針對(duì)MPI函數(shù)的調(diào)用請(qǐng)求,則被封裝該MPI函數(shù)的封裝函數(shù)截取了,線程不直接調(diào)用實(shí)際的MPI函數(shù),也就不會(huì)直接使用各MPI函數(shù)公用的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。
比如前述針對(duì)MPI_Send的調(diào)用請(qǐng)求,其封裝函數(shù)MPIjhreadSend則將針對(duì)MPI_Send的調(diào)用請(qǐng)求進(jìn)行攔截。步驟S222,將所述MPI調(diào)用請(qǐng)求的參數(shù)以及對(duì)應(yīng)的MPI函數(shù)封裝進(jìn)一結(jié)構(gòu)體中;通過(guò)所述封裝函數(shù)將MPI調(diào)用請(qǐng)求中的參數(shù)提取出來(lái),然后和相應(yīng)MPI函數(shù)一起封裝至一個(gè)結(jié)構(gòu)體里,而該結(jié)構(gòu)體即可作為第一請(qǐng)求。步驟S223,將所述結(jié)構(gòu)體作為第一請(qǐng)求放入所述隊(duì)列。將作為第一請(qǐng)求的結(jié)構(gòu)體放入所述隊(duì)列中。
基于前述構(gòu)建的收發(fā)線程,所述按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作包括步驟230,通過(guò)所述收發(fā)線程從所述隊(duì)列中按序讀取MPI調(diào)用請(qǐng)求,并根據(jù)請(qǐng)求內(nèi)容調(diào)用相應(yīng)的MPI函數(shù)進(jìn)行操作。如前所述的收發(fā)線程專(zhuān)門(mén)進(jìn)行網(wǎng)絡(luò)收發(fā)。該線程從隊(duì)列里按次序讀出一個(gè)個(gè)請(qǐng)求,并根據(jù)請(qǐng)求內(nèi)容調(diào)用相應(yīng)的OpenMPI函數(shù)。例如該線程從隊(duì)列中讀到一個(gè)MPI_Send的第一請(qǐng)求時(shí),就直接調(diào)用MPI_Send函數(shù)執(zhí)行(把第一請(qǐng)求里包含的參數(shù)作為MPI_Send的參數(shù)進(jìn)行執(zhí)行)。另外,本發(fā)明實(shí)施例中,對(duì)于封裝的目標(biāo)MPI函數(shù)優(yōu)選的為非阻塞MPI函數(shù)。本發(fā)明實(shí)施例的OpenMPI的MPI函數(shù)的使用方式,可以提供多線程使用OpenMPI的語(yǔ)義。由于相應(yīng)的請(qǐng)求被放到隊(duì)列里進(jìn)行排隊(duì),不會(huì)產(chǎn)生同時(shí)調(diào)用OpenMPI函數(shù)的情況,因此用戶(hù)只需要用封裝函數(shù)替代真正的OpenMPI函數(shù),就可以將其用在多線程環(huán)境中。即在計(jì)算的時(shí)候可以隨時(shí)調(diào)用OpenMPI函數(shù),充分利用CPU和網(wǎng)卡資源。另外,本發(fā)明還可針對(duì)一個(gè)計(jì)算服務(wù)器的多個(gè)線程采用條件變量機(jī)制對(duì)各線程的MPI調(diào)用請(qǐng)求進(jìn)行同步控制。比如針對(duì)每個(gè)線程設(shè)置一個(gè)條件變量,當(dāng)一線程的變量改變?yōu)閠rue時(shí),則允許該線程的MPI調(diào)用請(qǐng)求去調(diào)用MPI函數(shù),當(dāng)線程的變量為false時(shí),則拒絕該線程的MPI調(diào)用請(qǐng)求去調(diào)用MPI函數(shù),即阻塞該線程。那么,當(dāng)存在多個(gè)線程同步發(fā)送MPI調(diào)用請(qǐng)求時(shí),首先只改變其中一個(gè)線程的變量為true,其他線程則排隊(duì)等待發(fā)送MPI調(diào)用請(qǐng)求,該線程完成后其變量改為false,然后通知等待線程中的一個(gè)的變量改為true,那么該線程可發(fā)送MPI調(diào)用請(qǐng)求進(jìn)行訪問(wèn)。另外,本發(fā)明還可采用信號(hào)量機(jī)制對(duì)多線程的MPI調(diào)用請(qǐng)求進(jìn)行同步控制,即針對(duì)OpenMPI庫(kù)設(shè)置可同時(shí)調(diào)用線程的數(shù)量i = n,當(dāng)η中的一個(gè)線程執(zhí)行完畢,則1-Ι,直至減為0,那么本發(fā)明的信號(hào)量i = l,即每次放入一個(gè)線程發(fā)送MPI調(diào)用請(qǐng)求訪問(wèn)MPI函數(shù),其他發(fā)送的MPI調(diào)用請(qǐng)求則等待,當(dāng)i減為0,則再?gòu)牡却木€程中挑選I個(gè)放入,i變?yōu)?,然后執(zhí)行。如此也可以提供多線程使用OpenMPI的語(yǔ)義,在計(jì)算的時(shí)候可以隨時(shí)調(diào)用OpenMPI函數(shù),充分利用CPU和網(wǎng)卡資源。參照?qǐng)D3,其示出本發(fā)明一種支持多線程調(diào)用MPI函數(shù)的裝置實(shí)施例一的結(jié)構(gòu)示意圖,具體可以包括排序操作模塊310,適于針對(duì)云計(jì)算中的一個(gè)計(jì)算服務(wù)器,當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作;調(diào)用執(zhí)行模塊320,適于按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作。
本發(fā)明實(shí)施例可針對(duì)多個(gè)云計(jì)算中,存在多個(gè)計(jì)算服務(wù)器(計(jì)算節(jié)點(diǎn))并行的情況,每個(gè)計(jì)算服務(wù)器中可包括支持多線程調(diào)用MPI函數(shù)的裝置??蛇x的,還包括第一預(yù)置模塊,適于針對(duì)OpenMPI庫(kù)構(gòu)建一個(gè)隊(duì)列;針對(duì)OpenMPI庫(kù)中的每個(gè)MPI函數(shù)構(gòu)建相應(yīng)的封裝函數(shù);所述隊(duì)列和所述封裝函數(shù)用于當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作??蛇x的,所述排序操作模塊包括第一排序操作模塊,適于針對(duì)各線程發(fā)送的對(duì)于一 MPI函數(shù)的MPI調(diào)用請(qǐng)求,所述MPI函數(shù)對(duì)應(yīng)的封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求,并根據(jù)所述MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求,再將所述第一請(qǐng)求放入所述隊(duì)列中??蛇x的,其特征在于,所述第一排序操作模塊包括攔截模塊,適于通過(guò)所述MPI封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求; 結(jié)構(gòu)體封裝模塊,適于將所述MPI調(diào)用請(qǐng)求的參數(shù)以及對(duì)應(yīng)的MPI函數(shù)封裝進(jìn)一結(jié)構(gòu)體中;結(jié)構(gòu)體放置模塊,適于將所述結(jié)構(gòu)體作為第一請(qǐng)求放入所述隊(duì)列??蛇x的,還包括第二預(yù)置模塊,適于構(gòu)建一個(gè)生命周期等于或者大于所述任務(wù)生命周期的收發(fā)線程;所述收發(fā)線程用于按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作??蛇x的,所述調(diào)用執(zhí)行模塊包括第一調(diào)用執(zhí)行模塊,適于通過(guò)所述收發(fā)線程從所述隊(duì)列中按序讀取MPI調(diào)用請(qǐng)求,并根據(jù)請(qǐng)求內(nèi)容調(diào)用相應(yīng)的MPI函數(shù)進(jìn)行操作。其中,所述封裝函數(shù)的參數(shù)列表與相對(duì)應(yīng)的MPI函數(shù)的參數(shù)列表一致。參照?qǐng)D4,其示出本發(fā)明一種支持多線程調(diào)用MPI函數(shù)的裝置實(shí)施例二的結(jié)構(gòu)示意圖,具體可以包括第一預(yù)置模塊400,適于針對(duì)OpenMPI庫(kù)構(gòu)建一個(gè)隊(duì)列;針對(duì)OpenMPI庫(kù)中的每個(gè)MPI函數(shù)構(gòu)建相應(yīng)的封裝函數(shù);所述隊(duì)列和所述封裝函數(shù)用于當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作。第二預(yù)置模塊410,適于構(gòu)建一個(gè)生命周期等于或者大于所述任務(wù)生命周期的收發(fā)線程;所述收發(fā)線程用于按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作。第一排序操作模塊420,適于針對(duì)各線程發(fā)送的對(duì)于一 MPI函數(shù)的MPI調(diào)用請(qǐng)求,所述MPI函數(shù)對(duì)應(yīng)的封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求,并根據(jù)所述MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求,再將所述第一請(qǐng)求放入所述隊(duì)列中。第一調(diào)用執(zhí)行模塊430,適于通過(guò)所述收發(fā)線程從所述隊(duì)列中按序讀取MPI調(diào)用請(qǐng)求,并根據(jù)請(qǐng)求內(nèi)容調(diào)用相應(yīng)的MPI函數(shù)進(jìn)行操作。其中,可選的,所述第一排序操作模塊包括
攔截模塊,適于通過(guò)所述MPI封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求;結(jié)構(gòu)體封裝模塊,適于將所述MPI調(diào)用請(qǐng)求的參數(shù)以及對(duì)應(yīng)的MPI函數(shù)封裝進(jìn)一結(jié)構(gòu)體中;結(jié)構(gòu)體放置模塊,適于將所述結(jié)構(gòu)體作為第一請(qǐng)求放入所述隊(duì)列。其中,所述封裝函數(shù)的參數(shù)列表與相對(duì)應(yīng)的MPI函數(shù)的參數(shù)列表一致。在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類(lèi)系統(tǒng)所要求的結(jié)構(gòu)是顯而易見(jiàn)的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。在此處所提供的說(shuō)明書(shū)中,說(shuō)明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒(méi)有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書(shū)的理解。類(lèi)似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開(kāi)并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開(kāi)的方法解釋成反映如下意圖即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如下面的權(quán)利要求書(shū)所反映的那樣,發(fā)明方面在于少于前面公開(kāi)的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式
的權(quán)利要求書(shū)由此明確地并入該具體實(shí)施方式
,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中。可以把實(shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過(guò)程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的所有特征以及如此公開(kāi)的任何方法或者設(shè)備的所有過(guò)程或單元進(jìn)行組合。除非另外明確陳述,本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書(shū)中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的一種支持多線程調(diào)用MPI函數(shù)的設(shè)備中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過(guò)同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱(chēng)。
權(quán)利要求
1.一種支持多線程調(diào)用MPI函數(shù)的方法,其特征在于,包括 針對(duì)云計(jì)算中的一個(gè)計(jì)算服務(wù)器,當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作; 按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括 針對(duì)OpenMPI庫(kù)構(gòu)建一個(gè)隊(duì)列;針對(duì)OpenMPI庫(kù)中的每個(gè)MPI函數(shù)構(gòu)建相應(yīng)的封裝函數(shù);所述隊(duì)列和所述封裝函數(shù)用于當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述當(dāng)所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù)時(shí),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作包括 針對(duì)各線程發(fā)送的對(duì)于一 MPI函數(shù)的MPI調(diào)用請(qǐng)求,所述MPI函數(shù)對(duì)應(yīng)的封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求,并根據(jù)所述MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求,再將所述第一請(qǐng)求放入所述隊(duì)列中。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述MPI函數(shù)對(duì)應(yīng)的封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求,根據(jù)所述MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求,再將所述第一請(qǐng)求放入所述隊(duì)列中包括 通過(guò)所述MPI封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求; 將所述MPI調(diào)用請(qǐng)求的參數(shù)以及對(duì)應(yīng)的MPI函數(shù)封裝進(jìn)一結(jié)構(gòu)體中; 將所述結(jié)構(gòu)體作為第一請(qǐng)求放入所述隊(duì)列。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,還包括 構(gòu)建一個(gè)生命周期等于或者大于所述任務(wù)生命周期的收發(fā)線程;所述收發(fā)線程用于按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作包括 通過(guò)所述收發(fā)線程從所述隊(duì)列中按序讀取MPI調(diào)用請(qǐng)求,并根據(jù)請(qǐng)求內(nèi)容調(diào)用相應(yīng)的MPI函數(shù)進(jìn)行操作。
7.根據(jù)權(quán)利要求2或3所述的方法,其特征在于, 所述封裝函數(shù)的參數(shù)列表與相對(duì)應(yīng)的MPI函數(shù)的參數(shù)列表一致。
8.一種支持多線程調(diào)用MPI函數(shù)的裝置,其特征在于,包括 排序操作模塊,適于針對(duì)云計(jì)算中的一個(gè)計(jì)算服務(wù)器,當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作; 調(diào)用執(zhí)行模塊,適于按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,還包括 第一預(yù)置模塊,適于針對(duì)OpenMPI庫(kù)構(gòu)建一個(gè)隊(duì)列;針對(duì)OpenMPI庫(kù)中的每個(gè)MPI函數(shù)構(gòu)建相應(yīng)的封裝函數(shù);所述隊(duì)列和所述封裝函數(shù)用于當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述排序操作模塊包括第一排序操作模塊,適于針對(duì)各線程發(fā)送的對(duì)于一 MPI函數(shù)的MPI調(diào)用請(qǐng)求,所述MPI 函數(shù)對(duì)應(yīng)的封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求,并根據(jù)所述MPI調(diào)用請(qǐng)求處理為第一請(qǐng)求,再將所述第一請(qǐng)求放入所述隊(duì)列中。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述第一排序操作模塊包括攔截模塊,適于通過(guò)所述MPI封裝函數(shù)攔截所述MPI調(diào)用請(qǐng)求;結(jié)構(gòu)體封裝模塊,適于將所述MPI調(diào)用請(qǐng)求的參數(shù)以及對(duì)應(yīng)的MPI函數(shù)封裝進(jìn)一結(jié)構(gòu)體中;結(jié)構(gòu)體放置模塊,適于將所述結(jié)構(gòu)體作為第一請(qǐng)求放入所述隊(duì)列。
12.根據(jù)權(quán)利要求10所述的裝置,其特征在于,還包括第二預(yù)置模塊,適于構(gòu)建一個(gè)生命周期等于或者大于所述任務(wù)生命周期的收發(fā)線程; 所述收發(fā)線程用于按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作。
13.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述調(diào)用執(zhí)行模塊包括第一調(diào)用執(zhí)行模塊,適于通過(guò)所述收發(fā)線程從所述隊(duì)列中按序讀取MPI調(diào)用請(qǐng)求,并根據(jù)請(qǐng)求內(nèi)容調(diào)用相應(yīng)的MPI函數(shù)進(jìn)行操作。
14.根據(jù)權(quán)利要求8或9所述的裝置,其特征在于,所述封裝函數(shù)的參數(shù)列表與相對(duì)應(yīng)的MPI函數(shù)的參數(shù)列表一致。
全文摘要
本申請(qǐng)?zhí)峁┝艘环N支持多線程調(diào)用MPI函數(shù)的方法和裝置,涉及測(cè)試技術(shù)領(lǐng)域。所述方法包括針對(duì)云計(jì)算中的一個(gè)計(jì)算服務(wù)器,當(dāng)所述計(jì)算服務(wù)器執(zhí)行一任務(wù)時(shí),若所述計(jì)算服務(wù)器中的線程發(fā)送各自的MPI調(diào)用請(qǐng)求調(diào)用OpenMPI庫(kù)中的MPI函數(shù),將所述各MPI調(diào)用請(qǐng)求進(jìn)行統(tǒng)一的排序操作;按所述排序操作后的順序,逐個(gè)調(diào)用所述MPI調(diào)用請(qǐng)求對(duì)應(yīng)的MPI函數(shù)進(jìn)行操作。本發(fā)明針對(duì)多線程的應(yīng)用環(huán)境,解決了多線程調(diào)用OpenMPI庫(kù)的MPI函數(shù)時(shí),破壞MPI函數(shù)的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的情況,導(dǎo)致OpenMPI內(nèi)部處理出錯(cuò),使程序發(fā)生異常,進(jìn)而無(wú)法不能完全發(fā)揮云計(jì)算細(xì)粒度、高并行的優(yōu)勢(shì)的問(wèn)題,達(dá)到了可以使多線程調(diào)用MPI庫(kù),在云計(jì)算環(huán)境中,可充分發(fā)揮云計(jì)算細(xì)粒度、高并行的優(yōu)勢(shì)有益效果。
文檔編號(hào)G06F9/48GK103019844SQ20121051857
公開(kāi)日2013年4月3日 申請(qǐng)日期2012年12月5日 優(yōu)先權(quán)日2012年12月5日
發(fā)明者何銳邦, 唐會(huì)軍 申請(qǐng)人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司