mpi_gather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root , comm)函式宣告為sendbuf 傳送訊息緩衝區的起始位址(可變)
sendcount 傳送訊息緩衝區中的資料個數(整型)
sendtype 傳送訊息緩衝區中的資料型別(控制代碼)
recvbuf 接收訊息緩衝區的起始位址(可變,僅對於根程序)
recvcount 待接收的元素個數(整型,僅對於根程序)
recvtype 接收元素的資料型別(控制代碼,僅對於根程序)
root 接收程序的序列號(整型)
comm 通訊子(控制代碼)
int mpi_gather(void* sendbuf, int sendcount, mpi_datatype sendtype,void* recvbuf, int recvcount, mpi_datatype recvtype,
int root, mpi_comm comm)
每個程序(包括根程序)將其傳送緩衝區中的內容傳送到根程序,根程序根據傳送這些資料的程序的序列號將它們依次存放到自已的訊息緩衝區中.其結果就象乙個組中的n個程序(包括根程序在內)都執行了乙個呼叫:
mpi_send(sendbuf, sendcount, sendtype, root, ...),同時根程序執行了n次呼叫:
mpi_recv(recvbuf+i*recvcount*extent(recvtype), recvcount, recvtype, i,...),此處extent(recvtype)是呼叫函式mpi_type_extent()所返回的型別,另外一種描述就象是組中的n個程序傳送的n條訊息按照它們的序列號連線起來,根程序通過呼叫mpi_recv(recvbuf, recvcount*n, recvtype,...) 來將結果訊息接收過來.
對於所有非根程序,接收訊息緩衝區被忽略。
下面的的例子中,每個程序對乙個大小為10的陣列進行了賦值,0程序呼叫了gather()操作,並將接受到的資料列印出來。
#include "stdio.h"
#include "mpi.h"
#include "stdlib.h"
int main(int argc,char **argv)
mpi_gather(send,10,mpi_int,recv,10,mpi_int,0,mpi_comm_world);
if(rank==0)
{ for(int i=0;i
0123456
7891
2345
6789
10234
5678
910113
4567
891011
12
MPI聚合通訊之MPI Barrier函式
mpi barrier函式 用於乙個通訊子中所有程序的同步,呼叫函式時程序將處於等待狀態,直到通訊子中所有程序 都呼叫了該函式後才繼續執行。如 include stdio.h include string.h include mpi.h int main int agc,char agv 編譯執行結...
不同運營商鏈路聚合 5G聚合通訊網關原理
多卡聚合融合通訊終端產品 多卡聚合技術原理 隨著4g基站的覆蓋率上公升,運營商的網路優化調整,當今的網路環境似乎已經能讓我們舒服沉浸在虛擬世界中,但實則大多數流暢的體驗還停留在小資料量的使用中。受客觀物理環境波動和使用者行為的影響,網路狀況常出現同頻干擾 弱訊號 競爭流量干擾 忙時擁塞,以上的現象都...
MPI就緒通訊
mpi就緒通訊類似udp通訊 當我們的阻塞執行緒進行阻塞接受的時候mpi recv的時候 那麼會告訴對方我的執行緒已經在阻塞等待好接受資訊了 傳送資訊方可以毫無顧及的傳送了 mpi rsend 那麼這個時候 傳送忽略三次握手 還有緩衝操作 都可以忽略掉 直接進行傳送 這樣提高了通訊的效率並且優化更加...