并行计算课程报告_第1页
并行计算课程报告_第2页
并行计算课程报告_第3页
并行计算课程报告_第4页
并行计算课程报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

成绩: 并行计算导论课程报告专业: 软件工程 班级: 软件二班 学号: 140120010057 姓名: 蒋琳珂 2017年 6月 1日1、并行计算的实际意义并行计算或称平行计算是相对于串行计算来说的。它是一种一次可执行多个指令的算法,目的是提高计算速度,及通过扩大问题求解规模,解决大型而复杂的计算问题。所谓并行计算可分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。在应用需求方面,人类对计算机性能的需求总是永无止境的,在诸如预测模型的构造和模拟、工程设计和自动化、能源勘探、医学、军事以及基础理论研究等领域中都对计算提出了极高的具有挑战性的要求。例如,在作数值气象预报时,要提高全球气象预报的准确性,据估计在经度、纬度和大气层方向上至少要取200*100*2040万各网格点。并行计算机产生和发展的目的就是为了满足日益增长的大规模科学和工程计算、事务处理和商业计算的需求。问题求解最大规模是并行计算机的最重要的指标之一,也是一个国家高新技术发展的重要标志。2、 拟优化的应用介绍应用jacobi迭代近似求解二维泊松方程。二维泊松方程:其中,和为已知函数,分别定义在的内部和边界上。对于任意正整数和,将网格剖分成个相同的方格。在网格节点上,用二阶中心差分来近似二阶偏导数。将差分近似代入泊松方程,便得到了五点差分离散格式,泊松方程的求之后用经典的jacobi算法来求解此方程组。从任意一初始近似解出发,迭代计算:迭代序号k=1,2,3直至近似解满足误差要求。若,且在边界上那么泊松方程的解析解为,若,且,那么泊松方程的一个解析解是。3、串行算法设计(或介绍)最耗时的是主循环,是一个三重循环嵌套,时间复杂度为3N。4、并行算法设计对主循环进行OpenMP并行优化,采用#pragma omp parallel for reduction(+:uerr) default(none) shared(c1,c2,fij,hy2,hx2,Nyp1)shared(u1,u0)private(ix,jy,tmp)时间复杂度无太大变化。但是多个线程运算也的确加速了其运算速度。5、 采用的并行计算机结构介绍采用个人笔记本进行最终测试,其配置如下:6、基于OpenMP的并行程序实现#include#include#include#include#if defined(_WIN32)|defined(_WIN64)#include#define gettime(a) _ftime(a)#define usec(t1,t2) (t2).time-(t1).time)*1000+ (t2).millitm-(t1).millitm)*100)typedef struct _timeb timestruct;#else#include#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()float 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);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*Nyp1 + 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;#pragma 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 uerr ? tmp : uerr;printf(iter = %d uerr =%en, iter, uerr);if (uerrerrtol)break;tprt = u0;u0 = u1;u1 = tprt;gettime(&t2);telapsed = usec(t1, t2);printf(历时 = %13ld 微秒 n, telapsed);free(u0);free(u1);return 0;7、并行优化结果分析编译平台:VS2017并行编程平台:OpenMP测试数据集合:100次jacobi迭代求二维泊松方程的近似解。集群测试:串行算法结果:iter为迭代次数,uerr为误差。时间单位为微秒。并行算法结果:加速比:15241150/2552944=5.97本机测试:串行算法:并行算法:加速比:13000617/6000371=2.17结论:每次测试中,误差单调减少,且趋于平稳。代码中设定误差阈值为0,保证每次迭代相同次数。 在集群和本机上,串行算法精确度一样,本机速度较快。采用cpu并行,集群的并行程度更高,所以速度有明显优势。本机速度相对较慢。主要原因是本机核数不如集群多。但由于reduction(+:uerr)字句,归约了误差,所以并行程度越高,误差越大,导致集群误差较大,而本机相对误差较小。8、并行计算导论学习体会并行计算导论这门课,概述介绍了并行计算的内容、特点和发展方向,并介绍了并行计算机的体系结构和一些著名的超级计算机。又深入介绍了几门并行编程方法,如MPI、OpenMP、CUDA等,让我们对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论