网站大量收购独家精品文档,联系QQ:2885784924

OpenMP+MPI混合并行编程.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OpenMPMPI混合并行编程

Harbin Institute of Technology 并行处理与体系结构 实验报告 实验题目: OpenMP+MPI混合并行编程 院 系: 计算机科学与技术 姓 名: 学 号: 实验日期: 2011-12-25 哈尔滨工业大学 实验四:OpenMP+MPI混合并行编程 一、实验目的 1、复习前几次实验的并行机制,即OpenMP与MPI编程模式。 2、掌握OpenMP与MPI混合并行编程模式。 二、实验内容 1、使用OpenMP+MPI混合编程并与OpenMP、MPI单独编程的比较。 在OpenMp并行编程中,主要针对细粒度的循环级并行,主要是在循环中将每次循环分配给各个线程执行,主要应用在一台独立的计算机上; 在MPI并行编程中,采用粗粒度级别的并行,主要针对分布式计算机进行的,他将任务分配给集群中的所有电脑,来达到并行计算; OpenMp+MPI混合编程,多台机器间采用MPI分布式内存并行且每台机器上只分配一个MPI进程,而各台机器又利用OpenMP进行多线程共享内存并行。 OpenMP MPI 并行粒度 是线程级并行 进程级的并行 存储方式 共享存储 分布式存储 数据分配 隐式分配 显示分配 编程复杂度 相对简单,充分利用了共享存储体系结构的特点,避免了消息传递的开销。数据的放置策略不当可能会引发其他问题,并行化的循环粒度过小会增加系统开销等。 编程模型复杂,需要分析及划分应用程序问题,并将问题映射到分布式进程集合;细粒度的并行会引发大量的通信,需要解决通信延迟大和负载不平衡两个主要问题,调试MPI程序麻烦,MPI程序可靠性差,一个进程出问题,整个程序将错误。 可扩展性 可扩展性差, OpenMP采用共享存储,意味着它只适应于SMP、DSM机器,不适合于集群。 可扩展性好,适合于各种机器。 并行化 支持粗粒度的并行,但主要还是针对细粒度的循环级并行。将串行程序转换为并行程序时无须对代码作大的改动。 并行化改进需要大量的修改原有的串行代码。 2、分析影响程序性能的主要因素。 在采用OpenMP实现的并行程序中,由于程序受到计算机性能的影响,不能大幅度的提高程序运行速度,采用了集群的MPI并行技术,程序被放到多台电脑上运行,多台计算机协同运行并行程序,但是,在集群中的每台计算机执行程序的过程又是一个执行串行程序的过程,因此提出的OpenMP+MPI技术,在集群内采用MPI技术,减少消息传递的次数以提高速度,在集群的每个成员上又采用OpenMP技术,节省内存的开销,这样综合了两种并行的优势,来提升并行程序的执行效率。 三、实验原理 OpenMP编程: 使用Fork-Join的并行执行模式。开始时由一个主线程执行程序,该线程一直串行的执行,直到遇到第一个并行化制导语句后才开始并行执行。含义如下: ①Fork:主线程创建一队线程并行执行并行域中的代码; ②Join:当各线程执行完毕后被同步或中断,最后又只有主线程在执行。 MPI编程: 消息传递编程模型是使用显式方式控制并行性的分布存储模型,MPI是这一模型的事实标准。MPI可移植到分布和共享存储体系结构上,而且允许静态任务调度。显式并行通常提供了一个更好的性能和可移植性。特别适用于粗粒度的并行,使用MPI实现单程序多数据(SPMD)并行模型时,每个进程只能读写本地内存中的数据,对远程数据的访问则通过进程间显式的消息传递(库函数调用)来完成的。MPI包含了多种优化的组通信库函数,可供编程人员选择使用最佳的通信模式。 OpenMP+MPI编程: 在OpenMP并行区域内不要通信,这里通信指的是不同节点内的线程间的通信,在节点中多线程公用的代码间的通信会急剧增加带宽竞争; 在单个线程中也尽量不要通信,因为通信一般都蕴含着同步操作,这会使得性能大大下降。如果必须在线程中通信,也应把通信次数尽可能的减少,或者把需要进行消息传递的代码改写到线程的外面进行通信; 线程中的同步次数也是影响性能的一个重要因素,应该慎重使用同步操作和那些蕴含同步的操作,避免节点内不必要的数据拷贝; 四、实验结果和分析 1、一个简单的OpenMP+MPI程序“test.c” #include stdio.h #include omp.h #include mpi.h int main(int argc, char **argv) { int ntask,mytask; MPI_Init(argc,argv); MPI_Comm_size(MPI_COMM_WORLD,ntask); MPI_Com

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档