MPI将一组进程定义成一个通信器.每个进程都有一个标识符range.
int MPI_Init(int argc,char * argv)
创建一个通信器,这个通信器就包含了所有的进程,默认为MPI_COMM_WORLD,很形象的定义一个MPI的共有世界。
argc表示变量的数目,argv是具体的传入参数
int MPI_Finalize()
关闭MPI的执行环境。
int MPI_Comm_rank(MPI_Comm comm, int*rank)
用来确定当前进程在本通信器里的进程号,建议主进程为0.
int MPI_Comm_size(MPI_Comm comm, int*size)
用来返回当前的通信器里有多少个进程.
同步消息传输
int MPI_Send(void*buf, int count, MPI_Datatype datatype,int dest, int tag, MPI_Comm comm)
阻塞消息发送
消息数据:
buf:所发消息的首地址
count:发送的数据的个数
datatype:发送数据的数据类型
消息信封:
dest:接受消息的进程的标识号
tag:消息的标签
comm:通信器
int MPI_Recv(void*buf, int count, MPI_Datatype datatype,int source, int tag, MPI_Comm comm, MPI_Status*status)
只要没有新的消息,这个进程就会阻塞
buf:所发消息的首地址
count:发送的数据的个数
datatype:发送数据的数据类型
消息信封:
dest:接受消息的进程的标识号
tag:消息的标签
comm:通信器
status:表示接受消息时的返回状态(MPI_SOURCE,MPI_TAG,MPI_ERROR)
int MPI_Reduce(void*sendbuf, void*recvbuf, int count,MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)
sendbuf:发送消息的首地址
recvbuf:接受消息的首地址
count:发送的数据的个数
datatype:发送数据的数据类型
op:规约操作
-MPI_MAX : 最大值
– MPI_MIN : 最小值
– MPI_SUM : 和
– MPI_PROD : 积
– MPI_LAND : 逻辑与
– MPI_BAND : 按位与
– MPI_LOR 逻辑或
– MPI_BOR : 按位或
– MPI_LXOR : 逻辑异或
– MPI_BXOR : 按位异或
root:接受消息的进程的进程号
comm:通信器
int MPI_Bcast(void*buffer, int count, MPI_Datatype datatype,int root, MPI_Comm comm)
允许从根进程广播到组中的所有其他进程。其参数与MPI_Send()函数的参数相同。