OpenMP+MPI混合并行编程

OpenMP+MPI混合并行编程

ID:40568583

大小:783.50 KB

页数:7页

时间:2019-08-04

OpenMP+MPI混合并行编程_第1页
OpenMP+MPI混合并行编程_第2页
OpenMP+MPI混合并行编程_第3页
OpenMP+MPI混合并行编程_第4页
OpenMP+MPI混合并行编程_第5页
资源描述:

《OpenMP+MPI混合并行编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、HarbinInstituteofTechnology并行处理与体系结构实验报告实验题目:OpenMP+MPI混合并行编程院系:计算机科学与技术姓名:学号:实验日期:2011-12-25哈尔滨工业大学实验四:OpenMP+MPI混合并行编程一、实验目的1、复习前几次实验的并行机制,即OpenMP与MPI编程模式。2、掌握OpenMP与MPI混合并行编程模式。二、实验内容1、使用OpenMP+MPI混合编程并与OpenMP、MPI单独编程的比较。在OpenMp并行编程中,主要针对细粒度的循环级并行,主要是在循环中将每次循环分配给各个线程执行,主要应用在

2、一台独立的计算机上;在MPI并行编程中,采用粗粒度级别的并行,主要针对分布式计算机进行的,他将任务分配给集群中的所有电脑,来达到并行计算;OpenMp+MPI混合编程,多台机器间采用MPI分布式内存并行且每台机器上只分配一个MPI进程,而各台机器又利用OpenMP进行多线程共享内存并行。OpenMPMPI并行粒度是线程级并行进程级的并行存储方式共享存储分布式存储数据分配隐式分配显示分配编程复杂度相对简单,充分利用了共享存储体系结构的特点,避免了消息传递的开销。数据的放置策略不当可能会引发其他问题,并行化的循环粒度过小会增加系统开销等。编程模型复杂,需

3、要分析及划分应用程序问题,并将问题映射到分布式进程集合;细粒度的并行会引发大量的通信,需要解决通信延迟大和负载不平衡两个主要问题,调试MPI程序麻烦,MPI程序可靠性差,一个进程出问题,整个程序将错误。可扩展性可扩展性差,OpenMP采用共享存储,意味着它只适应于SMP、DSM机器,不适合于集群。可扩展性好,适合于各种机器。并行化支持粗粒度的并行,但主要还是针对细粒度的循环级并行。将串行程序转换为并行程序时无须对代码作大的改动。并行化改进需要大量的修改原有的串行代码。2、分析影响程序性能的主要因素。在采用OpenMP实现的并行程序中,由于程序受到计算

4、机性能的影响,不能大幅度的提高程序运行速度,采用了集群的MPI并行技术,程序被放到多台电脑上运行,多台计算机协同运行并行程序,但是,在集群中的每台计算机执行程序的过程又是一个执行串行程序的过程,因此提出的OpenMP+MPI技术,在集群内采用MPI技术,减少消息传递的次数以提高速度,在集群的每个成员上又采用OpenMP技术,节省内存的开销,这样综合了两种并行的优势,来提升并行程序的执行效率。三、实验原理OpenMP编程:使用Fork-Join的并行执行模式。开始时由一个主线程执行程序,该线程一直串行的执行,直到遇到第一个并行化制导语句后才开始并行执行

5、。含义如下:①Fork:主线程创建一队线程并行执行并行域中的代码;②Join:当各线程执行完毕后被同步或中断,最后又只有主线程在执行。MPI编程:消息传递编程模型是使用显式方式控制并行性的分布存储模型,MPI是这一模型的事实标准。MPI可移植到分布和共享存储体系结构上,而且允许静态任务调度。显式并行通常提供了一个更好的性能和可移植性。特别适用于粗粒度的并行,使用MPI实现单程序多数据(SPMD)并行模型时,每个进程只能读写本地内存中的数据,对远程数据的访问则通过进程间显式的消息传递(库函数调用)来完成的。MPI包含了多种优化的组通信库函数,可供编程人

6、员选择使用最佳的通信模式。OpenMP+MPI编程:在OpenMP并行区域内不要通信,这里通信指的是不同节点内的线程间的通信,在节点中多线程公用的代码间的通信会急剧增加带宽竞争;在单个线程中也尽量不要通信,因为通信一般都蕴含着同步操作,这会使得性能大大下降。如果必须在线程中通信,也应把通信次数尽可能的减少,或者把需要进行消息传递的代码改写到线程的外面进行通信;线程中的同步次数也是影响性能的一个重要因素,应该慎重使用同步操作和那些蕴含同步的操作,避免节点内不必要的数据拷贝;四、实验结果和分析1、一个简单的OpenMP+MPI程序“test.c”#inc

7、lude#include#includeintmain(intargc,char**argv){intntask,mytask;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&ntask);MPI_Comm_rank(MPI_COMM_WORLD,&mytask);#pragmaompparallel{printf("Thread%dontask%d",omp_get_thread_num(),mytask();}MPI_Finalize();r

8、eturn0;}在程序中,首先进行了一些关于MPI的一些初始化和设置:MPI_Init、MPI_Comm_s

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。