MPI聚合通訊之MPI Gather函式

2021-06-22 05:13:54 字數 1459 閱讀 4537

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 那麼這個時候 傳送忽略三次握手 還有緩衝操作 都可以忽略掉 直接進行傳送 這樣提高了通訊的效率並且優化更加...