并行計算課程報告_第1頁
并行計算課程報告_第2頁
并行計算課程報告_第3頁
并行計算課程報告_第4頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、成績:并行計算導(dǎo)論課程報告專業(yè):軟件工程班級:軟件二班學(xué)號:7:琳珂2017年6月1日1、并行計算的實際意義并行計算或稱平行計算是相對于串行計算來說的。 它是一種一次可執(zhí)行多個指令的算法, 目的是提高計算速度, 及通過擴大問題求解規(guī)模,解決大型而復(fù)雜的計算問題。 所謂并行計算可分為時間上的并行和空間上的并行。 時間上的并行就是指流水線技術(shù),而空間上的并行則是指用多個處理器并發(fā)的執(zhí)行計算。在應(yīng)用需求方面,人類對計算機性能的需求總是永無止境的,在諸如預(yù)測模型的構(gòu)造和模擬、工程設(shè)計和自動化、能源勘探、醫(yī)學(xué)、軍事以及基礎(chǔ)理論研究等領(lǐng)域中都對計算提出了極高的具有挑戰(zhàn)性的要求。例如,在作數(shù)值氣象預(yù)報時,

2、要提高全球氣象預(yù)報的準(zhǔn)確性,據(jù)估計在經(jīng)度、緯度和大氣層方向上至少要取 200*100*20 40 萬各網(wǎng)格點。并行計算機產(chǎn)生和發(fā)展的目的就是為了滿足日益增長的大規(guī)模科學(xué)和工程計算、 事務(wù)處理和商業(yè)計算的需求。 問題求解最大規(guī)模是并行計算機的最重要的指標(biāo)之一, 也是一個國家高新技術(shù)發(fā)展的重要標(biāo)志。2、擬優(yōu)化的應(yīng)用介紹應(yīng)用 jacobi迭代近似求解二維泊松方程。二維泊松方程:u( x, y)f (x, y), ( x, y)u( x, y)g( x, y), ( x, y)其中22(0,W)* (0, H ) ,u( x, y)x2u( x, y)y2 u( x, y)f (x, y) 和 g(x

3、, y) 為已知函數(shù),分別定義在的部和邊界上。對于任意正整數(shù)M x 和 N y ,將網(wǎng)格剖分成 M x * N y 個相同的方格。在網(wǎng)格節(jié)點上,用二階中心差分來近似二階偏導(dǎo)數(shù)。2ui 1, j2ui , jui 1, ju(ihx , jh y )hx2x22ui , j 12ui , jui , j 1y2 u(ihx , jhy )hy2將差分近似代入泊松方程, 便得到了五點差分離散格式,泊松方2(h2h2 )uh2(ui 1, jui 1, j) h2(ui , j 1ui , j 1) h2h2fi , jxyi , jyxx y程的求 1 iM x1,1jNx之后用經(jīng)典的jacobi

4、 算法來求解此方程組。 從任意一初始近似解ui0, j , i1,2,3, M x . j1,2,3, N y出發(fā),迭代計算:h2h2 fi , jh2(ui 1, jui 1, j) h2(uu)ukxyyxi , j 1i , j 1i , j2(h2h2 )xyi 1,2,3, M x . j1,2,3, N y迭代序號 k=1,2,3 直至近似解滿足誤差要求。若 f ( x, y)4 ,且在邊界上 g(x, y) x2 y2 那么泊松方程的解 析解為u( x, y)x2y2若g( x, y) 0,且,f (x, y)42 sin(2 x) sin( 2y) ,那么泊松方程的一個解析解是

5、u(x, y)sin(2 x) sin(2 y) 。3、串行算法設(shè)計(或介紹)最耗時的是主循環(huán),是一個三重循環(huán)嵌套,時間復(fù)雜度為3N。4、并行算法設(shè)計對主循環(huán)進行OpenMP 并行優(yōu)化,采用#pragma omp parallel for reduction(+:uerr) default(none) shared(c1,c2,fij,hy2,hx2,Nyp1)shared(u1,u0)private(ix,jy,tmp)時間復(fù)雜度無太大變化。 但是多個線程運算也的確加速了其運算速度。5、采用的并行計算機結(jié)構(gòu)介紹采用個人筆記本進行最終測試,其配置如下:6、基于 OpenMP 的并行程序?qū)崿F(xiàn)#i

6、nclude<stdio.h>#include<stdlib.h>#include<math.h>#include<omp.h>#if defined(_WIN32)|defined(_WIN64)#include<sys/timeb.h>#define gettime(a) _ftime(a)#define usec(t1,t2) (t2).time-(t1).time)*1000+ (t2).millitm-(t1).millitm)*100)typedef struct _timeb timestruct;#else#inclu

