¿Está bloqueado MPI_Reduce (o una barrera natural)?
Tengo el fragmento de código a continuación en C ++ que básicamente calcula el pi usando la técnica clásica de Monte Carlo.
srand48((unsigned)time(0) + my_rank);
for(int i = 0 ; i < part_points; i++)
{
double x = drand48();
double y = drand48();
if( (pow(x,2)+pow(y,2)) < 1){ ++count; }
}
MPI_Reduce(&count, &total_hits, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
if(my_rank == root)
{
pi = 4*(total_hits/(double)total_points);
cout << "Calculated pi: " << pi << " in " << end_time-start_time << endl;
}
Me pregunto si la llamada MPI_Barrier es necesaria. ¿MPI_Reduce se asegura de que el cuerpo de la instrucción if no se ejecute antes de que la operación de reducción haya finalizado por completo? Espero haber sido claro. Gracia