文档详情

MPI分布内存并行程序开发.ppt

发布:2017-02-15约1.38万字共63页下载文档
文本预览下载声明
MPI分布内存并行 程序开发 阻塞通信正确返回后,其后果是: - 该调用要求的通信操作已正确完成 - 该调用的缓冲区可用 消息信封要匹配 接收到的消息是最早发送的 非阻塞通信主要用于计算和通信的重叠,从而提高整个程序执行的效率。 请求(request) 这个参数用于非阻塞发送和非阻塞接收操作。由于非阻塞操作返回后,数据可能继续存在缓冲中,由此需要一种机制来检测资源是否可用。根据该变量调用其它函数完成消息的实际发送和接收。在C程序中,这个参数是指向MPI_Request结构的指针。 通讯模式(4种): 标准通信模式(MPI_SEND) 缓存通信模式(MPI_BSEND) 同步通信模式(MPI_SSEND) 就绪通信模式(MPI_RSEND) 标准(standard)模式:对数据的缓冲由具体MPI实现决定,与用户程序无关; 发送操作的正确返回而不要求接收操作收到发送的数据。 例3、死锁的发送接收序列 CALL MPI_COMM_RANK(comm,rank,ierr) IF (rank.EQ.0) THEN CALL MPI_RECV(recvbuf,count,MPI_REAL,1, tag,comm,status,ierr) CALL MPI_SEND(sendbuf,count,MPI_REAL,1, tag,comm,ierr) ELSE IF (rank.EQ.1) CALL MPI_RECV(recvbuf,count,MPI_REAL,0, tag,comm,status,ierr) CALL MPI_SEND(sendbuf,count,MPI_REAL,0, tag,comm,ierr) ENDIF 例4、不安全的发送接收序列 CALL MPI_COMM_RANK(comm,rank,ierr) IF (rank.EQ.0) THEN CALL MPI_SEND(sendbuf,count,MPI_REAL,1, tag,comm,ierr) CALL MPI_RECV(recvbuf,count,MPI_REAL,1, tag,comm,status,ierr) ELSE IF (rank.EQ.1) CALL MPI_SEND(sendbuf,count,MPI_REAL,0, tag,comm,ierr) CALL MPI_RECV(recvbuf,count,MPI_REAL,0, tag,comm,status,ierr) ENDIF 程序5、安全的发送接收序列 CALL MPI_COMM_RANK(comm,rank,ierr) IF (rank.EQ.0) THEN CALL MPI_SEND(sendbuf,count,MPI_REAL,1, tag,comm,ierr) CALL MPI_RECV(recvbuf,count,MPI_REAL,1, tag,comm,status,ierr) ELSE IF (rank.EQ.1) CALL MPI_RECV(recvbuf,count,MPI_REAL,0, tag,comm,status,ierr) CALL MPI_SEND(sendbuf,count,MPI_REAL,0, tag,comm,ierr) ENDIF 例子6 clock=(myrank+1)%groupsize; anticlock=(myrank+groupsize-1)%groupsize; MPI_Send(buf1,LENGTH,MPI_CHAR,clock,tag,MPI_COMM_WORLD); MPI_Recv(buf2,LENGTH,MPI_CHAR,anticloc
显示全部
相似文档