函数范式
int MPI_Bcast(
void * data_p;
int count;
MPI_Datatype datatype;
int source_proc;
MPI_Comm comm;
);
功能描述:
一个广播发生的时候,一个进程会把同样一份数据传递给一个 communicator 里的所有其他进程。根节点调用 MPI_Bcast 函数的时候,data 变量里的值会被发送到其他的节点上。当其他的节点调用 MPI_Bcast 的时候,data 变量会被赋值成从根节点接受到的数据。
实现使用了一个树形广播算法来获得比较好的网络利用率。
示例
#include <stdio.h>
#include <mpi.h>
#pragma comment(lib,"mpi.lib")
int main(int argc,char *argv[]){
int rank,nproc;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&nproc);
int data = 0;
int tag = 100;
MPI_Status status;
//主进程时把data赋值为99
if(rank == 0){
data = 99;
}
//这里就可以把data的值发出去,如果没有这个函数的话0号进程中的data就会和其他进程中的data不一样。
//MPI_Bcast(&data,1,MPI_INT,0,MPI_COMM_WORLD);
for (int i=0; i<nproc; i++){
printf("data = %d in %d process.\n",data,rank);
}
MPI_Finalize();
return 0;
}
运行结果:
#include <stdio.h>
#include <mpi.h>
#pragma comment(lib,"mpi.lib")
int main(int argc,char *argv[]){
int rank,nproc;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&nproc);
int data = 0;
int tag = 100;
MPI_Status status;
//主进程时把data赋值为99
if(rank == 0){
data = 99;
}
//这里就可以把data的值发出去,如果没有这个函数的话0号进程中的data就会和其他进程中的data不一样。
MPI_Bcast(&data,1,MPI_INT,0,MPI_COMM_WORLD);
for (int i=0; i<nproc; i++){
printf("data = %d in %d process.\n",data,rank);
}
MPI_Finalize();
return 0;
}
运行结果: