MPI_Barrier не працює належним чином

У 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.

Щоб побачити свій вхідний вхід у порядку, додайте fflush (stdout) перед бар'єром. Для повного контролю порядку вводу-виводу виділіть один процесор для виконання вводу-виводу, оскільки MPI не надає гарантії вводу-виводу.

3
додано