MPI如何实现进程同步?

XueWang1 2016-06-03 10:18:00
MPI_Barrier(MPI_COMM_WORLD);
为什么这个函数不起作用呢?或者说这个函数不是这个用处?还有没有其他的函数呢
...全文
732 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lx624909677 2016-06-04
  • 打赏
  • 举报
回复
MPI_Barrier是MPI中的一个函数接口,函数定义形式为int MPI_Barrier(MPI_Comm);表示阻止调用直到communicator中所有进程完成调用。
XueWang1 2016-06-04
  • 打赏
  • 举报
回复
引用 1楼lx624909677 的回复:
MPI_Barrier是MPI中的一个函数接口,函数定义形式为int MPI_Barrier(MPI_Comm);表示阻止调用直到communicator中所有进程完成调用。
意思是不是等到所有进程都到达该点后才继续执行呢
1. 设计目的、意义(功能描述) 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。本次大作业主要是对蒙特·卡罗方法进行并行处理,通过OpenMP、MPI、.NET、Java、Win32API等一系列并行技术和并行机制对该算法进行并行处理,从而也进一步熟悉了蒙特·卡罗方法的串行算法和并行算法,实现了用蒙特·卡罗方法计算出半径为1单位的球体的体积,体会到了并行技术在实际生活中的应用。 2. 方案分析(解决方案) 蒙特·卡罗方法(Monte Carlo method)是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。球的体积可以估算为:位于点模型内随机点个数与全体随机点个数的比值乘以包围盒的体积算的。 3. 设计分析 3.1 串行算法设计 假定球体用B表示,半径r=1单位,B1是包含B的参考立方体(在本例中是边长为2的正方体),在B1中产生N个均匀分布的伪随机点。对每个随机点检测其是否在B内,假设位于B内的随机点个数为N(in)(<=N),应用蒙特卡洛算法,则B的体积为 V=V1(N(in)/N) 其中V1是B1的体积。如果产生足够多的随机点,理论上可以获得任意逼近精度。 算法描述如下: BEGIN N=_MAX; FOR I=0;I<_MAX;I++ X=RANDOM(); Y=RANDOM(); Z=RANDOM(); IF (X*X+Y*Y+Z*Z)<=1 COUNT++; END IF; END FOR; BULK=V1*(COUNT/_MAX); END; 本算法主要是在参考立方体的选取上和定义的_MAX的值对结果影响较大,所以应该选择合适的数。 3.2 并行算法设计 对FOR循环进行划分使用两个处理器完成计算。例如对一个长为n的序列,首先划分得到两个长为n/2的序列,将其交给两个处理器分别处理;而后进一步划分得到四个长为n/4的序列,再分别交给四个处理器处理;如此递归下去最终得到结果。当然这是理想的划分情况,如果划分步骤不能达到平均分配的目的,那么结果的效率会相对较差。 伪代码如下: BEGIN N=_MAX; FOR1 I=0;I<_MAX/2;I++ X1=RANDOM(); Y1=RANDOM(); Z1=RANDOM(); IF (X1*X1+Y1*Y1+Z1*Z1)<=1 COUNT1++; END IF; END FOR1; FOR2 I=_MAX/2+1;I<_MAX;I++ X2=RANDOM(); Y2=RANDOM(); Z2=RANDOM(); IF (X2*X2+Y2*Y2+Z2*Z2)<=1 COUNT2++; END IF; END FOR2; BULK=V1*((COUNT1+ COUNT2)/_MAX); END; 3.3 理论加速比分析 实验中大量数据所产生的加速比比小量数据所产生的加速比要体现得更明显,并且数据生成的并行加速比随着处理器核的增加而增加。设处理器个数为p,数据量为n,由于正常情况下该快速排序算法的复杂度为O(nlogn),并行处理的时间复杂度为O(klogk),其中k=n/p,所以并行算法的时间复杂度为O((n/p)log(n/p)),理论加速比为nlogn/((n/p)log(n/p))=p+logp. 4. 功能模块实现与最终结果分析 4.1 基于OpenMP的并行算法实现 4.1.1 主要功能模块与实现方法 利用了OpenMP里面的#omp parallel sections将对两个for循环用两个线程并行化执行,以多线程方式并行运行程序,并行的算法步骤如下: (1)初始化_max = 10000000; (2)创建两个线程; (3)由OpenMP编译指导语句控制产生并行执行代码区段; (4)将数据存放到tianqing_count; (5)各线程调用算法得出结果; 并行算法的部分代码如下: #pragma omp parallel for private(tianqing_x,tianqing_y,tianqing_z) reduction(+:tianqing_count2) for (tianqing_i = 0; tianqing_i work2.pSumto(c, 0, MAXN - 1)); Thread newthread2 = new Thread(thread2); stopwatch.Start(); 启动线程1和线程2; 等待进程结束; stopwatch.Stop(); 得到结果; 4.5.2 实验加速比分析 实验中创建了两个线程,通过多次测试,得出实验结果:由上面的理论加速比分析可知,当线程数为2时,理论加速比为2+log2=3.但由于实际操作中硬件设备以及内存分配的影响,实验加速比达不到理论值3.实验加速比在2.6~2.7左右。 4.6 并行计算技术在实际系统中的应用 4.6.1 主要功能模块与实现方法 该飞机订票系统主要实现了对机票的一些基本信息进行存储和管理的功能。在系统中实现了对机票信息的增删改查,考虑到查询的方便性,对机票按照航班号进行排序,而此排序方法用并行快速排序运用进来。利用OpenMP的并行技术,对机票信息按顺序排列好,并分析了实验过程中的加速比。 4.6.2 实验加速比分析 实验中创建了两个线程,通过多次测试,得出实验结果:当数据量比较大时,加速比理论在1.9左右。数据量较大时体现出来的加速比更准确。由上面的理论加速比分析可知,当线程数为2时,理论加速比为2+log2=3.但由于实际操作中硬件设备以及内存分配的影响,实验加速比达不到理论值3.实验加速比在2.2~2.4左右。 5. 设计体会 虽然没有按时完成作业,但这份报告花了我好几天的时间,从开始的搭建并行计算平台到最后的程序运行成功可以说是对我的一个锻炼。每一次的遇到问题与每一次的解决问题都是一个成长。每一次遇到问题和解决问题都是一种锻炼,一种尝试,从我们上并行计算课我懂得了很多电脑硬件和软件的知识,这些可能对于我们这个专业以后都是没有机会接触的,所以我觉得选择了并行计算与多核多线程技术这门课是非常正确的。对OpenMP、MPI、WIN32API、Java、.NET的并行技术有了一定的了解。在搭建MPI并行程序这块,学习的知识尤为增加,这些都是在不断的摸索、学习中学会的。 这次的大作业虽然是对以前实验的整合,但它加深了我对并行计算的印象,也使我对并行计算知识的理解更加深刻,也使我认识到了自己很多不足之处。学习并行计算的历程不会因为完成本次大作业而停止,我们是为了用知识武装大脑而学习,通过学习充实自己的生活,要努力学习,争取以后能够完成规模更大的程序。
1. 设计目的、意义(功能描述) 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。本次大作业主要是对蒙特·卡罗方法进行并行处理,通过OpenMP、MPI、.NET、Java、Win32API等一系列并行技术和并行机制对该算法进行并行处理,从而也进一步熟悉了蒙特·卡罗方法的串行算法和并行算法,实现了用蒙特·卡罗方法计算出半径为1单位的球体的体积,体会到了并行技术在实际生活中的应用。 2. 方案分析(解决方案) 蒙特·卡罗方法(Monte Carlo method)是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。球的体积可以估算为:位于点模型内随机点个数与全体随机点个数的比值乘以包围盒的体积算的。 3. 设计分析 3.1 串行算法设计 假定球体用B表示,半径r=1单位,B1是包含B的参考立方体(在本例中是边长为2的正方体),在B1中产生N个均匀分布的伪随机点。对每个随机点检测其是否在B内,假设位于B内的随机点个数为N(in)(<=N),应用蒙特卡洛算法,则B的体积为 V=V1(N(in)/N) 其中V1是B1的体积。如果产生足够多的随机点,理论上可以获得任意逼近精度。 算法描述如下: BEGIN N=_MAX; FOR I=0;I<_MAX;I++ X=RANDOM(); Y=RANDOM(); Z=RANDOM(); IF (X*X+Y*Y+Z*Z)<=1 COUNT++; END IF; END FOR; BULK=V1*(COUNT/_MAX); END; 本算法主要是在参考立方体的选取上和定义的_MAX的值对结果影响较大,所以应该选择合适的数。 3.2 并行算法设计 对FOR循环进行划分使用两个处理器完成计算。例如对一个长为n的序列,首先划分得到两个长为n/2的序列,将其交给两个处理器分别处理;而后进一步划分得到四个长为n/4的序列,再分别交给四个处理器处理;如此递归下去最终得到结果。当然这是理想的划分情况,如果划分步骤不能达到平均分配的目的,那么结果的效率会相对较差。 伪代码如下: BEGIN N=_MAX; FOR1 I=0;I<_MAX/2;I++ X1=RANDOM(); Y1=RANDOM(); Z1=RANDOM(); IF (X1*X1+Y1*Y1+Z1*Z1)<=1 COUNT1++; END IF; END FOR1; FOR2 I=_MAX/2+1;I<_MAX;I++ X2=RANDOM(); Y2=RANDOM(); Z2=RANDOM(); IF (X2*X2+Y2*Y2+Z2*Z2)<=1 COUNT2++; END IF; END FOR2; BULK=V1*((COUNT1+ COUNT2)/_MAX); END; 3.3 理论加速比分析 实验中大量数据所产生的加速比比小量数据所产生的加速比要体现得更明显,并且数据生成的并行加速比随着处理器核的增加而增加。设处理器个数为p,数据量为n,由于正常情况下该快速排序算法的复杂度为O(nlogn),并行处理的时间复杂度为O(klogk),其中k=n/p,所以并行算法的时间复杂度为O((n/p)log(n/p)),理论加速比为nlogn/((n/p)log(n/p))=p+logp. 4. 功能模块实现与最终结果分析 4.1 基于OpenMP的并行算法实现 4.1.1 主要功能模块与实现方法 利用了OpenMP里面的#omp parallel sections将对两个for循环用两个线程并行化执行,以多线程方式并行运行程序,并行的算法步骤如下: (1)初始化_max = 10000000; (2)创建两个线程; (3)由OpenMP编译指导语句控制产生并行执行代码区段; (4)将数据存放到tianqing_count; (5)各线程调用算法得出结果; 并行算法的部分代码如下: #pragma omp parallel for private(tianqing_x,tianqing_y,tianqing_z) reduction(+:tianqing_count2) for (tianqing_i = 0; tianqing_i work2.pSumto(c, 0, MAXN - 1)); Thread newthread2 = new Thread(thread2); stopwatch.Start(); 启动线程1和线程2; 等待进程结束; stopwatch.Stop(); 得到结果; 4.5.2 实验加速比分析 实验中创建了两个线程,通过多次测试,得出实验结果:由上面的理论加速比分析可知,当线程数为2时,理论加速比为2+log2=3.但由于实际操作中硬件设备以及内存分配的影响,实验加速比达不到理论值3.实验加速比在2.6~2.7左右。 4.6 并行计算技术在实际系统中的应用 4.6.1 主要功能模块与实现方法 该飞机订票系统主要实现了对机票的一些基本信息进行存储和管理的功能。在系统中实现了对机票信息的增删改查,考虑到查询的方便性,对机票按照航班号进行排序,而此排序方法用并行快速排序运用进来。利用OpenMP的并行技术,对机票信息按顺序排列好,并分析了实验过程中的加速比。 4.6.2 实验加速比分析 实验中创建了两个线程,通过多次测试,得出实验结果:当数据量比较大时,加速比理论在1.9左右。数据量较大时体现出来的加速比更准确。由上面的理论加速比分析可知,当线程数为2时,理论加速比为2+log2=3.但由于实际操作中硬件设备以及内存分配的影响,实验加速比达不到理论值3.实验加速比在2.2~2.4左右。 5. 设计体会 虽然没有按时完成作业,但这份报告花了我好几天的时间,从开始的搭建并行计算平台到最后的程序运行成功可以说是对我的一个锻炼。每一次的遇到问题与每一次的解决问题都是一个成长。每一次遇到问题和解决问题都是一种锻炼,一种尝试,从我们上并行计算课我懂得了很多电脑硬件和软件的知识,这些可能对于我们这个专业以后都是没有机会接触的,所以我觉得选择了并行计算与多核多线程技术这门课是非常正确的。对OpenMP、MPI、WIN32API、Java、.NET的并行技术有了一定的了解。在搭建MPI并行程序这块,学习的知识尤为增加,这些都是在不断的摸索、学习中学会的。 这次的大作业虽然是对以前实验的整合,但它加深了我对并行计算的印象,也使我对并行计算知识的理解更加深刻,也使我认识到了自己很多不足之处。学习并行计算的历程不会因为完成本次大作业而停止,我们是为了用知识武装大脑而学习,通过学习充实自己的生活,要努力学习,争取以后能够完成规模更大的程序。
"高性能并行计算"课程讲义 第一部分并行计算基础 第一章预备知识 1.1 并行计算的目标和内容. . . . . . . . . . . . . . . . . . 5 1.2 并行计算机发展历程. . . . . . . . . . . . . . . . . . . 6 1.2.1 计算机系统发展简史. . . . . . . . . . . . . . . . . . 6 1.2.2 并行计算机发展简述. . . . . . . . . . . . . . . . . . 7 1.3 目前世界高性能计算机的状况. . . . . . . . . . . . . . . 9 1.4 可扩展的并行计算机体系结构. . . . . . . . . . . . . . . 11 1.4.1 对称多处理机系统. . . . . . . . . . . . . . . . . . . 11 1.4.2 分布共享存储处理机系统. . . . . . . . . . . . . . . . 13 1.4.3 大规模并行计算机系统. . . . . . . . . . . . . . . . . 14 1.4.4 机群系统. . . . . . . . . . . . . . . . . . . . . . . 15 1.5 国内外超级计算中心状况. . . . . . . . . . . . . . . . . 16 1.5.1 美国超级计算中心简介. . . . . . . . . . . . . . . . . 16 1.5.2 中国大陆超级计算中心简介. . . . . . . . . . . . . . . 17 第二章基础并行算法 2.1 并行计算基本概念. . . . . . . . . . . . . . . . . . . . 21 2.2 并行算法设计基本原则. . . . . . . . . . . . . . . . . . 22 2.3 区域分解方法. . . . . . . . . . . . . . . . . . . . . . 23 2.4 功能分解方法. . . . . . . . . . . . . . . . . . . . . . 24 2.5 流水线技术. . . . . . . . . . . . . . . . . . . . . . . 25 2.6 分而治之方法. . . . . . . . . . . . . . . . . . . . . . 27 2.7 同步并行算法. . . . . . . . . . . . . . . . . . . . . . 27 2.8 异步并行算法. . . . . . . . . . . . . . . . . . . . . . 28 2.9 作业. . . . . . . . . . . . . . . . . . . . . . . . . . 28 第二部分并行算法设计与实现 第三章矩阵并行计算 3.1 并行矩阵乘法. . . . . . . . . . . . . . . . . . . . . . 32 3.1.1 串行矩阵乘法. . . . . . . . . . . . . . . . . . . . . 32 3.1.2 行列划分算法. . . . . . . . . . . . . . . . . . . . . 33 3.1.3 行行划分算法. . . . . . . . . . . . . . . . . . . . . 33 3.1.4 列列划分算法. . . . . . . . . . . . . . . . . . . . . 34 3.1.5 列行划分算法. . . . . . . . . . . . . . . . . . . . . 35 3.1.6 Cannon 算法. . . . . . . . . . . . . . . . . . . . . .35 3.2 线性代数方程组并行求解方法. . . . . . . . . . . . . . . 36 3.2.1 分布式系统的并行LU 分解算法. . . . . . . . . . . . . .37 3.2.2 三角方程组的并行解法. . . . . . . . . . . . . . . . . 38 3.3 对称正定线性方程组的并行解法. . . . . . . . . . . . . . 41 3.3.1 Cholesky 分解列格式的并行计算. . . . . . . . . . . . .41 3.3.2 双曲变换Cholesky 分解. . . . . . . . . . . . . . . . .42 3.3.3 修正的双曲变换Cholesky 分解. . . . . . . . . . . . . .44 3.4 三对角方程组的并行解法. . . . . . . . . . . . . . . . ..46 3.5 经典迭代算法的并行化. . . . . . . . . . . . . . . . . . 47 3.5.1 Jacobi 迭代法. . . . . . . . . . . . . . . . . . . . .47 3.5.2 Gauss-Seidel 迭代法. . . . . . . . . . . . . . . . . .48 3.6 异步并行迭代法. . . . . . . . . . . . . . . . . . . . . 49 3.6.1 异步并行迭代法基础. . . . . . . . . . . . . . . . . . 49 3.6.2 线性迭代的一般收敛性结果. . . . . . . . . . . . . . . 50 3.7 代数特征值问题的并行求解. . . . . . . . . . . . . . . . 51 3.7.1 对称三对角矩阵特征值问题. . . . . . . . . . . . . . . 51 3.7.2 Householder 变换. . . . . . . . . . . . . . . . . . . 52 3.7.3 化对称矩阵为三对角矩阵. . . . . . . . . . . . . . . . 53 3.8 作业. . . . . . . . . . . . . . . . . . . . . . . . . . 53 第三部分并行实现 第四章并行程序设计 4.1 并行编程模式的主要类型. . . . . . . . . . . . . . . . . 57 4.2 并行程序的基本特点. . . . . . . . . . . . . . . . . . . 57 4.3 并行程序的实现技术. . . . . . . . . . . . . . . . . . . 57 第五章消息传递编程接口MPI 5.1 MPI 简介. . . . . . . . . . . . . . . . . . . . . . . . 59 5.2 MPI 程序实例. . . . . . . . . . . . . . . . . . . . . . 59 第六章MPI 并行环境管理函数. . . . . . . . . . . . . . . . . 63 第七章MPI 进程控制函数 7.1 MPI 进程组操作函数. . . . . . . . . . . . . . . . . . . 65 7.2 MPI 通信子操作. . . . . . . . . . . . . . . . . . . . . 68 第八章MPI 点到点通信函数 8.1 阻塞式通信函数. . . . . . . . . . . . . . . . . . . . . 71 8.2 非阻塞式通信函数. . . . . . . . . . . . . . . . . . . . 77 8.3 特殊的点到点通信函数. . . . . . . . . . . . . . . . . . 82 8.4 MPI 的通信模式. . . . . . . . . . . . . . . . . . . . . 84 第九章MPI 用户自定义的数据类型与打包 9.1 用户定义的数据类型. . . . . . . . . . . . . . . . . . . 87 9.2 MPI 的数据打包与拆包. . . . . . . . . . . . . . . . . . 93 第十章MPI 聚合通信 10.1 障碍同步. . . . . . . . . . . . . . . . . . . . . . . .97 10.2 单点与多点通信函数. . . . . . . . . . . . . . . . . .. 99 10.3 多点与多点通信函数. . . . . . . . . . . . . . . . . . .103 第十一章MPI全局归约操作. . . . . . . . . . . . . . . . . . 107 第十二章HPL程序实例剖析. . . . . . . . . . . . . . . . . . 117 参考文献. . . . . . . . . . . . . . . . . . . . . . . . . .119 附录一并行程序开发工具与高性能程序库. . . . . . . . . . . .121 A.1 BLAS、LAPACK、ScaLAPACK .. . . . . . . . . . . . . . . .121 A.2 FFTW . . . . . . . . . . . . . . . . . . . . . . . . . .121 A.3 PETSc . . . . . . . . . . . . . . . . . . . . . . . . . 121 附录二MPI函数reference. . . . . . . . . . . . . . . . . . . 123 索引. . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