1.点对点通信(point-to-point)
定义:给定属于同一通信器内的两个进程,其中一个发送消息,一个接收消息;
MPI 系统定义的所有通信方式均建立在点对点通信之上;
四种模式:标准模式、缓存区模式、同步模式、就绪模式;
2.标准模式点对点通信
进程可以随意地发送(接收)消息,与是否存在匹配的消息接收(发送)进程无关;
两类:
阻塞式:消息发送函数返回,用户可以对消息缓存区进行处理,不会影响已发送的消息数据;接受函数返回,用户可以使用接受到的消息数据;
非阻塞式:发送和接受函数返回后,必须调用另一类函数来确保它们的正确完成;
消息数据:
消息数据: A=100
3.点对点通信函数举例
阻塞式标准消息发送函数
MPI_Send(buf,count,datatype,dest,tag,comm,ierr)
real *8
integer
c-----发送50 个双精度数“a(5,20) : a(54,20)” 到2 号进程
call MPI_Send( a (5,20),50,MPI_DOUBLE_PRECISION,2,
c-----发送20 个整型数“b(20,40) : b(39,40)” 到5 号进程
call MPI_Send( b (20,40),20,MPI_DOUBLE_PRECISION,5,
阻塞式标准消息接收函数
MPI_Recv(buf,count,datatype,dest,tag,comm,status, ierr)
real *8
integer
c-----从2 号进程接收50 个双精度数到“a(5,20) : a(54,20)”
call MPI_Recv( a (5,20),50,MPI_DOUBLE_PRECISION,2,
c-----从5 号进程接收20 个整型数到“b(20,40) : b(39,40)”
call MPI_Recv( b (20,40),20,MPI_DOUBLE_PRECISION,5, 99999,MPI_COMM_WORLD,status,ierr )
4.聚合通信(Collective Communication)
定义:属于同一通信器的所有 MPI 进程均必须参与的通信操作;
参与方式:调用同一聚合通信函数;
函数类型:
同步通信函数:所有进程在某个程序点上同步;
全局通信函数:
广播: MPI_Bcast(buf,count,dtype,root,comm,ierr)
root
other
收集:MPI_Gather(bufs,bufr,count,dtype,root,comm,ierr)
all 发送大小一致的数据块
root 接受并按序号连续存放
全收集:MPI_Allgather()
all 发送
all接受
索引收集:MPI_Gatherv()
all 发送大小不等的数据块
root 接受并按索引间断存放
索引全收集:MPI_Allgatherv()
all 发送大小不等的数据块
All接受并按索引间断存放
分散:MPI_Scatter(bufs,bufr,count,dtype,root,comm,ierr)
root 发送连续的大小一致数据块
All
索引分散: MPI_Scatterv()
root 发送间断的大小不一致数据块
All
全交换:
All 发送大小一致数据块到各进程
All接受大小一致数据块并按序号连续存放
索引全交换: MPI_Alltoallv()
全局规约(global reduction)函数:
规约:
规约操作类型 op :
全规约: MPI_Allreduce(),
规约分散: MPI_Reduce_scatter(),将规约结果分散到各进程;
并行前缀计算:MPI_Scan()