You remind me. I now realize that it is not an matter of compiler, but an issue of C language. The printf() function in C doesn't print messages onto the standard ouput immediately, but instead stores them in a buffer. Only in some cases does the standard output work, defined in standard C: 1. The buffer is full or freshed compulsively (like use fflush()). 2. When a newline comes (\n). 3. Needs reading from buffer (such as scanf()).
Some compilers may deal with this function, and compiled by Mpich2 this code seems be well-off. Thanks very much. On Wed, Mar 30, 2011 at 3:39 PM, Pascal Deveze <pascal.dev...@bull.net>wrote: > Maybe this could solve your problem: Just add \n in the string you want to > display: > printf("Please give N= \n"); > > Of course, this will return, but the string is displayed. This run by me > without the fflush(). > > On the other hand, do you really observe that the time of the scanf () and > the time to enter "N" be insignificant ? > > Pascal > > Meilin Bai a écrit : > > So it means that MPI doesn't suit to interactive programming? Though we can > really use fflush(stdout) to get the right order, it takes too more time, > and it's said that using fflush() is not a good progrmming style in C. > > On the other hand, in Fortran language, this situation won't exist. Maybe > it is because I/O implement is a built-in part of Fortran, while in C/C++ it > is realized only through function like scanf, printf, et al? > > > > On Wed, Mar 30, 2011 at 2:38 AM, Prentice Bisbal <prent...@ias.edu> wrote: > >> On 03/29/2011 01:29 PM, Meilin Bai wrote: >> > Dear open-mpi users: >> > >> > I come across a little problem when running a MPI C program compiled >> > with Open MPI 1.4.3. A part of codes as follows: >> > >> > MPI_Init(&argc, &argv); >> > MPI_Comm_size(MPI_COMM_WORLD, &numprocs); >> > MPI_Comm_rank(MPI_COMM_WORLD, &myid); >> > MPI_Get_processor_name(processor_name, &namelen); >> > if (myid == 0) { >> > printf("Please give N= "); >> > //fflush(stdout); >> > scanf("%d", &n); >> > startwtime = MPI_Wtime(); >> > } >> > >> > If comment out the sentence of "fflush(stdout);", it doesn't print out >> > the message till I input an integer n. And if I add the fflush function >> > between them, it works as expected, though comsumming time obviously. >> > >> > However, when I compiled it with Mpich2-1.3.2p1, without fflush function >> > in the code, it works correctly. >> > >> > Can anyone know what the matter is. >> > >> >> The Open MPI Developers (Jeff, Ralph, etc) can confirm this: >> >> The MPI standard doesn't have a lot of strict requirements for I/O >> behavior like this, so implementations are allowed to buffer I/O if they >> want. There is nothing wrong with requiring fflush(stdout) in order to >> get the behavior you want. In fact, if you check some text books on MPI >> programming, I'm pretty sure they recommend using fflush to minimize >> this problem. >> >> MPICH behaves differently because its developers made different design >> choices. >> >> Neither behavior is "wrong". >> >> -- >> Prentice >> _______________________________________________ >> users mailing list >> us...@open-mpi.org >> http://www.open-mpi.org/mailman/listinfo.cgi/users >> > > > > -- > Meilin Bai > > ------------------------------ > > _______________________________________________ > users mailing > listusers@open-mpi.orghttp://www.open-mpi.org/mailman/listinfo.cgi/users > > > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users > -- Meilin Bai School of Electronic Engineering and Computer Science, Peking University Beijing 100871, China E-Mail: meilin....@gmail.com mei...@pku.edu.cn MSN: meilin....@hotmail.com Cellular: +86-1342-619-8430