中科院计算所谭光明老师课件C02-高级MPI编程技术幻灯片.ppt

中科院计算所谭光明老师课件C02-高级MPI编程技术幻灯片.ppt

  1. 1、本文档共188页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MPI全发散收集函数 每个进程散发自己的一个数据块, 并且收集拼装所有进程散发过来的数据块。称该操作为数据的“全散发收集”。 它既可以被认为是数据全收集的扩展, 也可以被认为是数据散发的扩展 MPI_Alltoall函数详解 MPI_Alltoall是组内进程之间完全的消息交换,每一个进程都向其它所有的进程发送消息,同时每一个进程都从其它所有的进程接收消息。 MPI_Allgather每个进程散发一个相同的消息给所有的进程 MPI_Alltoall散发给不同进程的消息是不同的。因此它的发送缓冲区也是一个数组 调用MPI_Alltoall相当于每个进程依次将它的发送缓冲区的第i块数据发送给第i个进程,同时每个进程又都依次从第j个进程接收数据放到各自接收缓冲区的第j块数据区的位置。 MPI_Alltoall函数详解 MPI_Alltoall的每个进程可以向每个接收者发送数目不同的数据,第i个进程发送的第j块数据将被第j个进程接收,并存放在其接收消息缓冲区recvbuf的第i块。 每个进程的sendcount和sendtype的类型必须和所有其他进程的recvcount和recvtype相同这就意谓着在每个进程和根进程之间发送的数据量必须和接收的数据量相等。 P0 P1 P2 P3 A00 A01 A02 A03 A10 A11 A12 A13 A20 A21 A22 A23 A30 A31 A32 A33 A00 A10 A20 A30 A01 A11 A21 A31 A02 A12 A22 A32 A03 A13 A23 A33 P0 P1 P2 P3 MPI_Alltoall P0 P1 P2 P0 P1 P2 P0 P1 P2 P0 P1 P2 P0 P1 P2 MPI_Alltoall函数 int MPI_Alltoall( void* sendbuf /* in */, int sendcount /* in */, MPI_Datatype sendtype /* in */, void* recvbuf /*out*/, int recvcount /* in */, MPI_Datatype recvtype /* in */, MPI_Comm comm /* in */) MPI_Alltoallv函数 int MPI_Alltoallv( void* sendbuf /* in */, int sendcounts[] /* in */, int sdispls[] /* in */, MPI_Datatype sendtype /* in */, void* recvbuf /*out*/, int recvcounts[] /* in */, int rdispls[] /* in */, MPI_Datatype recvtype /* in */, MPI_Comm comm /* in */) MPI_Alltoallv函数详解 正如MPI_Allgatherv 和MPI_Allgather 的关系一样MPI_Alltoallv在MPI_Alltoall的基础上进一步增加了灵活性。它可以由sdispls指定待发送数据的位置,在接收方则由rdispls指定接收的数据存放在缓冲区的偏移量 所有参数对每个进程都是有意义的,并且所有进程中的comm值必须一致 MPI_Alltoall和MPI_Alltoallv可以实现n次独立的点对点通信但也有限制:1)所有数据必须是同一类型;2)所有的消息必须按顺序进行散发和收集 MPI_Alltoall vs MPI_Alltoallv 全局归约MPI_Reduce int MPI_Reduce ( void* openand /* in */, void* result /* in */, int count /* in */, MPI_Datatype datatype /* in */, MPI_Op operator /*out*/, int root /* in */, MPI_Comm comm /* in */) openand 操作数(发送缓冲区)起始地址 result 接收缓冲区(结果)的地址 count 发送缓冲区数据个数 operator 归约操作符 组归约函数MPI_Allreduce int MPI_Reduce ( void* openand /* in */,

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档