下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《并行程序設(shè)計(jì)原理》作業(yè)要求:用MPI語言實(shí)現(xiàn)課本89頁圖4-10所示的并行桶排序(必須采用此算法),數(shù)組大小和處理器數(shù)不限,數(shù)組中所有元素的取值區(qū)間為[0,1]。完成下面并行程序中的bucket_sort函數(shù),MPI程序中要有簡單的中文注釋。在192.168.150.197上測試完成表1和表2的相關(guān)測試(數(shù)據(jù)必須準(zhǔn)確),并對表1和表2作簡單的分析。評分標(biāo)準(zhǔn):在MPI程序正確的前提下,主要根據(jù)程序執(zhí)行時間的快慢來評分。并行程序:#include<mpi.h>#include<ctime>#include<algorithm>#include<iostream>usingnamespacestd;intrank,size;voidbucket_sort(double*a,intn){ inti; intbucket; /*幾號小桶*/ intbigBucketSize=n/size; /*大桶大小*/ intsortSize=0; /*待排序大桶數(shù)組大小*/ int*sdispls; /*發(fā)送步長*/ int*rdispls; /*接受步長*/ int*sendcnts; /*發(fā)送的各小桶大小*/ int*recvcnts; /*接受的各小桶大小*/ double*sourcebuf; /*大桶數(shù)組*/ double*sendbuf; /*Alltoall發(fā)送數(shù)組*/ double*recvbuf; /*Alltoall接收數(shù)組*/ sourcebuf=newdouble[bigBucketSize]; /*將數(shù)據(jù)平均分散到各處理機(jī)*/ MPI_Scatter(a,bigBucketSize,MPI_DOUBLE,sourcebuf,bigBucketSize,MPI_DOUBLE,0,MPI_COMM_WORLD); sdispls=newint[size]; rdispls=newint[size]; sendcnts=newint[size]; recvcnts=newint[size]; sendbuf=newdouble[n]; recvbuf=newdouble[n]; for(i=0;i<size;i++){ sendcnts[i]=0; } /*設(shè)置發(fā)送緩沖區(qū)數(shù)據(jù)*/ for(i=0;i<bigBucketSize;i++){ /*計(jì)算放置到幾號小桶*/ bucket=sourcebuf[i]==size?(size-1):(int)(sourcebuf[i]*size); sendbuf[bucket*bigBucketSize+sendcnts[bucket]]=sourcebuf[i]; sendcnts[bucket]++; } /*交換各個處理器的發(fā)送數(shù)據(jù)大小,來計(jì)算接收數(shù)據(jù)大小*/ MPI_Alltoall(sendcnts,1,MPI_INT,recvcnts,1,MPI_INT,MPI_COMM_WORLD); /*計(jì)算發(fā)送步長和接收步長*/ sdispls[0]=0; rdispls[0]=0; for(i=1;i<size;i++){ sdispls[i]=sdispls[i-1]+bigBucketSize; rdispls[i]=rdispls[i-1]+recvcnts[i-1]; } /*計(jì)算待排序數(shù)據(jù)總數(shù)*/ sortSize=rdispls[size-1]+recvcnts[size-1]; /*交換待排序數(shù)據(jù)*/ MPI_Alltoallv(sendbuf,sendcnts,sdispls,MPI_DOUBLE,recvbuf,recvcnts,rdispls,MPI_DOUBLE,MPI_COMM_WORLD); /*對接收到的數(shù)據(jù)排序*/ sort(recvbuf,recvbuf+sortSize); /*1.收集各個處理器的數(shù)據(jù)大小,用于計(jì)算接收步長*/ MPI_Gather(&sortSize,1,MPI_INT,recvcnts,1,MPI_INT,0,MPI_COMM_WORLD); /*計(jì)算接收步長*/ rdispls[0]=0; for(i=1;i<size;++i){rdispls[i]=rdispls[i-1]+recvcnts[i-1];} /*2.收集最后的數(shù)據(jù)*/ MPI_Gatherv(recvbuf,sortSize,MPI_DOUBLE,a,recvcnts,rdispls,MPI_DOUBLE,0,MPI_COMM_WORLD); delete[]sourcebuf; delete[]sdispls; delete[]rdispls; delete[]sendcnts; delete[]recvcnts; delete[]sendbuf; delete[]recvbuf;}voidmain(intargv,char*argc[]){ intn=10000000; doubleduration=0,sduration=0; double*a,*b; MPI_Init(&argv,&argc); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); if(rank==0) { a=newdouble[n]; b=newdouble[n]; for(inti=0;i<n;i++) a[i]=b[i]=rand()/double(RAND_MAX); duration-=MPI_Wtime(); } bucket_sort(a,n); if(rank==0) { duration+=MPI_Wtime(); sduration-=MPI_Wtime(); sort(b,b+n); sduration+=MPI_Wtime(); for(inti=0;i<n;i++) if(a[i]!=b[i]) { cout<<"error!"<<endl; break; } cout<<"串行執(zhí)行時間:"<<sduration<<endl; cout<<"并行執(zhí)行時間:"<<duration<<endl; cout<<"加速比:"<<sduration/duration<<endl; cout<<"效率:"<<sduration/duration/size<<endl; delete[]a; delete[]b; } MPI_Finalize();}表1并行桶排序程序在不同處理器數(shù)下的執(zhí)行時間、加速比和效率(數(shù)組大小為107)處理器數(shù)12481632執(zhí)行時間(秒)1.620250.8913950.5279920.3339750.2626810.263484加速比0.8115031.473932.512134.007484.972324.98271效率0.8115030.7369660.6280320.5009340.310770.15571分析:在處理器少于16個之內(nèi),隨著處理器的增加,執(zhí)行時間越來越少,加速比不斷增大。但是增加到16個處理器之后,執(zhí)行時間減少幅度不大,由于處理器越多處理器之間的同步和數(shù)據(jù)傳輸所消耗時間也越多。 另外,隨著處理器的增加,單個處理器的效率不斷下降,這也是由于處理器越多處理器之間的同步和數(shù)據(jù)傳輸所消耗時間也越多。表2并行桶排序程序在不同數(shù)組大小下的執(zhí)行時間、加速比和效率(處理器數(shù)為8)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高速公路合同制收費(fèi)員二零二五年度服務(wù)質(zhì)量監(jiān)督與反饋協(xié)議3篇
- 2025年度落水管安裝與水質(zhì)凈化服務(wù)合同4篇
- 二零二五年度木屋建造與木材加工工藝改進(jìn)合同4篇
- 咖啡館品牌形象包裝設(shè)計(jì)考核試卷
- 客運(yùn)站服務(wù)創(chuàng)新實(shí)踐考核試卷
- 2025版養(yǎng)老信托資金借款合同3篇
- 2025版電子商務(wù)合同爭議解決程序與法律適用合同4篇
- 二零二五年度軟件開發(fā)與經(jīng)銷合同2篇
- 2025版學(xué)校教師培訓(xùn)與發(fā)展聘用合同樣本3篇
- 2025年外匯交易居間服務(wù)合同
- GB/T 16895.3-2024低壓電氣裝置第5-54部分:電氣設(shè)備的選擇和安裝接地配置和保護(hù)導(dǎo)體
- 計(jì)劃合同部部長述職報(bào)告范文
- 窗簾采購?fù)稑?biāo)方案(技術(shù)方案)
- 基于學(xué)習(xí)任務(wù)群的小學(xué)語文單元整體教學(xué)設(shè)計(jì)策略的探究
- 人教版高中物理必修一同步課時作業(yè)(全冊)
- 食堂油鍋起火演練方案及流程
- 《呼吸衰竭的治療》
- 2024年度醫(yī)患溝通課件
- 2024年中考政治總復(fù)習(xí)初中道德與法治知識點(diǎn)總結(jié)(重點(diǎn)標(biāo)記版)
- 2024年手術(shù)室的應(yīng)急預(yù)案
- 五年級上冊小數(shù)除法豎式計(jì)算練習(xí)300題及答案
評論
0/150
提交評論