趙博穎,肖 鵬,張 力
(中國(guó)航天科工二院706所,北京 100854)
隨著信息技術(shù)的蓬勃發(fā)展,單個(gè)處理器的運(yùn)算速度以及傳統(tǒng)的串行算法已經(jīng)難以滿足人們對(duì)于大量數(shù)據(jù)處理的需求。在這種背景下,并行計(jì)算機(jī)及其并行計(jì)算技術(shù)逐漸成為人們關(guān)注的熱點(diǎn)。而且,利用高速通信網(wǎng)絡(luò)將幾臺(tái)計(jì)算機(jī)連接成一個(gè)整體構(gòu)成集群已經(jīng)成為構(gòu)建高可用并行計(jì)算機(jī)的一種趨勢(shì)。但是搭建集群并行處理系統(tǒng)需要若干臺(tái)計(jì)算機(jī)且集群配置過(guò)程復(fù)雜耗時(shí),文獻(xiàn)[1-2]給出了傳統(tǒng)物理機(jī)搭建集群的方法,硬件要求較高而且配置復(fù)雜。本文針對(duì)這個(gè)問(wèn)題,采用輕量級(jí)虛擬化技術(shù)Docker來(lái)搭建集群并行處理系統(tǒng)。Docker是一種輕量級(jí)的虛擬化技術(shù),憑借對(duì)系統(tǒng)資源的低占有率,它可以兼顧系統(tǒng)應(yīng)用的性能以及系統(tǒng)的開(kāi)銷(xiāo),而且Docker容器的啟動(dòng)和關(guān)閉能夠在幾秒內(nèi)實(shí)現(xiàn),速度非常快,可以很好地滿足搭建并行編程環(huán)境的要求[3]。同時(shí),本文中主要介紹了并行計(jì)算的2種模型:消息傳遞模型(Message Passing Interface,MPI)和共享內(nèi)存模型(OpenMP)。這2種模型各有特點(diǎn),而且在一定程度上可以互補(bǔ)。MPI常用于分布式存儲(chǔ)系統(tǒng)中,它將通信和計(jì)算優(yōu)化完全分離,通過(guò)MPI庫(kù)實(shí)現(xiàn)節(jié)點(diǎn)間的通信,可擴(kuò)展性好;OpenMP常常用于共享存儲(chǔ)系統(tǒng)上,通信速度較快,執(zhí)行效率較高。將兩者結(jié)合在一起,采用兩級(jí)并行的方式,在一定程度上可以提高并行系統(tǒng)的效率。近年來(lái)已經(jīng)有許多學(xué)者在矩陣乘法的并行程序設(shè)計(jì)方面做了大量工作。文獻(xiàn)[4-5]介紹了并行系統(tǒng)上矩陣乘法的MPI實(shí)現(xiàn),但該算法由于自身通信模式的限制不能完全發(fā)揮并行環(huán)境中各個(gè)節(jié)點(diǎn)本身獨(dú)立的性能。本文基于矩陣乘法的算法設(shè)計(jì)并實(shí)現(xiàn)一種基于MPI和OpenMP的混合編程模型,并在基于Docker搭建的并行編程環(huán)境上進(jìn)行算法驗(yàn)證以及性能對(duì)比。
Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎,在Linux Container(LXC)項(xiàng)目的基礎(chǔ)上發(fā)展而來(lái),它的目的是進(jìn)一步優(yōu)化對(duì)容器操作的使用體驗(yàn)[6]。它可以將應(yīng)用和它的依賴軟件包等打包封裝為一個(gè)輕量級(jí)并且可移植的容器。而且,一個(gè)容器可以等同于一臺(tái)虛擬機(jī),它可以只包含一個(gè)應(yīng)用,也可以存在獨(dú)立的操作系統(tǒng)[7]。而且,Docker包含多種容器管理工具可供使用,不需要深入底層就能夠很容易地使用并管理容器。
傳統(tǒng)的虛擬機(jī)方式?jīng)Q定了如果想運(yùn)行多個(gè)不同的應(yīng)用就需要?jiǎng)?chuàng)建多個(gè)虛擬機(jī),而Docker技術(shù)僅僅需要?jiǎng)?chuàng)建幾個(gè)相隔離的容器,然后把應(yīng)用放入容器中即可[8]。這個(gè)過(guò)程基本不消耗額外的系統(tǒng)資源,可以在保證應(yīng)用性能的同時(shí)盡量減小系統(tǒng)開(kāi)銷(xiāo)。這也使得Docker技術(shù)在搭建開(kāi)發(fā)環(huán)境等很多應(yīng)用場(chǎng)景下都具有巨大的優(yōu)勢(shì)。圖1給出了Docker和傳統(tǒng)虛擬化技術(shù)的區(qū)別。
圖1 傳統(tǒng)的虛擬化方式和Docker的不同
Docker容器技術(shù)中主要有鏡像、容器、數(shù)據(jù)卷以及網(wǎng)絡(luò)這4大核心模塊[9],如圖2所示。使用Docker可以通過(guò)鏡像來(lái)快速構(gòu)建一套標(biāo)準(zhǔn)的并行開(kāi)發(fā)環(huán)境,開(kāi)發(fā)完成后,Docker可以快速創(chuàng)建和刪除容器,實(shí)現(xiàn)快速迭代,很大程度上節(jié)約了開(kāi)發(fā)、部署和測(cè)試的時(shí)間[10]??梢?jiàn),Docker技術(shù)在小型集群的搭建以及并行任務(wù)的測(cè)試等方面會(huì)大有可為。
圖2 Docker的體系結(jié)構(gòu)
集群并行開(kāi)發(fā)環(huán)境的構(gòu)建在64位Ubuntu平臺(tái)上完成。主要包括以下幾個(gè)步驟:安裝Docker;創(chuàng)建3個(gè)容器作為3個(gè)虛擬節(jié)點(diǎn),制作并行環(huán)境MPI的鏡像文件;在每個(gè)節(jié)點(diǎn)上安裝安全協(xié)議SSH并設(shè)置各個(gè)節(jié)點(diǎn)免密碼登錄。
2.1.1 Docker環(huán)境的構(gòu)建
目前,Docker在主流的操作系統(tǒng)和云平臺(tái)上都可以使用,其中包括Windows、MacOS、Linux操作系統(tǒng)以及AWS云平臺(tái)。同時(shí),Docker僅支持64位操作系統(tǒng)。除此之外,對(duì)于Linux系統(tǒng)而言,要確保Linux內(nèi)核版本在3.10以上,這是因?yàn)镈ocker所需的一些功能在3.10版本之前是缺失的,可能會(huì)造成數(shù)據(jù)的丟失。本文選擇64位Ubuntu系統(tǒng),內(nèi)核版本為4.4.0,系統(tǒng)版本為14.04LTS來(lái)安裝Docker。
在安裝Docker之前,首先安裝需要的軟件包linux-image-extra-virtual以及l(fā)inux-image-extra-$(uname -r),這2個(gè)軟件包保證我們可以使用AUFS storage driver、storage driver實(shí)現(xiàn)多層數(shù)據(jù)的堆疊并為用戶提供一個(gè)合并后的統(tǒng)一視圖。這種分層結(jié)構(gòu)可以使容器和鏡像的創(chuàng)建、分發(fā)以及共享變得更加高效。然后添加Docker的官方GPG密鑰來(lái)確認(rèn)所下載軟件的合法性,添加成功后,更新apt軟件包索引,執(zhí)行以下命令就可以安裝最新版本的Docker:
$ sudo apt-get install docker-ce
2.1.2 MPI并行環(huán)境的構(gòu)建
目前,國(guó)際上已經(jīng)出現(xiàn)很多MPI的實(shí)現(xiàn)方式,比如MPICH、OpenMPI、LAM等。這里選擇OpenMPI來(lái)實(shí)現(xiàn)MPI并行。OpenMPI是基于LAM/MPI、LA-MPI以及FT-MPI的一種采用構(gòu)件思想的MPI實(shí)現(xiàn),它提供了一些MPI實(shí)現(xiàn)方式無(wú)法達(dá)到的獨(dú)特的組合方法,它也是MPI-2標(biāo)準(zhǔn)的一個(gè)開(kāi)源實(shí)現(xiàn)。
Docker Hub是Docker默認(rèn)的鏡像倉(cāng)庫(kù),提供了數(shù)十萬(wàn)個(gè)鏡像可供開(kāi)放下載。在這里通過(guò)docker pull hmonkey/openmpi14.04:v3命令直接下載Docker Hub中已經(jīng)存在的MPI鏡像hmonkey/openmpi14.04:v3。利用Docker在Ubuntu上啟動(dòng)3個(gè)虛擬節(jié)點(diǎn),以主節(jié)點(diǎn)為例,其他節(jié)點(diǎn)與主節(jié)點(diǎn)命令一致。
$ sudo docker run -itd --name master--privileged=true hmonkey/openmpi14.04:v3/bin/bash
通過(guò)以上命令可以得到3個(gè)基于Docker的虛擬節(jié)點(diǎn):master,cluster1,cluster2。
在并行計(jì)算中,任務(wù)被分割成并行的幾個(gè)部分分配到各個(gè)計(jì)算節(jié)點(diǎn)中,計(jì)算節(jié)點(diǎn)之間的無(wú)密碼訪問(wèn)可以使計(jì)算進(jìn)程在并行計(jì)算機(jī)之間自由跳躍,從而提高并行計(jì)算的效率。因此需要在3個(gè)虛擬節(jié)點(diǎn)上均安裝安全協(xié)議SSH,并設(shè)置各個(gè)節(jié)點(diǎn)免密碼登錄。
矩陣乘法運(yùn)算是一種很重要的數(shù)值運(yùn)算,廣泛應(yīng)用于數(shù)值分析以及線性代數(shù)中,它是一種最基本的運(yùn)算,很多科學(xué)問(wèn)題的基礎(chǔ)都是矩陣[11]。在這里,采用矩陣乘法來(lái)測(cè)試并行計(jì)算的性能,介紹基于MPI和OpenMP的混合并行編程模型,同時(shí)基于該模型設(shè)計(jì)矩陣乘法的并行實(shí)現(xiàn)。
2.2.1 MPI和OpenMP的混合并行編程模型
MPI是一種被廣泛用于分布式存儲(chǔ)并行計(jì)算機(jī)的編程環(huán)境,它作為一種并行程序設(shè)計(jì)方法已經(jīng)被廣泛應(yīng)用于高性能并行計(jì)算環(huán)境中[12]。但在某些情況下,單一的MPI消息傳遞編程模型不能很好地滿足多處理器集群并行計(jì)算的需求。OpenMP是一種基于共享存儲(chǔ)體系結(jié)構(gòu)的編程標(biāo)準(zhǔn),作用在共享內(nèi)存的計(jì)算節(jié)點(diǎn)上[13]。對(duì)于同時(shí)具備節(jié)點(diǎn)內(nèi)共享內(nèi)存和節(jié)點(diǎn)間分布式內(nèi)存的多處理器集群,需要MPI+OpenMP的混合編程模型,在計(jì)算節(jié)點(diǎn)內(nèi)使用OpenMP多線程化,在計(jì)算節(jié)點(diǎn)之間采用MPI消息傳遞,通過(guò)兩級(jí)并行的方式,有效提高并行計(jì)算的效率[14]。
MPI和OpenMP混合模型主要包括2種方式:一種是主進(jìn)程通信方式,另外一種是線程通信方式[15]。主進(jìn)程通信方式是指MPI控制進(jìn)程間通信,調(diào)用發(fā)生在OpenMP并行區(qū)域之外,OpenMP主要完成并行程序中的主要計(jì)算。在這種模型中,首先初始化MPI進(jìn)程,各個(gè)節(jié)點(diǎn)上的MPI進(jìn)程進(jìn)行節(jié)點(diǎn)間的通信或獨(dú)立做一些計(jì)算,當(dāng)遇到大量計(jì)算時(shí),就需要用到OpenMP多線程求解[16],求解結(jié)束后,MPI進(jìn)程繼續(xù)進(jìn)行節(jié)點(diǎn)內(nèi)的計(jì)算以及節(jié)點(diǎn)間的同步、通信等,直到進(jìn)程結(jié)束,如圖3所示。線程通信方式是指MPI調(diào)用發(fā)生在OpenMP并行區(qū)域之內(nèi)。在這種模型中,進(jìn)程間的通信由線程來(lái)完成,而且在一些線程進(jìn)行通信的同時(shí),其他線程可以同步進(jìn)行并行程序的計(jì)算,是一種更為靈活的混合編程方式[17]。
圖3 主進(jìn)程通信方式
2.2.2 基于MPI和OpenMP的混合并行矩陣乘法算法實(shí)現(xiàn)
基于MPI和OpenMP混合并行矩陣乘法算法的實(shí)現(xiàn)主要包括2個(gè)部分,一個(gè)是消息傳遞模型MPI的實(shí)現(xiàn),一個(gè)是共享內(nèi)存模型OpenMP的實(shí)現(xiàn)。
以往的基于MPI的并行矩陣乘法大多將矩陣A按行或列分解,矩陣B發(fā)送到各個(gè)進(jìn)程不作處理,大大降低了并行計(jì)算的效率。本文提出一種基于域分解思想的矩陣并行算法。首先將矩陣A按照進(jìn)程個(gè)數(shù)依行分解,矩陣B依列分解;重新分發(fā)分解后的矩陣B,保證矩陣A中的每個(gè)任務(wù)得到矩陣B中相應(yīng)的部分;每個(gè)任務(wù)完成各自部分的矩陣乘法;最后將每個(gè)任務(wù)規(guī)約求和的結(jié)果返回矩陣C。
基于OpenMP的并行算法主要包括2類(lèi):一類(lèi)是OpenMP細(xì)粒度并行,一類(lèi)是OpenMP粗粒度并行。在OpenMP細(xì)粒度并行中,需要在包含大部分計(jì)算量的循環(huán)部分加入編譯制導(dǎo)語(yǔ)句,程序的其他部分不作處理;在OpenMP粗粒度并行中,編譯制導(dǎo)語(yǔ)句在程序的最外層,在程序開(kāi)始時(shí)生成多個(gè)線程,通過(guò)線程的調(diào)配來(lái)完成并行計(jì)算。但粗粒度并行的程序較為復(fù)雜,而且通信和調(diào)度的開(kāi)銷(xiāo)較大,故本文選擇OpenMP細(xì)粒度并行。
本文設(shè)計(jì)實(shí)現(xiàn)的基于MPI和OpenMP混合并行矩陣乘法算法的主要思想是采用MPI內(nèi)嵌OpenMP的方法,在模型外層,采用MPI進(jìn)程控制通信,完成大粒度的并行;在模型內(nèi)層,使用OpenMP工作共享結(jié)構(gòu)并行,選擇計(jì)算時(shí)間占程序運(yùn)行總時(shí)間比例大的循環(huán)進(jìn)行并行化,將MPI分配給各個(gè)節(jié)點(diǎn)的任務(wù)細(xì)化分給每個(gè)節(jié)點(diǎn)的多個(gè)CPU或多核處理器中的每個(gè)核心,對(duì)于一些循環(huán)次數(shù)較少的循環(huán)還是串行執(zhí)行,完成細(xì)粒度的并行。在該混合模型中,MPI進(jìn)程的通信與OpenMP計(jì)算部分不發(fā)生重疊。算法的偽代碼如下:
BEGIN:
MPI_Init(&argc,&argv); //初始化MPI進(jìn)程通信
MPI_Comm_size(MPI_COMM_WORLD, &size); //獲取設(shè)置的進(jìn)程個(gè)數(shù)
MPI_Comm_rank(MPI_COMM_WORLD, &rank); //自動(dòng)獲取進(jìn)程編號(hào)
if rank==0 then
random(); //主進(jìn)程隨機(jī)生成矩陣A和B
scatter();//主進(jìn)程向其他進(jìn)程發(fā)送矩陣A和B的分塊
else
for k from 0 to size-1 do
MPI_Recv(); //其他進(jìn)程接收來(lái)自主進(jìn)程發(fā)送的矩陣分塊
omp_set_num_threads(t); //設(shè)置線程數(shù)
#pragma omp parallel for schedule(static) private(i,j,m) //多線程并行計(jì)算各個(gè)分塊矩陣
matrix_C+=matrix_A*matrix_B
end{for}
end{if}
if size>1 then
MPI_Gatherv(); //將每個(gè)進(jìn)程的計(jì)算結(jié)果匯總到矩陣C
end{if}
MPI_Finalize();//結(jié)束MPI并行計(jì)算
END
矩陣乘法算法的測(cè)試在基于Docker搭建的并行環(huán)境下進(jìn)行。主要過(guò)程如下:
1)開(kāi)啟已存在的容器master,cluster1,cluster2。以master為例:
# docker start master
2)進(jìn)入正在運(yùn)行的3個(gè)容器,內(nèi)容如下:
# docker exec -itd master /bin/bash
3)進(jìn)入包含矩陣乘法程序的文件夾下,對(duì)程序進(jìn)行編譯得到可執(zhí)行文件main:
#mpic++ -o main main.cpp -fopenmp
4)將可執(zhí)行文件main分別復(fù)制到其余2個(gè)計(jì)算節(jié)點(diǎn)的相同位置上。同時(shí),在主節(jié)點(diǎn)master上創(chuàng)建hostfile,在hostfile文件中配置其余2個(gè)計(jì)算節(jié)點(diǎn)的IP地址。
5)測(cè)試矩陣乘法得到實(shí)驗(yàn)結(jié)果,內(nèi)容如下:
# mpirun -np 2 -hostfile hostfile ./main
算法的驗(yàn)證實(shí)現(xiàn)在64位具有4片處理器的Ubuntu操作系統(tǒng)上完成,在Ubuntu系統(tǒng)上基于Docker創(chuàng)建3個(gè)節(jié)點(diǎn),一個(gè)作為主節(jié)點(diǎn),其他2個(gè)作為計(jì)算節(jié)點(diǎn)。在單獨(dú)MPI程序中設(shè)置啟用2個(gè)進(jìn)程,在單獨(dú)OpenMP程序中設(shè)置啟用2個(gè)線程,在MPI+OpenMP的混合程序中,設(shè)置啟用2個(gè)進(jìn)程、2個(gè)線程。矩陣的大小分別設(shè)為100×100、800×800、1600×1600,共測(cè)試3組數(shù)據(jù),考慮到誤差原因,每組數(shù)據(jù)測(cè)試3次取平均值。這里通過(guò)加速比來(lái)定義并行的優(yōu)化效果,加速比表示并行前程序的運(yùn)行時(shí)間與并行后程序的運(yùn)行時(shí)間的比值。表1為矩陣乘法串行計(jì)算和并行計(jì)算的測(cè)試結(jié)果。
表1 矩陣乘法不同算法的性能對(duì)比 單位:s
從表1可看出,設(shè)置2個(gè)進(jìn)程或線程分別執(zhí)行程序時(shí),MPI和OpenMP均有明顯的并行效果,加速比接近于2。整體上OpenMP的加速比要略高于MPI,這是因?yàn)镸PI需要進(jìn)行節(jié)點(diǎn)間的相互通信,會(huì)增加一些時(shí)間損耗。另一方面,混合編程模型具有更優(yōu)的并行性能以及更高的加速比,這是因?yàn)镸PI+OpenMP混合程序中,節(jié)點(diǎn)之間,主進(jìn)程只需要通過(guò)MPI將數(shù)據(jù)傳遞給其他節(jié)點(diǎn)的進(jìn)程,不需要進(jìn)行節(jié)點(diǎn)內(nèi)部的數(shù)據(jù)分配計(jì)算等工作;而在節(jié)點(diǎn)內(nèi)部,采用OpenMP進(jìn)行數(shù)據(jù)的再分配,執(zhí)行包含大部分計(jì)算量的循環(huán)部分,而且線程間的通信非常容易,執(zhí)行效率較高。通過(guò)這種兩級(jí)并行的方式,可以充分發(fā)揮MPI和OpenMP的并行優(yōu)勢(shì),從而達(dá)到更好的并行效果及更高的加速比。
本文使用的傳統(tǒng)物理機(jī)并行系統(tǒng)選擇基于銀河麒麟的國(guó)產(chǎn)化并行系統(tǒng)。該并行系統(tǒng)采用64位高性能銀河麒麟安全操作系統(tǒng),具有穩(wěn)定、可靠、易于使用、管理簡(jiǎn)單等特點(diǎn)。包含1個(gè)管理節(jié)點(diǎn)和2個(gè)計(jì)算節(jié)點(diǎn),每個(gè)計(jì)算節(jié)點(diǎn)含有2個(gè)8核微處理器,計(jì)算節(jié)點(diǎn)間通過(guò)高速千兆以太網(wǎng)連接。并行系統(tǒng)中,編譯系統(tǒng)的MPI遵循MPI-2.0標(biāo)準(zhǔn),同時(shí)支持最新的OpenMP API3.0標(biāo)準(zhǔn)。表2給出了基于Docker的并行系統(tǒng)與傳統(tǒng)并行系統(tǒng)的并行效果對(duì)比。均選擇MPI+OpenMP混合編程模型。
表2 2種并行系統(tǒng)的性能對(duì)比 單位:s
從表2可以看出,當(dāng)矩陣規(guī)模較小時(shí),兩者的并行效果相差不大,隨著矩陣規(guī)模的增大,基于Docker的并行系統(tǒng)的并行效果會(huì)明顯優(yōu)于基于銀河麒麟的并行系統(tǒng)??梢?jiàn),在一些簡(jiǎn)單環(huán)境搭建與部署并行系統(tǒng)以及并行測(cè)試中,Docker技術(shù)憑借其獨(dú)有的優(yōu)勢(shì)會(huì)有很大作為。
本文首先介紹了輕量級(jí)虛擬化技術(shù)Docker的基本概念與優(yōu)勢(shì),就現(xiàn)今采用傳統(tǒng)物理機(jī)搭建集群并行處理系統(tǒng)存在配置復(fù)雜以及硬件要求苛刻等問(wèn)題,提出采用Docker搭建集群并行編程環(huán)境,并通過(guò)矩陣乘法并行算法來(lái)測(cè)試。比較了基于Docker的并行系統(tǒng)與傳統(tǒng)物理機(jī)集群的并行效率,結(jié)果顯示基于Docker的并行系統(tǒng)具有更好的并行效果。簡(jiǎn)要闡述了并行編程模型的分類(lèi)與適用場(chǎng)景,并詳細(xì)介紹了MPI和OpenMP編程模型,通過(guò)對(duì)矩陣乘法算法的討論驗(yàn)證了MPI和OpenMP混合編程的效率。MPI和OpenMP混合編程通過(guò)兩級(jí)并行的方法,可以充分發(fā)揮消息傳遞模型和共享內(nèi)存模型的優(yōu)勢(shì),有效提高了并行計(jì)算的效率。
參考文獻(xiàn):
[1] 希潤(rùn)高娃. 基于PC集群的MPI并行環(huán)境的搭建[J]. 網(wǎng)絡(luò)安全技術(shù)與應(yīng)用, 2012(4):48-50.
[2] 王長(zhǎng)安. 基于Linux的PC集群搭建及其性能分析[J]. 電子技術(shù)與軟件工程, 2014(2):190-191.
[3] 苗立堯,陳莉君. 一種基于Docker容器的集群分段伸縮方法[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2017,34(1):34-38.
[4] 姚玉坤,丁冬. 并行計(jì)算系統(tǒng)中的矩陣乘算法及其MPI實(shí)現(xiàn)[J]. 數(shù)字通信, 2011,38(1):52-56.
[5] 黃九梅,呂翔,趙英. MPI下矩陣相乘的實(shí)現(xiàn)與分析[J]. 中國(guó)科技信息, 2007(13):263-264.
[6] 馬曉光,劉釗遠(yuǎn). 一種適用于Docker Swarm集群的調(diào)度策略和算法[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2017,34(5):283-287.
[7] 盧勝林,倪明,張翰博. 基于Docker Swarm集群的調(diào)度策略優(yōu)化[J]. 信息技術(shù), 2016(7):147-151.
[8] 衛(wèi)彪,劉成龍,郭旭. 深入淺出Docker輕量級(jí)虛擬化[J]. 電子技術(shù)與軟件工程, 2016(10):252.
[9] 劉思堯,李強(qiáng),李斌. 基于Docker技術(shù)的容器隔離性研究[J]. 軟件, 2015,36(4):110-113.
[10] Merkel D. Docker: Lightweight Linux containers for consistent development and deployment[DB/OL]. http://www.th7.cn/system/lin/201405/57068.shtml, 2014-05-20.
[11] 韓建勛. 并行計(jì)算在矩陣運(yùn)算中的應(yīng)用[J]. 信息與電腦, 2017(5):93-96.
[12] 張艷華,劉祥港. 一種基于MPI與OpenMP的矩陣乘法并行算法[J]. 計(jì)算機(jī)與現(xiàn)代化, 2011(7):84-87.
[13] 陳樹(shù)敏,羅俊博,陳青. 并行計(jì)算技術(shù)的幾種實(shí)現(xiàn)方式研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2015(9):174-177.
[14] 孫秋實(shí),王移芝. MPI+OpenMP混合并行編程的分析[J]. 現(xiàn)代計(jì)算機(jī), 2014(12):7-11.
[15] 唐兵,Bobelin L,賀海武. 基于MPI和OpenMP混合編程的非負(fù)矩陣分解并行算法[J]. 計(jì)算機(jī)科學(xué), 2017,44(3):51-54.
[16] 于朋. 多線程并行快速求解Pi的方法[J]. 電子技術(shù)與軟件工程, 2016(15):208-209.
[17] Xu Ying, Zhang Tie. A hybrid open MP/MPI parallel computing model design on the SM cluster[C]// 2015 6th IEEE International Conference on Power Electronics Systems and Applications. 2015.