Ist MPI_Reduce blockiert (oder eine Natürliche Barriere)?

Habe ich das code-snippet unten in C++ die im Grunde berechnet die pi mit Hilfe der klassischen monte-carlo-Technik.

    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;
    }

Ich Frage mich nur, wenn der call MPI_Barrier notwendig ist. Tut MPI_Reduce stellen Sie sicher, dass der Körper der if-Anweisung nicht ausgeführt werden, bevor die Reduzierung der Vorgang komplett beendet ist ? Hoffe, ich war klar. Dank

InformationsquelleAutor Cemre | 2012-02-14
Schreibe einen Kommentar