矩陣乘法的OpenMP實(shí)現(xiàn)及性能分析_第1頁
矩陣乘法的OpenMP實(shí)現(xiàn)及性能分析_第2頁
矩陣乘法的OpenMP實(shí)現(xiàn)及性能分析_第3頁
矩陣乘法的OpenMP實(shí)現(xiàn)及性能分析_第4頁
矩陣乘法的OpenMP實(shí)現(xiàn)及性能分析_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一實(shí)驗(yàn)?zāi)康?) 用openMP實(shí)現(xiàn)最基本的數(shù)值算遮“矩眸乘法”2) tfi for編譯制導(dǎo)語旬3) 對(duì)并U程序進(jìn)行簡(jiǎn)單的11能二實(shí)驗(yàn)環(huán)境1) 硬件環(huán)境:32核CPU、32G存計(jì)算機(jī);2) 軟件環(huán)境:Linux、Win2003、GCC、MPICH. VS2008;4) Windows登錄方式:通過遠(yuǎn)程桌而連接97,用戶名和fl始密碼都是自己的學(xué) 號(hào)。三實(shí)驗(yàn)容1.用0 penMP編寫兩個(gè)n階的方陣a和b的HI乘槨序,結(jié)果存笊在方陣c中,其中乘法用for 編理胃導(dǎo)培旬實(shí)現(xiàn)并fjitS作,并嗚節(jié)for編譯制導(dǎo)中schedule的參數(shù),使得執(zhí)行時(shí)冋最矯, 寫岀代碼。方眸a和b的

2、初始值如下: 123川11丄J2,3.4,+11丄1a =3.4.5, 丿 + 2b =1丄1并川+ 1. + 2.2打一11丄1輸A:方陣的階n、并行域的線槨數(shù)輸出:c中所有元素之和、程序的執(zhí)行時(shí)冋提示:a,b,c的元素定義為int里,c中所有元素之各定義為long long型。Windows it Bt:用中的clock_tclock( void )函數(shù)得到當(dāng)甫程序執(zhí)行的時(shí)間Linux if 時(shí):include timeval start,end;gettimeofday(&start,NULL);gettimeofday(&end,NULL);coutexecutiontime:,(en

3、d.tv_sec-start.tv_sec)+(double)(end.tv_usec-start.tv-usec)/1000000,seconds,endl;在windows下便用Microsofe Visual Studio編程,澹代碼如下:#include# include#include#define NN 2000intaNNNNL bNNNN;longlong cNN(NN;void solve(int n, int numjhread)int i, j, t, k, time;clockj startTime, endTime;longlong sum;omp_seLnumJhr

4、eads(num_thread);for(i=0;in;i+)對(duì)砸恥栢拒仰biH訓(xùn)始化t=i+1;forQ=0;jn;j+)aij=t+;startTime=clock();sum=0;#pragma omp parallel shared(a,b,c) private(ifj,k) # pragma omp for schedule(dynamic)for(i=0;in;i+)for(j=0;jn;j+)cij=O;for(k=0;kn;k+)ciUl+=aiHk*bkj;for(i=0;in;i+)for(j=0;jn;j+) sum+=cij);endTime=clock();time=

5、endTime-startTime;printfCsum=%lld time=%dmsn,sum,time);int main()int n, num.thread;while(scanfC%d%d&n.&numJhread)!=EOF)solve(n.num_thread);Ireturn 0;2分析矩陣皿乘f?序的執(zhí)行時(shí)間、加速比和效率:方辭階固定為1000,節(jié)點(diǎn)數(shù)分別取1、2、4、8、16和32時(shí),為騷少誤差,毎頊實(shí)驗(yàn)逍行5次,取平均值作為實(shí)驗(yàn)結(jié)果。笞:串行執(zhí)亍時(shí)程序的ftfiBRUl: T = 15.062s加速比=Sff執(zhí)行時(shí)同/并行執(zhí)fiHfB)效率=加速比/節(jié)點(diǎn)數(shù)表1不同節(jié)點(diǎn)數(shù)下

6、程序的ftfiBB(秒)實(shí)驗(yàn)命、12481632第1次16.6408.1724.0782.1251.0930.594第2次16.4228.1564.1722.1411.0780.578第3次16.4068.2664.0782.1251.0940.563第4次16.7818.1724.0792.1091.0940.563第5次16.4228.1714.0782.1251.0930.578平均值16.5342&18744.09702.12501.09040.5752不同節(jié)點(diǎn)數(shù)下程序的加速比圖2不間節(jié)自數(shù)下f?序的加速比不同節(jié)點(diǎn)數(shù)下程序的效率節(jié)點(diǎn)個(gè)數(shù)圖3不同節(jié)目數(shù)下桿序的效率 可修編執(zhí)liWH的分橋

