MPI相關函式

2021-08-15 01:49:11 字數 1907 閱讀 8656

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學習 規約函式MPI Allreduce

全域性規約函式mpi allreduce 將所有的傳送資訊進行同乙個操作,所有程序均接收資訊 相當於先做mpi reduce,然後再做mpi scatter。語法規則 int mpi alleduce void input data,指向傳送訊息的記憶體塊的指標 void output data,指...

MPI函式說明及示例

mpi函式說明 1 並行初始化函式 int mpi init int argc,char argv 引數描述 argc為變數數目,argv為變數陣列,兩個引數均來自main函式的引數 2 並行結束函式 int mpi finalize 例如 hello.c include mpich2 includ...

MPI之自己實現Alltoall 函式

mpi alltoall是組內程序之間完全的訊息交換,其中每乙個程序都向其它所有的程序傳送訊息,同時,每乙個程序都從其它所有的程序接收訊息。本質上,它實現的效果就是矩陣的轉置。如果不呼叫系統的mpi alltoall 函式,只用sendrecv send 或recv 該如何實現呢?事實上,只要明白a...