[工学]MPI概述.pptVIP

  • 6
  • 0
  • 约1.01万字
  • 约 39页
  • 2018-02-28 发布于浙江
  • 举报
[工学]MPI概述

…………在前面的例子里,发送的消息是简单的MPI_INT,but实际:不连续或不同类型的数据。 对于不同数据类型的数据和非连续的数据来说,MPI一种解决方案就是,将这些数据打包发送,然后在接收端再解包。这就需要用到MPI_PACKED。 * int MPI_Pack(void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, int outcount, int *position, MPI_Comm comm) Input Parameters inbuf input buffer start (choice) incount number of input data items (non-negative integer) datatype datatype of each input data item (handle) outcount output buffer size, in bytes (non-negative integer) comm communicator for packed message (handle) Output Parameter outbuf output buffer start (choice) Input/Output Parameter position current position in buffer, in bytes (integer) * 解决那个不连续或不同类型数据的另一种方案:新建一个数据类型的方式来将这些数据做整体发送。这种自己定义的新类型就是派生数据类型。…… 像int 处理单位 * 解决例子 * Stride:[straid],步长 * * 对于不同类型的 * 消息匹配 * 多个进程-》组。通信域=通信组 * * 2.2.1 MPI消息(数据类型) MPI的数据类型分为两种:预定义类型和派生数据类型(Derived Data Type) 预定义数据类型:MPI支持异构计算(Heterogeneous Computing),它指在不同计算机系统上运行程序,每台计算可能有不同生产厂商,不同操作系统。 派生数据类型:MPI引入派生数据类型来定义由数据类型不同且地址空间不连续的数据项组成的消息。 2 MPI 组成 2 MPI 组成 MPI提供了两个附加类型:MPI_BYTE和MPI_PACKED 。 MPI_BYTE表示一个字节,所有的计算系统中一个字节都代表8个二进制位。 MPI_PACKED预定义数据类型被用来实现传输地址空间不连续的数据项 。 2 MPI 组成 2.2.1 MPI消息(数据类型) double A[100]; MPI_Pack_size (50,MPI_DOUBLE,comm,BufferSize); TempBuffer = malloc(BufferSize); j = 2*sizeof(MPI_DOUBLE); Position = 0; for (i=0;i50;i++) MPI_Pack(A+i*j,1,MPI_DOUBLE,TempBuffer,BufferSize,Position,comm); MPI_Send(TempBuffer,Position,MPI_PACKED,destination,tag,comm); MPI_Pack_size函数来决定用于存放50个MPI_DOUBLE数据项的临时缓冲区的大小 调用malloc函数为这个临时缓冲区分配内存 for循环中将数组A的50个偶序数元素打包成一个消息并存放在临时缓冲区 2 MPI 组成 消息打包,然后发送 MPI_Pack(buf, count, dtype, packbuf, packsize, packpos, communicator) 以上为待打包消息描述 以上为打包缓冲区描述 消息接收,然后拆包 MPI_Unpack(packbuf, packsize, packpos, buf, count, dtype, communicatior 以上为拆包缓冲区描述 以上为拆包消息描述 2.2.1 MPI消息(数据类型) 派生数据类型可以用类型图来描述,这是一种通用的类型描述方法,它是一系列二元组基类型,偏移的集合,可以表示成如下格式: {基类型0,偏移0,···,基类型n-1,偏移n-1} 在派生数据类型中,基类型可以是任何MPI预定义数据类型,也可以是其它的派生数据类型,即支持数据类型的嵌套定义。 如图,阴影部分是基类型所占

文档评论(0)

1亿VIP精品文档

相关文档