




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、并行計算實驗報告課程:并行計算姓名:鄭波學(xué)號:2013211644班級:計算機(jī)科學(xué)與技術(shù)13-2班日期:2015年12月7日推薦精選實驗一:OpenMP基本使用一、實驗?zāi)康?、熟悉OpenMP編程。2、比較串行算法與并行算法在執(zhí)行時間上的差別;3、考察線程數(shù)目使用不同對并行算法執(zhí)行時間的影響;4、考察運(yùn)算規(guī)模N對串、并行算法執(zhí)行時間上的影響。二、實驗內(nèi)容1、使用OpenMP進(jìn)行兩個矩陣A和B的加法,并分析串行、并行時間的差別以及問題規(guī)模對程序運(yùn)行時間的影響三、實驗步驟1、整個程序的設(shè)計流程全局變量設(shè)置三個宏定義過的size×size的二維數(shù)組啊a,b,c。初始化a數(shù)組為全1,b數(shù)組為
2、全2通過omp_set_num_threads()庫函數(shù)設(shè)置線程數(shù)調(diào)用openMP庫函數(shù)omp_get_wtime()獲取當(dāng)前時間start #pragma omp parallel for開始做并行區(qū)部分 結(jié)束后再次調(diào)用omp_get_wtime()獲取時間end,end-start即為并行消耗時間再次調(diào)用時間函數(shù)更新strat 串行做一邊矩陣相加 更新end,end-start即為串行耗時 代碼如下:#include<iostream>#include<omp.h>#define size 10000using namespace std;intasizesize,
3、bsizesize,csizesize;int main() for(int i=0;i!=size;+i) /initial the matrixfor(int j=0;j!=size;+j) aij=1;bij=2;double start=omp_get_wtime();omp_set_num_threads(4);#pragma omp parallel forfor(int i=0;i<size;+i)推薦精選for(int j=0;j<size;+j)cij=aij+bij;double end=omp_get_wtime(); cout<<"并行
4、運(yùn)行時間:"<<end-start<<endl;start=omp_get_wtime(); for(int i=0;i<size;+i)for(int j=0;j<size;+j)cij=aij+bij;end=omp_get_wtime();cout<<"串行運(yùn)行時間:"<<end-start<<endl;system("pause");2、問題規(guī)模對串、并行程序時間的影響(A、B矩陣的大小為N*M)(1)通過不斷增加問題規(guī)模,觀察串行和并行程序的執(zhí)行時間,得到如下表格
5、的時間消耗數(shù)據(jù):100*1001000*100010000*10000串行消耗(ms)0.034.36296.91并行消耗(ms)7.069.54182.27(2)可以發(fā)現(xiàn),當(dāng)矩陣規(guī)模較小時,串行算法仍然要比并行算法運(yùn)行的快,當(dāng)規(guī)模到達(dá)一定程度的時候,并行運(yùn)行的速度較串行有了提升。 并行算法對各個CPU的調(diào)度也占用一定的時間,當(dāng)問題規(guī)模很小的時候,這個調(diào)度時間占了很大的比重,而在規(guī)模較大的時候,這個調(diào)度時間就顯得微乎其微了 3、線程數(shù)目對并行程序的影響(這里假設(shè)問題規(guī)模為:N*M=10000*10000)(1)在使用OpenMP進(jìn)行并行執(zhí)行矩陣加法時,我們可以自由設(shè)置進(jìn)行并行計算的并行線程數(shù)目
6、。(2)在并行區(qū)域中,通過函數(shù)int omp_set_num_threads(int)設(shè)置并行區(qū)域中要創(chuàng)建的線程數(shù),分別設(shè)置為2、4、8、16,得到如下表格的時間消耗24816并行消耗(ms)262.73205.12248.97295.38(3)觀察發(fā)現(xiàn),在問題規(guī)模不變的前提下,隨著線程數(shù)目的增加,問題解決的時間也在相應(yīng)的減少。但是,問題消耗的時間并不會隨著線程數(shù)目的增加而不斷的減少,原因可能是因為,隨著線程數(shù)目的增減,線程的額外準(zhǔn)備時間開銷也將擴(kuò)大。四、心得體會通過本次實驗,了解了openMP庫函數(shù),掌握了openMP最基本的多線程程序編寫。通過分析比較串并行運(yùn)行時間,體會了不同規(guī)模下串并行
7、的使用效果。推薦精選實驗二:使用OpenMP實現(xiàn)圓周率計算的并行算法一、 實驗?zāi)康?、 考察問題規(guī)模N對圓周率計算精確度的影響;2、 考察線程數(shù)目對圓周率計算執(zhí)行時間的影響;3、比較串、并行算法在執(zhí)行時間上的差別。二、實驗內(nèi)容1、使用OpenMP和近似計算公式計算圓周率的大小,并分析串行、并行時間的差別以及問題規(guī)模對程序運(yùn)行時間的影響三、實驗步驟1、整個程序的設(shè)計流程全局變量設(shè)置宏size,用來描述計算范圍利用如下公式準(zhǔn)備計算圓周率的近似值通過omp_set_num_threads()庫函數(shù)設(shè)置線程數(shù)調(diào)用openMP庫函數(shù)omp_get_wtime()獲取當(dāng)前時間start #pragma
8、160;omp parallel for reduction(+:sum)開始做并行區(qū)部分注意:其中sum是共享的,因為是個連續(xù)和的問題,采用reduction之后,每個線程根據(jù)reduction(+: sum)的聲明算出自己的sum,然后再將每個線程的sum加起來。避免各個線程共享sum資源時出現(xiàn)問題 結(jié)束后再次調(diào)用omp_get_wtime()獲取時間end,end-start即為并行消耗時間再次調(diào)用時間函數(shù)更新strat 串行做一邊矩陣相加 更新end,end-start即為串行耗時 代碼如下:#include<iostream>#include
9、<omp.h>#define size 10000000using namespace std;int main()double sum=0,start,end;omp_set_num_threads(4);推薦精選start=omp_get_wtime();#pragma omp parallel for reduction(+:sum)for(int i=0;i<size;+i)sum+=4/(1+(0.5+i)/size)*(0.5+i)/size)*1/siz
10、e;end=omp_get_wtime();cout<<"并行時間:"<<end-start<<endl;sum=0;start=omp_get_wtime();for(int i=0;i<size;+i)sum+=4/(1+(0.5+i)/size)*(0.5+i)/size)*1/size;end=omp_get_wtime();cout<<"串行時間:"<<end-start<<endl;cout.precision(20);cout<<"
11、:"<<sum<<endl;system("pause");2、問題規(guī)模對串、并行程序時間的影響(N的大小影響時間)(1)通過不斷增加問題規(guī)模,觀察串行和并行程序的執(zhí)行時間,得到如下表格的時間消耗數(shù)據(jù):100010000010000000串行消耗(ms)0.044.10365.70并行消耗(ms)4.6015.04188.48(2)可以發(fā)現(xiàn),當(dāng)規(guī)模較小時,串行算法仍然要比并行算法運(yùn)行的快,當(dāng)規(guī)模到達(dá)一定程度的時候,并行運(yùn)行的速度較串行有了提升。 并行算法對各個CPU的調(diào)度也占用一定的時間,當(dāng)問題規(guī)模很小的時候,這個調(diào)度時間占了很大的比重,而
12、在規(guī)模較大的時候,這個調(diào)度時間就顯得微乎其微了 3、線程數(shù)目對并行程序的影響(這里假設(shè)問題規(guī)模為:N=100000)(1)在使用OpenMP進(jìn)行并行執(zhí)行運(yùn)算時,我們可以自由設(shè)置進(jìn)行并行計算的并行線程數(shù)目。(2)在并行區(qū)域中,通過函數(shù)int omp_set_num_threads(int)設(shè)置并行區(qū)域中要創(chuàng)建的線程數(shù),分別設(shè)置為2、4、8、16,得到如下表格的時間消耗24816并行消耗(ms)3.263.233.1430.9(3)觀察發(fā)現(xiàn),在問題規(guī)模不變的前提下,隨著線程數(shù)目的增加,問題解決的時間也在相應(yīng)的減少。但是,問題消耗的時間并不會隨著線程數(shù)目的增加而不斷的減少,原因可能是因為,隨著線程數(shù)
13、目的增減,線程的額外準(zhǔn)備時間開銷也將擴(kuò)大。四、心得體會通過本次實驗,進(jìn)一步深入了openMP的編程,對openMP各線程共享資源、各自擁有自己的資源有了初步認(rèn)識。再一次體會到了并行計算給大規(guī)模計算帶來的便利性。推薦精選實驗三:使用OpenMP求最大值一、實驗?zāi)康?、掌握求最大值的并行算法2、比較串行算法與并行算法在執(zhí)行時間上的差別;3、考察線程數(shù)目使用不同對并行算法執(zhí)行時間的影響;二、實驗內(nèi)容1、使用OpenMP求一個亂序數(shù)列的最大值,并分析串行、并行時間的差別以及問題規(guī)模對程序運(yùn)行時間的影響三、實驗步驟1、整個程序的設(shè)計流程本程序?qū)崿F(xiàn)了平衡樹算法,但由于處理器數(shù)目有限,并行結(jié)果反而不如串行,
14、不過當(dāng)處理器足夠多時(理想情況為數(shù)組長度的一半)時,并行會有大的提升。這里只講一下平衡樹算法思路。 全局變量設(shè)置num×size的二維數(shù)組,最后一維用來保存數(shù)列其中:num=log(size-1)/log(2)+1;表示平衡樹的高度初始化最后一維數(shù)組通過omp_set_num_threads()庫函數(shù)設(shè)置線程數(shù)調(diào)用openMP庫函數(shù)omp_get_wtime()獲取當(dāng)前時間start #pragma omp parallel for開始做并行區(qū)部分 結(jié)束后再次調(diào)用omp_get_wtime()獲取時間end,end-start即為并行消耗時間算法核心部分:算法先處理最后一層平衡樹(假
15、設(shè)個數(shù)為n),兩個數(shù)據(jù)一組比較,取大的,生成新的一層平衡樹(個數(shù)為n/2或者(n+1)/2),放在二維數(shù)組的上一維。迭代處理每一層,最后使得新的一層個數(shù)為1,這個值就是最大值,即a11; 并行處理每一層平衡樹 代碼如下:#include<iostream>#include<math.h>#include<omp.h>const int size=10000;using namespace std;int asize+1size+1;int main()int num=log(size-1)/log(2)+1;for(size_t i=1;i<=size
16、;+i) /初始化anumi=i;推薦精選int m=0;double start=omp_get_wtime();for(size_t i=1;i<=size;+i) /串行if(anumi>=m)m=anumi;double end=omp_get_wtime();cout<<"串行:"<<end-start<<endl;int amax=size;omp_set_num_threads(4);start=omp_get_wtime();for(int k=num-1;k>=0;k-)#pragma omp para
17、llel forfor(int j=1;j<=(amax-1)/2+1;j+) if(2*j>amax)akj=ak+1amax;elseakj=ak+12*j-1>ak+12*j?ak+12*j-1:ak+12*j; end=omp_get_wtime();cout<<"并行:"<<end-start<<endl;system("pause");2、問題規(guī)模對串、并行程序時間的影響(數(shù)列長度為N)(1)通過不斷增加問題規(guī)模,觀察串行和并行程序的執(zhí)行時間,得到如下表格的時間消耗數(shù)據(jù):N10010001
18、0000串行消耗(ms)1.23e-61.35e-53.4e-5并行消耗(ms)0.00310.03600.047(2)可以發(fā)現(xiàn),并行總是比串行慢。主要原因是:平衡樹算法對處理器個數(shù)有很高的要求,在處理器個數(shù)達(dá)到問題規(guī)模的一半的時候才有最好的效果,本機(jī)只有4個線程,線程的調(diào)度反而使得整個時間消耗比串行多。 3、線程數(shù)目對并行程序的影響(這里假設(shè)問題規(guī)模為:N*M=10000*10000)(1)在使用OpenMP進(jìn)行并行執(zhí)行矩陣加法時,我們可以自由設(shè)置進(jìn)行并行計算的并行線程數(shù)目。(2)在并行區(qū)域中,通過函數(shù)int omp_set_num_threads(int)設(shè)置并行區(qū)域中要創(chuàng)建的線程數(shù),分別
19、設(shè)置為2、4、8、16,得到如下表格的時間消耗24816并行消耗(ms)0.0060.0040.040.06(3)觀察發(fā)現(xiàn),在問題規(guī)模不變的前提下,隨著線程數(shù)目的增加,問題解決的時間也在相應(yīng)的減少。但是,問題消耗的時間并不會隨著線程數(shù)目的增加而不斷的減少,原因可能是因為,隨著線程數(shù)目的增減,線程的額外準(zhǔn)備時間開銷也將擴(kuò)大。推薦精選四、心得體會通過本次實驗,學(xué)會了平衡樹的算法設(shè)計思想,見識到了高性能計算在龐大任務(wù)規(guī)模面前的解決問題的能力。在實驗的過程中使用平衡樹沒有得到理想的結(jié)果,也說明了高性能計算在處理器方面的限制。推薦精選實驗四:使用OpenMP計算矩陣相乘一、實驗?zāi)康?、掌握矩陣的乘法的串
20、、并行算法2、比較串行算法與并行算法在執(zhí)行時間上的差別;3、考察線程數(shù)目使用不同對并行算法執(zhí)行時間的影響;二、實驗內(nèi)容1、給定兩個矩陣AN,M1和BM1,M的乘積,即求CN,M=AN,M1*BM1,M。三、實驗步驟1、整個程序的設(shè)計流程計算矩陣的乘法,簡單的使用三重循環(huán)完成,并行對最外層循環(huán)并行計算 全局變量設(shè)置3個數(shù)組:aM+1N+1,bN+1M+1,cM+1M+1初始化三個數(shù)組通過omp_set_num_threads()庫函數(shù)設(shè)置線程數(shù)調(diào)用openMP庫函數(shù)omp_get_wtime()獲取當(dāng)前時間start #pragma omp parallel for開始做并行區(qū)部分 結(jié)束后再次調(diào)
21、用omp_get_wtime()獲取時間end,end-start即為并行消耗時間 代碼如下:#include<iostream>#include<omp.h>#define M 500#define N 500using namespace std;int aM+1N+1,bN+1M+1,cM+1M+1;int main()/init arrayfor(int i=1;i<=M;i+)for(int j=1;j<=N;j+)aij=1;for(in
22、t i=1;i<=N;i+)for(int j=1;j<=M;j+)bij=2; /parallel doomp_set_num_threads(4);double start=omp_get_wtime();#pragma omp parallel for推薦精選for(int i=1;i<=M;i+)for(int j=1;j<=M;j+)for(int k=1;k<=N;k+)cij+=aik*bkj;double end=omp_get_wtime();cout<<"并行:"<<end-start<<endl; /serial dostart=omp_get_wtime();for(int i=1;i<=M;i+)for(int j=1;j<=M;j+)for(int k=1;k<=N;k+)cij+=aik*bkj;end=omp_get_wtime();cout<<"串行:"<<end-start&l
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年爐料耐火材料項目可行性研究報告
- 2023-2029年中國番茄行業(yè)市場調(diào)查研究及發(fā)展戰(zhàn)略規(guī)劃報告
- 人壽保險項目風(fēng)險分析和評估報告
- 體育場館愛國主義教育公益活動策劃考核試卷
- 中國藥物洗脫球囊行業(yè)市場全景評估及投資前景展望報告
- 日用雜品市場趨勢預(yù)測與新產(chǎn)品研發(fā)考核試卷
- 家居裝飾中的軟裝布藝選擇與應(yīng)用考核試卷
- 2025年建筑陶瓷原料項目投資可行性研究分析報告
- 2024-2030年中國水療素行業(yè)市場全景監(jiān)測及投資前景展望報告
- 建立品牌與廣告宣傳考核試卷
- 2025年02月黃石市殘聯(lián)專門協(xié)會公開招聘工作人員5人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 2024-2025學(xué)年第二學(xué)期開學(xué)典禮-開學(xué)典禮校長致辭
- GB/T 15561-2024數(shù)字指示軌道衡
- 網(wǎng)絡(luò)保險風(fēng)險評估-洞察分析
- 呼吸機(jī)濕化的護(hù)理
- 2025-2030年中國旅居康養(yǎng)行業(yè)全國市場開拓戰(zhàn)略制定與實施研究報告
- 2024“五史”全文課件
- 《汽車專業(yè)英語》2024年課程標(biāo)準(zhǔn)(含課程思政設(shè)計)
- 部編四年級道德與法治下冊全冊教案(含反思)
- 中國傳統(tǒng)二十四節(jié)氣立春節(jié)氣介紹PPT模板課件
- 最新AS9120B質(zhì)量手冊
評論
0/150
提交評論