Ok, vamos fornecer um exemplo de uso da transmissão MPI em um aplicativo de computação paralela. Escolherei um cenário relativamente simples:distribuindo as condições iniciais para uma simulação numérica para todos os processos.
Cenário: Imagine que estamos executando uma simulação paralela (por exemplo, modelando o crescimento da população). Temos um parâmetro global `Initial_population` que precisa ser conhecido por * todos os processos * no comunicador MPI. Somente o processo raiz (processo com a classificação 0) conhece inicialmente esse valor. Usaremos `mpi_bcast` para distribuir` Initial_population` a todos os processos.
Exemplo
Código (C ++) `` `c ++
#include
#include
int main (int argc, char ** argv) {
int classificação, tamanho;
duplo inicial_population; // parâmetro global
Mpi_init (&argc, &argv);
Mpi_comm_rank (mpi_comm_world, &rank);
Mpi_comm_size (mpi_comm_world, &size);
// inicialize Initial_população apenas no processo raiz
if (rank ==0) {
inicial_população =1000.0; // Exemplo de valor inicial
std ::cout <<"Processo 0:População inicial =" < } outro {
inicial_população =0,0; // Outros processos inicializam para um valor padrão (não importa)
}
// Transmitir a população inicial do processo 0 para todos os processos.
Mpi_bcast (&inicial_population, 1, mpi_double, 0, mpi_comm_world);
// Agora, todos os processos têm o valor correto do Initial_population.
// executa cálculos de simulação usando os dados distribuídos
// Exemplo:
duplo crescimento_rate =0,05; // Taxa de crescimento de 5%
duplo final_population =Initial_população * (1.0 + growth_rate);
std ::cout <<"Process" <