int MPI_Buffer_attach(void *buffer, int size); //申请缓冲区
int MPI_Buffer_detach(void **buffer, int *size); //释放缓冲区,阻塞操作
MPI_Ssend() //同步通信,必须等待接受操作开始执行后才能返回。比如,分别给进程1和2发送数据,而接受的代码顺序是先接收2,再接收1,那么就会死锁。
MPI_Rsend() //就绪通信,只有接收进程的接收操作已经启动时,发送进程才能启动发送操作
MPI_WAIT //一直等到与该非阻塞通信对象相应的非阻塞通信完成后才返回,同时释放该非阻塞通信对象
MPI_TEST //若调用时,该非阻塞通信已经结束,则它和MPI_WAIT功能相同(完成标志flag=true)。若未结束,则也不必等待
// 该非阻塞通信的完成,可以直接返回,但是完成标志flag=false,也不释放相应的非阻塞通信对象
//重复非阻塞通信,适用于循环结构内的通信调用
MPI_Send_init(&matrix[1][0], N, MPI_FLOAT, up_proc_id, tag1, MPI_COMM_WORLD, &request[0]);
MPI_Recv_init(&matrix[0][0], N, MPI_FLOAT, up_proc_id, tag2, MPI_COMM_WORLD, &request[1]);
MPI_Startall(2, &request[0]);
MPI_Start(&request[0]);
//以上都是
MPI_Get_count(MPI_Status* status, MPI_Datatype datatype, int* count) //返回count
MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status* status) //再未收到消息前得到消息的一些信息。返回status
MPI_Barrier(MPI_Comm communicator) //设置屏障,同步作用
MPI_Bcast(void* data, int count, MPI_Datatype datatype, int root, MPI_Comm communicator)
MPI_Scatter(void* send_data, int send_count, MPI_Datatype send_datatype, void* recv_data,
int recv_count, MPI_Datatype recv_datatype, int root, MPI_Comm communicator) //send_count表示发给每个进程的消息的数量
MPI_Gather(void* send_data, int send_count, MPI_Datatype send_datatype, void* recv_data, int recv_count,
MPI_Datatype recv_datatype, int root, MPI_Comm communicator) //recv_count表示从每个进程接收到的消息的数量
MPI_Allgather(void* send_data, int send_count, MPI_Datatype send_datatype, void* recv_data, int recv_count,
MPI_Datatype recv_datatype, MPI_Comm communicator) //MPI_Gather + MPI_Bcast
MPI_Reduce(void* send_data, void* recv_data, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm communicator)
MPI_REQUEST_FREE
MPI相关函数
最新推荐文章于 2021-01-19 10:04:37 发布