7、:聞著節(jié)點(diǎn)數(shù)的增加,枳序的執(zhí)行時(shí)同減少,大御可ius果中得出,兩著節(jié)點(diǎn)書的Jam 一倍,執(zhí)行時(shí)間減少一半加速比的分林:勵(lì)著節(jié)點(diǎn)數(shù)的增加,f?序的加速比IHO,大視可1從結(jié)果中得岀,R6著節(jié)點(diǎn)書的增期一 倍,加速的應(yīng)的增加接近一倍效率的分橋:Hi著節(jié)點(diǎn)數(shù)的增加,程序的效率逐所械少3.分橋矩辟松乘樺Jf的冋題規(guī)模與效率的關(guān)系:固定節(jié)點(diǎn)數(shù)力4,辻方碎階U 200到1600之間變化,每隔10 0取一彳、值。(為了兩少時(shí)間,每頂實(shí)驗(yàn)可只執(zhí)行1次)S:表2松同節(jié)點(diǎn)釵卞不同冋題規(guī)模桿停的執(zhí)行時(shí)間與效率方陣階數(shù)并行執(zhí)行W同串行執(zhí)行時(shí)間效率2000.0150.0470.7833333000.0160.1091.

8、7031254000.0630.2971.1785715000.1560.6571.0528856000.4061.641.0098527000.9073.5780.9862188001.6096.360.9881919002.57810.1090.98031410003.81214.8910.97658711005.3921.0320.9755112007.34428.7340.97814513009.68837.9370.978969140012.42248.640.978908150015.65660.9380.973077160019.23474.8290.972614不同問題規(guī)模下程

9、序的效率3.1不同冋題規(guī)模下程序的效率問題規(guī)模與效率的關(guān)系分林:陌著冋題規(guī)模的增加,桿序的效率趨于穩(wěn)定,但是略徹有點(diǎn)下降。嵌套街壞中,如果外層備壞迭代次數(shù)較少時(shí),如果將來CPU核數(shù)增)11到一定f?度 的線棺數(shù)將可能小于CPU核數(shù)。另外如果層備壞存在負(fù)我平偷的情況下,很難調(diào)度外層備 壞便之達(dá)到負(fù)我平j(luò)。下面作為例子來講述咖何垮嵌套術(shù)壞并行化,以滿足上述擴(kuò)驛It和負(fù)我平働 需求。一個(gè)串行的矩陣乘袪的因數(shù)代西如下:/I矩陣串行乘法函數(shù)param int*a常向要相乘的第個(gè)矩陣的朋param int row_a -矩陣a的行數(shù)param int col_a -矩眸a的列數(shù)param int 向要想成

10、的第個(gè)矩陣的指ftparam int row_b -矩眸b的行數(shù)param int col_b 矩陣b的列數(shù)param int *c 計(jì)算結(jié)果的矩陣的常針param intc_size -矩眸c的空間大小(總元素個(gè)數(shù))return void -無*/void Martrix_Multiply(int *a, int row_a,int col_a,int* b,int row_b,int col_b,int*c,intc_size)lf(col_a!=row_b|c_sizerow_a*col_b)return;int i,j,k;/#pragma omp for private(i,j,k)

11、for(i = 0;irow_a;i+)int row_i=i*coLa;int row_c=i*col_b;for(j=0;jcol_b;j+) crow_c+j=0;for(k=0;krow_b;k+)crow.c+j+=arowj+k*bk*coLb+j;如果在外層俯壞前面UlliOpenMP的for語句時(shí) M 變成了-個(gè)并行的矩陣乘法函數(shù), 但是這樣簡(jiǎn)單地將貝并行化顯然無法滿足前面所述的擴(kuò)展性需求。其實(shí)可1采用一個(gè)簡(jiǎn)單地方進(jìn)將最外層備壞和第2層循壞合并成一個(gè)Iliff.,T便是采 用合并循環(huán)后的并行實(shí)現(xiàn)。void Parallel_Matrix_Multiply(int *a,int

12、row_a,int col_a,int *bjnt row_b,int col_b,int *c,int c_size)lf(col_a!=row_b)return;int i,j,k;int index;int border=row_a*col_b;可修編i=0;j=0;/#pragma omp parallel private(i,j,k) num_threads(dtn(border,1) tor(index = O;indexborder;index+)i=index/col_b;j=index%col_b;int rowj=i*col_a;int row_c=i*col_b;crow_c+j=0;for(k=0;krow_b;k+)crow_c+j+=arowj+k*bk*col_b+j;從上面代碼可以看出,合并后的(8壞便捷border=row_a*col_b;即等于原來的兩個(gè)循環(huán) 迪界之枳,然后再街壞中it算出原

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論