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<5;j++)
            {
                printf("%d\t",j);
                if((j%10)==0)
                    printf("\n");
            }
        }
        MPI_Barrier(MPI_COMM_WORLD);
    }
    MPI_Finalize();
    return 0;
}

Шығару:

(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 (stdout) қосыңыз. I/O тапсырысын толық бақылау үшін, бір процессорды I/O орындауына арнаңыз, себебі MPI ешқандай I/O тапсырыс беру кепілдігін бермейді.

3
қосылды