MPI_Barrier не працуе fproperly

У mpi.h, я спрабую выкарыстоўваць MPI_Barrier, але гэта не працуе нармальна. Вось прыклад:

int main(int argc, char **argv)
{
    MPI_Init(&argc,&argv);
    int i,j,rank,np;
    MPI_Comm_size(MPI_COMM_WORLD,&np);
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);
    for(i=0;i

выхад:

(0)
0   

(1)
0   

(2)
0   

(3)
0   
1       2       3       4       1       2       3       4       1       2       3       4
1       2       3       4   

(Выконваецца з 4 працэсарамі) Такім чынам, усе працэсары пачынаюць значэнне друку, у той жа час, нават калі ёсць перашкода. Чаму?

0

1 адказы

printf to stdout is buffered, and by default flushes the buffer at each \n. So each processor in turn prints its rank and flushes the buffer with \n, then prints 0 and flushes the buffer. Each processor then uses printf to load "1 2 3 4" into the output buffer, but doesn't flush. The flush happens the the end of the program, so all the final lines appear at once.

Каб убачыць IO, каб дадаць fflush (стандартны вывад) да бар'ера. Для поўнага кантролю над упарадкаваннем I/O, вылучыць адзін працэсар выконвае аперацыі ўводу/высновы, паколькі MPI не падае ніякіх гарантый замовы ўводу/высновы.

3
дададзена