Enquanto cada recebedor não tem o valor recebido continua esperando nessa instrução de broadcast.
Quais são os parâmetros que devem ser passados ?
Cabeçalho:
int MPI_Bcast ( void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm )
Parâmetros:
buffer: início do endereço do dado a ser passado
count: número de elementos passados (tamanho do vetor ou 1 quando não se tem um vetor)
datatype: tipo de dados (MPI_INT, MPI_CHAR ...)
root: número inteiro do processo que irá ser o enviador (a raiz)
comm: grupo de comunicação
Vamos ao código:
//Autor: Filipe Areias Névola
//Ano: 2009
//Programa: MPI usando Bcast
//Licensa: Você pode usar e alterar, mas deve manter o Autor
#include <mpi.h> //Biblioteca do mpi
#include <stdio.h> //Biblioteca padrão de entrada e saída
#include <string.h> //Biblioteca para manipulação de char*
//defines usados para facilitar a escrita do código
#define GROUP MPI_COMM_WORLD //define para representar o GRUPO de comunicação
#define Init(x,y) MPI_Init(x,y)
#define Finalize() MPI_Finalize()
#define Size(x) MPI_Comm_size(GROUP,x)
#define Rank(x) MPI_Comm_rank(GROUP,x)
#define Send(x, tam, tipo, destino, flag) MPI_Send(x, tam, tipo, destino, flag, GROUP)
#define Recv(onde, tam, tipo, origem, flag) MPI_Recv(onde, tam, tipo, origem, flag, GROUP, &status)
//Broadcast envia uma informação para todos e todos recebem essa informação na variável enviada
//este define serve apenas para char* pois já pega o tamanho da mensagem
#define Bcast(m, tipo, emissor) MPI_Bcast(&m, strlen(m)+1, tipo, emissor, GROUP)
#define BcastComum(m, tamanho, tipo, emissor) MPI_Bcast(&m, tamanho, tipo, emissor, GROUP)
//Parte principal do programa
int main(int argc, char *argv[]){
//mensagem a ser enviada e recebida
char msg[20];
//número do proc e quantidade de proc
int rank,size;
//inicializa o paralelismo
Init(&argc,&argv);
//pega o número de proc
Size(&size);
//pega o número do proc atual
Rank(&rank);
//o proc 0 copia "BOM DIA" para sua msg
if(rank==0)
strcpy(msg,"BOM DIA");
//o proc 0 envia a mensagem para todos
//e todos menos o proc 0 recebe a mensagem
Bcast(msg,MPI_CHAR,0);
//se não é o proc 0 então imprime o que recebeu
if(rank!=0)
printf("Processador %d recebeu a mensagem %s\n", rank, msg);
//finaliza o paralelismo
Finalize();
return 0;
}
Alguma dúvida ? Mande por comentário que responderei assim que possível!