Exercicios Resolvidos
O código abaixo ilustra o uso da comunicação ponto-a-ponto e a comunicação coletiva. Nesse código, uma matriz de três cores (verde, branco, vermelho e) é distribuída para todos os processos criados no início do programa MPI. Cada processo de muda de cor e envia a sua cor alterada atributo para o processo mestre (0), que mostra na tela a cor original e a cor alterada de cada processo.
Depois de ter definido todas as variáveis necessárias que serão usadas no programa, é especificado qual será o processo de root. Esse será usado para transmitir, por broadcast, as cores para todos os outros processos e para imprimir as cores de cada um dos processos. Processo 0 foi escolhido como o processo de raiz.
Em seguida, foram geradas as três cores distintas dinamicamente que serão utilizadas nos processos, uma matriz dinâmica vetorCores é criada para armazenar as cores: branco, vermelho e verde.
N_cores = 3; colorArray = (int*) malloc(sizeof(int) * n_cores); for (k = 0; k < n_cores; k++) vetorCores[k] = k;
É necessário inicializar o MPI, acessando o rank e total de processos que estão sendo executados.
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &procID);
MPI_Comm_size(MPI_COMM_WORLD, &nproc);
Então é enviado por broadcast todo o vetor de cores para cada processo utilizando o MPI_BCAST e cada um dos processores irá definir sua cor como verde (ultimo elemento do vetor.
MPI_Bcast(vetorCores, n_cores, MPI_INT, root, MPI_COMM_WORLD); pcolor = vetorCores[2];
O rank do processador que chama o MPI_Bcast não foi especificado, pois todos os processadores no comunicador MPI_COMM_WORLD comunicador deve realizar esta chamada. Neste caso, é o processo root que envia o vetorCores, para cada um dos processos no comunicador.
Além disso, não existe nenhuma parâmetro TAG incluído na função MPI_Bcast. Esse parâmetro não é necessário porque nesta operação de comunicação coletiva, o número de elementos e o tipo de dados destes elementos são idênticas em