简介&参考

MPI编程入门详解

MPI 教程介绍

MPI 进行分布式内存编程

【并行计算】用MPI进行分布式内存编程(二)

常用集合通信函数:

// 归约:从每个进程收集数据到一个进程的单个值
int MPI_Reduce (void *sendbuf, 
	void *recvbuf, 
	int count,
	MPI_Datatype datatype, 
	MPI_Op op, // 操作符:MPI_MAX, MPI_SUM...
	int root,
	MPI_Comm comm)
// 先归约得到值然后分发结果到每一个进程:
int MPI_Allreduce (void *sendbuf, 
	void *recvbuf, 
	int count,
	MPI_Datatype datatype, 
	MPI_Op op,
	MPI_Comm comm)
// 广播:将相同数据分发到各个进程,内存同步
int MPI_Bcast (void *buffer, 
	int count,
	MPI_Datatype datatype, 
	int root,
	MPI_Comm comm)
// 散射相同长度的数据:
int MPI_Scatter (void *sendbuf, 
	int sendcnt,  // 指的是单个数据的长度,不是发多少个线程
	MPI_Datatype sendtype, 
	void *recvbuf,
	int recvcnt, 
	MPI_Datatype recvtype,
	int root, 
	MPI_Comm comm)
// 散射不同长度数据
// 与MPI_Scatter类似,但允许sendbuf中每个数据块的长度不同并且可以按任意的顺序排放。
// sendbuf、sendtype、sendcnts和displs仅对根进程有意义。
// 数组sendcnts和displs的元素个数等于comm中的进程数,
// 它们分别给出发送给每个进程的数据长度和位移,均以sendtype为单位。
int MPI_Scatterv (void *sendbuf, 
	int *sendcnts,
	int *displs, 
	MPI_Datatype sendtype,
	void *recvbuf, 
	int recvcnt,
	MPI_Datatype recvtype, 
	int root,
	MPI_Comm comm)
// 数据聚焦:收集相同长度的数据块。
// 以root为根进程,所有进程(包括根进程自己) 将sendbuf中的数据块发送给根进程,
// 根进程将这些数据块按进程号的顺序依次放到recvbuf中。
int MPI_Gather (void *sendbuf, 
	int sendcnt,
	MPI_Datatype sendtype, 
	void *recvbuf,
	int recvcnt, 
	MPI_Datatype recvtype,
	int root, 
	MPI_Comm comm)