7、de<sys/time.h>#define gettime(a) gettimeofday(a,NULL)#define usec(t1,t2) (t2).tv_sec-(t1).tv_sec*1000000+ (t2).tv_usec-(t1).tv_usec)typedef struct timeval timestruct;#endif / defined(_WIN32)|defined(_WIN64)#define Mx 8191#define Ny 1023float uval(float x, float y)return (x*x + y*y);int main()f

8、loat Widthy = 2.0, Heightx = 1.0;float *u0, *u1;float hx, hy, hx2, hy2, fij, c1, c2;float uerr, errtol, tmp, *tprt;int ix, jy, maxIter, iter;int Nyp1 = Ny + 1;timestruct t1, t2;long long telapsed;u0 = (float*)malloc(sizeof(float)*(Mx + 1)*(Ny + 1);u1 = (float*)malloc(sizeof(float)*(Mx + 1)*(Ny + 1);

9、maxIter = 100;errtol = 0.00f;hx = Heightx / Mx;hy = Widthy / Ny;/初始化 u0/u1 的左右邊界for (ix = 0; ix <= Mx; ix+)u0ix*Nyp1 + 0 = u1ix*Nyp1 + 0 = uval(ix*hx, 0.0f); u0ix*Nyp1 + Ny = u1ix*Nyp1 + Ny = uval(ix*hx, Ny*hy);/初始化 u0/u1 的上下邊界for (jy = 0; jy <= Ny; jy+)u0jy = u1jy = uval(0.0f, jy*hy);u0Mx*Nyp

10、1 + jy = u1Mx*Nyp1 + jy = uval(Mx*hx, jy*hy);/初始化 u0 的部點for (ix = 1; ix < Mx; ix+)for (jy = 1; jy < Ny; jy+)u0ix*Nyp1 + jy = 0.0f;fij = -4.0f;c1 = hx*hx*hy*hy;c2 = 1.0f / (2.0*(hx*hx + hy*hy);hx2 = hx*hx;hy2 = hy*hy;gettime(&t1);/主要迭代for (iter = 1; iter <= maxIter; iter+)uerr = 0.0f;#pr

11、agma omp parallel for reduction(+:uerr) default(none) shared (c1,c2,fij,hy2,hx2,Nyp1) shared(u1,u0) private (ix,jy,tmp)for (ix = 1; ix < Mx; ix+)for (jy = 1; jy < Ny; jy+)u1ix*Nyp1 + jy = (c1*fij + hy2*(u0(ix - 1)*Nyp1 + jy + u0(ix + 1)*Nyp1 + jy) +hx2*(u0ix*Nyp1 + jy - 1 + u0ix*Nyp1 + jy + 1)

12、*c2; tmp = fabs(u0ix*Nyp1 + jy - u1ix*Nyp1 + jy); uerr = tmp > uerr ? tmp : uerr;printf("iter = %d uerr =%en", iter, uerr);if (uerr<errtol)break;tprt = u0;u0 = u1;u1 = tprt;gettime(&t2);telapsed = usec(t1, t2);printf(" 歷時 = %13ld 微秒 n", telapsed);free(u0);free(u1);retur

13、n 0;7、并行優(yōu)化結(jié)果分析編譯平臺: VS2017并行編程平臺: OpenMP測試數(shù)據(jù)集合: 100 次 jacobi 迭代求二維泊松方程的近似解。集群測試:串行算法結(jié)果:iter 為迭代次數(shù), uerr 為誤差。時間單位為微秒。并行算法結(jié)果:加速比: 15241150/2552944=5.97本機測試:串行算法:并行算法:加速比: 13000617/6000371=2.17結(jié)論:每次測試中,誤差單調(diào)減少,且趨于平穩(wěn)。代碼中設(shè)定誤差閾值為 0,保證每次迭代相同次數(shù)。在集群和本機上,串行算法精確度一樣,本機速度較快。采用 cpu 并行,集群的并行程度更高,所以速度有明顯優(yōu)勢。本機速度相對較慢。主要原因是本機核數(shù)不如集群多。但由于 reduction(+:uerr)字句,歸約了誤差,所以并行程度越高,誤差越大,導(dǎo)致集群誤差較大,而本機相對誤差較小。8、并行計算導(dǎo)論學(xué)習(xí)體會并行計算導(dǎo)論這門課,概述介紹了并行計算的容、特點和發(fā)展方向,并介紹了并行計算機的體系結(jié)構(gòu)和一些著名的超級

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論