高性能计算论课件第三章PPT.ppt

高性能计算论课件第三章PPT.ppt

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

其中MPI_Reduce函数使用MPI_MAX运算符,在所有输入参数中找出最大的local_elapsed。 * 数组a中共有n个键值,算法按对比较元素大小:a[0]与a[1]比,a[1]和a[2]比,以此类推,只要该对的顺序不对,就互相交换位置。当list_length=n时,第一次外部循环遍历后,序列中的最大值被移动到a[n -1]。第二回遍历去除最后一个元素,并把次大的元素移入a[n -2]。所以,随着list_length的减少,越来越多排好序的元素安置在数组的后部。 * MPI程序的安全性 当comm_sz是奇数时,这个机制可能是不安全的。 假定comm_sz=5。图3-13显示了事件另一种可能的顺序,实线箭头表明完整的通信,虚线箭头表示该通信正在等待完成。 MPI程序的安全性 MPI提供了自己调度通信的方法,我们把这个函数称为MPI_Sendrecv MPI程序的安全性 调用一次这个函数,它会分别执行一次阻塞式消息发送和一次消息接收,dest和source参数可以不同也可以相同。 它的有用之处在于,MPI库实现了通信调度,使程序不再挂起或崩溃。我们之前的代码很复杂,需要检查进程号是奇数还是偶数,现在可以替换为调用MPI_Sendrecv函数。 并行奇偶交换排序算法的重要内容 我们已经设计了如下所示的并行奇偶排序算法: 从安全性的角度看,可以使用MPI_Sendrecv实现消息的接收和发送: 并行奇偶交换排序算法的重要内容 计算partner的方法已知,剩下的就是确认保留哪些键值了。比如说,要保留较小的n/p个键值 方法一:对2n/p个键值进行快速排序 方法二:把两个有序的列表进行合并,一旦找到最小的n/p个键值就退出。 Merge_low函数 并行奇偶排序算法的运行时间 可以看到,如果它运行在单核机器上,它会使用排序局部键值所用的串行算法,即快速排序,而不是奇偶交换排序,后者在单核处理器上的运行时间比前者慢。 第三章作业 * 大部分并行多指令多数据流计算机,都分为分布式内存系统和共享内存系统两种。从程序员的角度看,一个分布式内存系统由网络连接的核-内存对的集合组成,与核相关联的内存只能由该核访问。 如图3-1所示。 * 一方面,从程序员的角度看,共享内存系统由核的集合组成,所有核都连接到一个全局访问的内存,且每个核可以访问内存的任意位置。如图3-2所示。 这一章将讨论如何使用消息传递来对分布式内存系统进行编程。在消息传递程序中,运行在一个核-内存对上的程序通常称为一个进程。两个进程可以通过调用函数来进行通信:一个进程调用发送函数,另一个调用接收函数。我们将使用消息传递的实现称为消息传递接口(Message-Passing Interface,MPI)。 MPI并不是一种新的语言,它定义了一个可以被C、C++和Fortran程序调用的函数库。 * 我们中大部分人的第一个程序可能都是从经典“hello,world”程序而来的 让我们用MPI来编写一个类似的“hello,world”程序。不让每个进程都简单地打印一条消息,相反,我们指派其中的一个进程负责输出,而其他进程向它发送要打印的消息。 * 对于我们的并行“hello,world”程序,我们指派0号进程为输出进程,其余进程向它发送消息。 * 首先,这是一个C语言程序, 它包含了C语言的标准头文件stdio.h和string.h,它还有一个像其他C语言程序一样的main函数。 包含了mpi.h头文件。头文件包括了MPI函数的原形、宏定义、类型定义等,它还包括了编译MPI程序所需要的全部定义与声明。 所有MPI定义的标识符都由字符串MPI_开始。下划线后的第一个字母大写,表示函数名和MPI定义的类型。MPI定义的宏和常量的所有字母都是大写的,这样可以区分什么是MPI定义的,什么是用户程序定义的。 * 调用MPI_Init是为了告知MPI系统进行所有必要的初始化设置。例如,系统可能需要为消息缓冲区分配存储空间,为进程指定进程号等。 参数argc_p和argv_p是指向参数argc和argv的指针。然而,当程序不使用这些参数时,可以只是将它们设置为NULL。就像大部分的MPI函数一样,MPI_Init返回一个int型错误码,在大部分情况下,我们忽略这些错误码。 一般而言,在程序调用MPI_Init前,不应该调用其他MPI函数;在调用MPI_Finalize后,就不应该调用MPI函数了。 * * 在第13行、第14行调用的函数可以获取关于MPI_COMM_WORLD的信息。 这两个函数中,第一个参数是一个通信子,它所属的类型是MPI为通信子定义的特殊类型:MPI_Comm。MPI_Comm_size函数在它的第二个参数里返回通信子

文档评论(0)

130****9768 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档