On Fri, Dec 4, 2009 at 10:29, Eugene Loh <eugene....@sun.com> wrote: > Nicolas Bock wrote: > > On Fri, Dec 4, 2009 at 10:10, Eugene Loh <eugene....@sun.com> wrote: > >> Yield helped, but not as effectively as one might have imagined. >> > > Yes, that's the impression I get as well, the master process might be > yielding, but it doesn't appear to be a lot. Maybe I should do this > differently to avoid this CPU usage in master. All I really want is to > execute another process somewhere on a free node in my MPI universe, wait > for it to be done and go on. From my limited understanding of MPI, > MPI_Comm_spawn() and MPI_Barrier() seemed just like what I needed, but as I > said, maybe there are other ways to do this. > > I think you might observe a world of difference if the master issued some > non-blocking call and then intermixed MPI_Test calls with sleep calls. You > should see *much* more subservient behavior. As I remember, putting such > passivity into OMPI is on somebody's to-do list, but just not very high. >
Hi Eugene, could you give me more details? I can't figure out how to do this. I could see that one way to implement what you are describing is: in slave.c: MPI_Send() to rank 0 in master.c MPI_IRecv() from the spawned processes while (1) { MPI_Test(); } I can't figure out how to find the ranks that MPI_Comm_spawn() used. What's the source argument in MPI_IRecv() supposed to be? Thanks, nick