¿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

Respuestas a la pregunta(6)

Su respuesta a la pregunta