DAWNING 乡 曙光 DAWNING 什么是缓冲区? 科拔计算未来 1.应用程序中说明的变量,在消息传递语句中又用作缓冲区的起始位置. 2.也可表示由系统(不同用户)创建和管理的某一存储区域,在消息传递过 程中用于暂存放消息.也被称为系统缓冲区. 3.用户可设置一定大小的存储区域,用作中间缓冲区以保留可能出现在 其应用程序中的任意消息 A A 进程P 进程Q 用户缓冲区 B Amt B 进程P 进程Q 进程P 进程Q 用户指定缓冲区 2021年系统缓冲区 MP|并行程序设计 8/217
2021年1月 MPI并行程序设计 38/217 什么是缓冲区? 1. 应用程序中说明的变量,在消息传递语句中又用作缓冲区的起始位置. 2. 也可表示由系统(不同用户)创建和管理的某一存储区域,在消息传递过 程中用于暂存放消息.也被称为系统缓冲区. 3. 用户可设置一定大小的存储区域,用作中间缓冲区以保留可能出现在 其应用程序中的任意消息. 进程P A M 进程Q B 进程P A M S 进程Q B 进程P A M T 进程Q B 系统缓冲区 用户指定缓冲区 用户缓冲区
DAWNING 乡 曙光 DAWNING 消息信封 科拔计算未来 ·MP标识一条消息的信息包含四个域: Source:发送进程隐式确定,由进程的rank值唯一标识 Destination:Send函数参数确定 Tag:Send函数参数确定,用于识别不同的消息 (O,UB),UB: MPI TAG UB>=32767 Communicato:缺省MP| COMM WORLD Group:有限N,有序/Rank∈[0,1,2,N-1 Contex: Super_tag,用于标识该通讯空间 2021年1月 MP|并行程序设计 9/217
2021年1月 MPI并行程序设计 39/217 • MPI标识一条消息的信息包含四个域: – Source: 发送进程隐式确定,由进程的rank值唯一标识 – Destination: Send函数参数确定 – Tag: Send函数参数确定,用于识别不同的消息 (0,UB),UB:MPI_TAG_UB>=32767. – Communicator: 缺省MPI_COMM_WORLD • Group:有限/N,有序/Rank [0,1,2,…N-1] • Contex:Super_tag,用于标识该通讯空间. 消息信封
DAWNING 乡 曙光 DAWNING 科拔计算未来 MPI Send(buf, count, dataty pe, dest, tag, comm) 消息数据 消息信封 MPL_Recv(buf, count, datatype, source, tag, comm, status) 消息数据 消息信封 2U21年1月 ⅣH开行程序攻计 4U/217
2021年1月 MPI并行程序设计 40/217
DAWNING 乡 曙光 DAWNING 消息匹配 科拔计算未来 接收 buffer y须至少可以容纳 count个由 datatype参数指明 类型的数据.如果接收buf太小,将导致溢出、出错 消息匹配 参数匹配dest,tag,comm/ source, tag, comm Source== MPI ANY SOURCE:接收任意处理器来的数据(任意 消息来源) Tag==MP| ANY TAG:匹配任意tag值的消息(任意tag消息) 在阻塞式消息传送中不允许 Source==Des,否则会导致 deadlock ·消息传送被限制在同一个 communicator 在send函数中必须指定唯一的接收者(Push/pu通讯机制) 2021年1月 MP|并行程序设计 41217
2021年1月 MPI并行程序设计 41/217 消息匹配 • 接收buffer必须至少可以容纳count个由datatype参数指明 类型的数据. 如果接收buf太小, 将导致溢出、出错. • 消息匹配 – 参数匹配 dest,tag,comm/ source,tag,comm – Source == MPI_ANY_SOURCE:接收任意处理器来的数据(任意 消息来源). – Tag == MPI_ANY_TAG:匹配任意tag值的消息(任意tag消息). • 在阻塞式消息传送中不允许Source==Dest,否则会导致 deadlock. • 消息传送被限制在同一个communicator. • 在send函数中必须指定唯一的接收者(Push/pull通讯机制)
DAWNING 乡 曙光 DAWNING statusi参数 科拔计算未来 当使用 MP ANY SOURCEI或/和 MP ANY TAG接收消 息时如何确定消息的来源 Source和tag值呢? 在C中, status. MPI SOURCE, status. MPI TAG 在 Fortran中, Source= status( MPI SOURCE), tag=status (MPI TAG Status还可用于返回实际接收到消息的长度 int MPI Get count (MPI Status status MPI Datatype datatype, int* count) iN status接收操作的返回值. in datat ype接收缓冲区中元素的数据类型 · OUt count接收消息中的元素个数. 2021年1月 MP|并行程序设计 42217
2021年1月 MPI并行程序设计 42/217 status参数 • 当使用MPI_ANY_SOURCE或/和MPI_ANY_TAG接收消 息时如何确定消息的来源source 和 tag值呢? –在C中,status.MPI_SOURCE, status.MPI_TAG. –在Fortran中, source=status(MPI_SOURCE), tag=status(MPI_TAG). • Status还可用于返回实际接收到消息的长度 –int MPI_Get_count(MPI_Status status, MPI_Datatype datatype,int* count) • IN status 接收操作的返回值. • IN datatype 接收缓冲区中元素的数据类型. • OUT count 接收消息中的元素个数