![利用MPI計(jì)算矩陣相乘的簡單算法_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/18/e3a1689e-d6fb-4caf-873d-d07af429c8ba/e3a1689e-d6fb-4caf-873d-d07af429c8ba1.gif)
![利用MPI計(jì)算矩陣相乘的簡單算法_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/18/e3a1689e-d6fb-4caf-873d-d07af429c8ba/e3a1689e-d6fb-4caf-873d-d07af429c8ba2.gif)
![利用MPI計(jì)算矩陣相乘的簡單算法_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/18/e3a1689e-d6fb-4caf-873d-d07af429c8ba/e3a1689e-d6fb-4caf-873d-d07af429c8ba3.gif)
![利用MPI計(jì)算矩陣相乘的簡單算法_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/18/e3a1689e-d6fb-4caf-873d-d07af429c8ba/e3a1689e-d6fb-4caf-873d-d07af429c8ba4.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、利用MPICH2計(jì)算矩陣相乘的簡單算法ysmclevervsmgmail comMPICH2是用來進(jìn)行并行運(yùn)算的平臺,而對矩陣算法的分解應(yīng)該是并行運(yùn)算應(yīng)用中很常見的。今天 在這里就用MPICH2寫一個(gè)矩陣乘法的并行計(jì)算程序來學(xué)習(xí)一下MPICH2的使用。首先要復(fù)習(xí)一下矩陣乘法的算法,我們在線性代數(shù)里都學(xué)過。假設(shè)矩陣A為m行,k列。m=4, k=3。B是k行,n列,k=3, n=2,計(jì)算一個(gè)矩陣與列數(shù)據(jù),或者 叫做一個(gè)向量vector的乘積,結(jié)果矩陣C應(yīng)當(dāng)是m行,n列。A1,2,34.5.67,3,98.7.6B5,43,21,0A,B,C祁按照行主序表示。即A(0,0尸尸2,加0,3尸3。如 C
2、(l,0)-AU,0)xE(0,0丿+AU)xE(l,0)+A(l,2)xE(2,0r4x5+5x3+6xl41 oC:14,841,2668,4467,46那如何將這個(gè)算法進(jìn)行分解,分配到參與計(jì)算的齊進(jìn)程上去呢?簡單的做法是可以將矩陣A進(jìn)行劃 分,每個(gè)計(jì)算進(jìn)程分配若干行,每次與E的一列數(shù)據(jù)計(jì)算的時(shí)候分別計(jì)算其進(jìn)程所分配的行與B的這一 列相乘的結(jié)果。比如有兩個(gè)進(jìn)程計(jì)算,分別為進(jìn)程1和進(jìn)程2。1分配A的0,和2行,2分配A的1和3行,與B的0列計(jì)算的時(shí)候,1進(jìn)程將只計(jì)算得到C的一列的0和2位豐兩個(gè)數(shù) 據(jù).而2進(jìn)程則算得1和3位置的數(shù)據(jù)。兩個(gè)進(jìn)程個(gè)子計(jì)算完成相應(yīng)位置的數(shù)據(jù)后組合起來就是C的一 列結(jié)
3、果數(shù)據(jù)。在此,我使用MPI構(gòu)建一種主-從(imstesSve)模式的程序,也就是有一個(gè)進(jìn)程是主進(jìn)程,負(fù)貴分 發(fā)A矩陣的數(shù)據(jù),并收集從進(jìn)程的計(jì)算結(jié)果,將這些結(jié)果合并為最終的結(jié)果數(shù)據(jù)。這樣整個(gè)程序需要一 個(gè)主進(jìn)程利若干個(gè)從進(jìn)程,也就是至少要兩個(gè)進(jìn)程。主進(jìn)程的代碼如下:/主進(jìn)程int master()int myid; /int numprocs; /MPI_Status status;/獲取當(dāng)前進(jìn)程的進(jìn)程編號,保存在myid中MPI_Conun_rank (MPI_COMM_WORLD, &myid );/獲取當(dāng)前進(jìn)程的進(jìn)程總數(shù),保存在numprocs中MPI_Comm_size (MPI
4、_COMM_WORLD, &numprocs );int const M(4),K(3),N(2);/結(jié)果矩陣Cint CM*N;int VM;/將結(jié)果矩陣各元素初始化為0for(int i=0;i<M*N;i+)Ci-0;)/囑陣共N列數(shù)據(jù)for(int i-0;i<N;i+)&status);/從各從進(jìn)程接受數(shù)據(jù) for(int j-1 ;j<numprocs;j+) MPI_Recv(V, Mf MPI_INTr jf if MPI_COMM_WORLD,/畝從進(jìn)程的部分?jǐn)?shù)帚合成完整的一個(gè)【匾for(int ij=0;ij<M;ij+)Cij*N+
5、i=Cij*N+i+Vij;/打印結(jié)果for(int i=0;i<M;i+)for(int j=0;j<N;j+)cout«C j <<tn ;cout<<endl;return 0;)從進(jìn)程代碼:/從進(jìn)程int slave()int myid; /int numprocs; /MPI_Status status;/獲取當(dāng)前進(jìn)程的進(jìn)程編號,保存在myid中 MPI_Comm_rank (MPI_COMM_WORLD, &myid);/獲取當(dāng)前進(jìn)程的進(jìn)程總數(shù),保存在numprocs中 MPI_Comm_s i ze(MPI_COMM_WORL
6、D/&numprocs);int const M(4)ZK(3),N(2);vector<int> indexes;int VM;int AM*K=l/2/3,4/5/6,7/8/9/8/7/6;int BK*N=5/4/3/2/l/0;/計(jì)算本進(jìn)程分配A矩陣中哪些行,保存在indexes中/比如2個(gè)從進(jìn)程,A是4行數(shù)據(jù),id為1的從進(jìn)程分配的是0和2行 for(int i=myid-l;i<M;i+=numprocs-l) indexespush_back(i);)/依次計(jì)算B的N列數(shù)據(jù)for(int i=0;i<N;i+)/將保存列數(shù)據(jù)的向量V各元素初始化為
7、0for(int j=0;j<M;j+)Vj=0;if(indexes.size()>0)for(int j=0;j<indexes size();j + +)for(int ij=0;ij<K;ij+)(Vindexesj+=Aindexesj*K+ij*Bij*N+i;MFI_Send(V# Mx MPI-INT, 0,i rMPI_COMM_WORLD);else/發(fā)送全0的VMPI.SencKV, M, MPI.INT, 0,i rMPI_COMM_WORLD);return 0;)main函數(shù)代碼:#undef SEEK_SET#undef SEEK_END#
8、undef SEEK_CUR#include <mpi.h>#include <iostream>#include <vector>using namespace std;int master();int slave();int main(void) int myid; /int numprocs; /MPI_Status status;/MP I程序的初始化MPI_Init(NULL,NULL);/頑當(dāng)前進(jìn)程的進(jìn)程編號,保存在myid中MPI_Conun_rank (MPI_COMM_WORLD &myid);/獲取當(dāng)前進(jìn)程的進(jìn)程總數(shù),保存在num
9、procs中MPI_Comm_s i ze(MPI_COMM_WORLD 9&numprocs);/如果進(jìn)程數(shù)小于2個(gè),則退出程序if(numprocs<2)cout<<nToo Few Processes!ccendl;MPI_Abort(MPI_COMM_WORLDr 99);) if(myid=0)/id是0的進(jìn)程作為主進(jìn)程master();) else/id是非0的進(jìn)程作為從進(jìn)程 slave();)/MPI程序釋放資源 MPI_Finalize(); return EXIT_SUCCESS;)以上算法是按照行劃分A矩陣,也可以按照A的列來分配矩陣。算法如下:將第一列中的所有元素與向最中的第一個(gè)元素相乘,第二列的元素與向最中的第二個(gè)元素相乘依 此類推。采用這種方法,就可以得到一個(gè)新的矩陣。然后
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 28海的女兒說課稿-2023-2024學(xué)年四年級下冊語文統(tǒng)編版
- 2 我是什么(說課稿)-2024-2025學(xué)年統(tǒng)編版語文二年級上冊
- 2024-2025學(xué)年高中生物 專題2 微生物的培養(yǎng)與應(yīng)用 課題2 土壤中分解尿素的細(xì)菌的分離與計(jì)數(shù)說課稿3 新人教版選修1
- 2025國有土地使用權(quán)出讓協(xié)議合同
- 2025有限公司股權(quán)轉(zhuǎn)讓合同
- Module 1 Unit 2 Changes in our lives Listen and say Listen and enjoy (說課稿)-2024-2025學(xué)年滬教牛津版(深圳用)英語六年級下冊
- 2025城市供用氣合同
- 濰坊耐火混凝土施工方案
- 加氣轎車出售合同范例
- 8《安全記心上》(第一課時(shí))說課稿-2024-2025學(xué)年道德與法治三年級上冊統(tǒng)編版
- 如何構(gòu)建高效課堂課件
- 虛擬化與云計(jì)算技術(shù)應(yīng)用實(shí)踐項(xiàng)目化教程 教案全套 第1-14周 虛擬化與云計(jì)算導(dǎo)論-騰訊云服務(wù)
- 徐金桂行政法與行政訴訟法新講義
- 瀝青拌合設(shè)備結(jié)構(gòu)認(rèn)知
- GB/T 13234-2018用能單位節(jié)能量計(jì)算方法
- (課件)肝性腦病
- 北師大版五年級上冊數(shù)學(xué)教學(xué)課件第5課時(shí) 人民幣兌換
- 工程回訪記錄單
- 住房公積金投訴申請書
- 高考物理二輪專題課件:“配速法”解決擺線問題
- 檢驗(yàn)科生物安全風(fēng)險(xiǎn)評估報(bào)告
評論
0/150
提交評論