Re: [O-MPI devel] MPI question
Guys I'll take care of that. When I was working on the examples for the tutorial here at Euro PVM I notice a similar problem with MPI_Waitsome. george. On Sun, 18 Sep 2005, Jeff Squyres wrote: > Yes -- Tim, can you check? Sounds like something in the request > progress is not occurring correctly. > > Thanks! > > > On Sep 18, 2005, at 5:59 PM, Greg Watson wrote: > > > Jeff, > > > > Yes, count is 2, but completed returns 1 on the first call and -32766 > > on the second call. Sounds like this may be a bug? > > > > Greg > > > > On Sep 17, 2005, at 8:11 AM, Jeff Squyres wrote: > > > >> (composing this in an airport on Saturday; may not actually be sent > >> until Monday or so) > >> > >> -32766 is Open MPI's value for MPI_UNDEFINED. This is what is > >> returned > >> when there are no active requests in the array that is passed to > >> MPI_TESTSOME (see MPI-1.1:. > >> > >> Just to verify that this behavior isn't a bug, can you confirm some > >> things: > >> > >> - is count > 1? > >> > >> - if more than one request finished in that single call to > >> MPI_TESTSOME > >> where completed was returned with a value of 1 (e.g., multiple > >> requests > >> in your array turned into MPI_REQUEST_NULL), then this is a bug -- > >> i.e., completed should return an accurate value. > >> > >> > >> > >> On Sep 16, 2005, at 8:45 PM, Greg Watson wrote: > >> > >> > >>> Just for a change, I don't have a build problem! > >>> > >>> However, I have a question about the MPI_Testsome() call. I'm using > >>> MPI_Testsome() to check the completion status of a number of > >>> outstanding ISend() requests. I'm doing something like this: > >>> > >>> int outstanding; > >>> > >>> main() > >>> { > >>> tids = (int *)malloc(sizeof(int) * count); > >>> stats = (MPI_Status *)malloc(sizeof(MPI_Status) * count); > >>> reqs = (MPI_Request *) malloc(sizeof(MPI_Request) * count) > >>> > >>> do_sends(); > >>> > >>> outstanding = count; > >>> > >>> while (outstanding > 0) > >>> check_completed(); > >>> } > >>> > >>> do_sends() > >>> { > >>> for (i = 0; i < count; i++) > >>> MPI_ISend(buf, len, MPI_CHAR, i, 0, MPI_COMM_WORLD, &reqs > >>> [i]); > >>> } > >>> > >>> check_completed() > >>> { > >>> int completed; > >>> > >>> if (MPI_Testsome(count, reqs, &completed, tids, stats) != > >>> MPI_SUCCESS) { > >>> printf("error in testsome\n"); > >>> exit(1); > >>> } > >>> outstanding -= completed; > >>> } > >>> > >>> The thing is, MPI_Testsome() returns with completed = 1 the first > >>> time I call it, then completed = -32766 the second time I call it. It > >>> always returns MPI_SUCCESS though. > >>> > >>> Does anyone know what's going on? Am I doing something dumb? > >>> > >>> Thanks, > >>> > >>> Greg > >>> ___ > >>> devel mailing list > >>> de...@open-mpi.org > >>> http://www.open-mpi.org/mailman/listinfo.cgi/devel > >>> > >>> > >> > >> -- > >> {+} Jeff Squyres > >> {+} The Open MPI Project > >> {+} http://www.open-mpi.org/ > >> > >> ___ > >> devel mailing list > >> de...@open-mpi.org > >> http://www.open-mpi.org/mailman/listinfo.cgi/devel > >> > > > > ___ > > devel mailing list > > de...@open-mpi.org > > http://www.open-mpi.org/mailman/listinfo.cgi/devel > > > > "We must accept finite disappointment, but we must never lose infinite hope." Martin Luther King
Re: [O-MPI devel] MPI question
MPI_Testsome return MPI_UNDEFINED only when in the set of requests there are no more active requests. Basically at this point the array of requests (in your example) should contain only MPI_REQUEST_NULL. I check the different possibilities inside, and I'm pretty confident that we are correct from the MPI standard point of view. I run your test example and the behaviour was correct. Moreover, it never miss one request. Can you forward me your exact example to see what was wrong inside ? Thanks, george. On Mon, 19 Sep 2005, George Bosilca wrote: > Guys I'll take care of that. When I was working on the examples for the > tutorial here at Euro PVM I notice a similar problem with MPI_Waitsome. > > george. > > On Sun, 18 Sep 2005, Jeff Squyres wrote: > > > Yes -- Tim, can you check? Sounds like something in the request > > progress is not occurring correctly. > > > > Thanks! > > > > > > On Sep 18, 2005, at 5:59 PM, Greg Watson wrote: > > > > > Jeff, > > > > > > Yes, count is 2, but completed returns 1 on the first call and -32766 > > > on the second call. Sounds like this may be a bug? > > > > > > Greg > > > > > > On Sep 17, 2005, at 8:11 AM, Jeff Squyres wrote: > > > > > >> (composing this in an airport on Saturday; may not actually be sent > > >> until Monday or so) > > >> > > >> -32766 is Open MPI's value for MPI_UNDEFINED. This is what is > > >> returned > > >> when there are no active requests in the array that is passed to > > >> MPI_TESTSOME (see MPI-1.1:. > > >> > > >> Just to verify that this behavior isn't a bug, can you confirm some > > >> things: > > >> > > >> - is count > 1? > > >> > > >> - if more than one request finished in that single call to > > >> MPI_TESTSOME > > >> where completed was returned with a value of 1 (e.g., multiple > > >> requests > > >> in your array turned into MPI_REQUEST_NULL), then this is a bug -- > > >> i.e., completed should return an accurate value. > > >> > > >> > > >> > > >> On Sep 16, 2005, at 8:45 PM, Greg Watson wrote: > > >> > > >> > > >>> Just for a change, I don't have a build problem! > > >>> > > >>> However, I have a question about the MPI_Testsome() call. I'm using > > >>> MPI_Testsome() to check the completion status of a number of > > >>> outstanding ISend() requests. I'm doing something like this: > > >>> > > >>> int outstanding; > > >>> > > >>> main() > > >>> { > > >>> tids = (int *)malloc(sizeof(int) * count); > > >>> stats = (MPI_Status *)malloc(sizeof(MPI_Status) * count); > > >>> reqs = (MPI_Request *) malloc(sizeof(MPI_Request) * count) > > >>> > > >>> do_sends(); > > >>> > > >>> outstanding = count; > > >>> > > >>> while (outstanding > 0) > > >>> check_completed(); > > >>> } > > >>> > > >>> do_sends() > > >>> { > > >>> for (i = 0; i < count; i++) > > >>> MPI_ISend(buf, len, MPI_CHAR, i, 0, MPI_COMM_WORLD, &reqs > > >>> [i]); > > >>> } > > >>> > > >>> check_completed() > > >>> { > > >>> int completed; > > >>> > > >>> if (MPI_Testsome(count, reqs, &completed, tids, stats) != > > >>> MPI_SUCCESS) { > > >>> printf("error in testsome\n"); > > >>> exit(1); > > >>> } > > >>> outstanding -= completed; > > >>> } > > >>> > > >>> The thing is, MPI_Testsome() returns with completed = 1 the first > > >>> time I call it, then completed = -32766 the second time I call it. It > > >>> always returns MPI_SUCCESS though. > > >>> > > >>> Does anyone know what's going on? Am I doing something dumb? > > >>> > > >>> Thanks, > > >>> > > >>> Greg > > >>> ___ > > >>> devel mailing list > > >>> de...@open-mpi.org > > >>> http://www.open-mpi.org/mailman/listinfo.cgi/devel > > >>> > > >>> > > >> > > >> -- > > >> {+} Jeff Squyres > > >> {+} The Open MPI Project > > >> {+} http://www.open-mpi.org/ > > >> > > >> ___ > > >> devel mailing list > > >> de...@open-mpi.org > > >> http://www.open-mpi.org/mailman/listinfo.cgi/devel > > >> > > > > > > ___ > > > devel mailing list > > > de...@open-mpi.org > > > http://www.open-mpi.org/mailman/listinfo.cgi/devel > > > > > > > > > "We must accept finite disappointment, but we must never lose infinite > hope." > Martin Luther King > > ___ > devel mailing list > de...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/devel > "We must accept finite disappointment, but we must never lose infinite hope." Martin Luther King
Re: [O-MPI devel] MPI question
Yes, I found a bug in my code that was causing the problem. I was setting the first argument of MPI_Testsome() to the number of outstanding sends, rather than the total number of sends. It seems to be working now, though I notice that MPI_Testsome() always returns 1 for count. Thanks for your help, Greg On Sep 19, 2005, at 3:52 AM, George Bosilca wrote: MPI_Testsome return MPI_UNDEFINED only when in the set of requests there are no more active requests. Basically at this point the array of requests (in your example) should contain only MPI_REQUEST_NULL. I check the different possibilities inside, and I'm pretty confident that we are correct from the MPI standard point of view. I run your test example and the behaviour was correct. Moreover, it never miss one request. Can you forward me your exact example to see what was wrong inside ? Thanks, george. On Mon, 19 Sep 2005, George Bosilca wrote: Guys I'll take care of that. When I was working on the examples for the tutorial here at Euro PVM I notice a similar problem with MPI_Waitsome. george. On Sun, 18 Sep 2005, Jeff Squyres wrote: Yes -- Tim, can you check? Sounds like something in the request progress is not occurring correctly. Thanks! On Sep 18, 2005, at 5:59 PM, Greg Watson wrote: Jeff, Yes, count is 2, but completed returns 1 on the first call and -32766 on the second call. Sounds like this may be a bug? Greg On Sep 17, 2005, at 8:11 AM, Jeff Squyres wrote: (composing this in an airport on Saturday; may not actually be sent until Monday or so) -32766 is Open MPI's value for MPI_UNDEFINED. This is what is returned when there are no active requests in the array that is passed to MPI_TESTSOME (see MPI-1.1:. Just to verify that this behavior isn't a bug, can you confirm some things: - is count > 1? - if more than one request finished in that single call to MPI_TESTSOME where completed was returned with a value of 1 (e.g., multiple requests in your array turned into MPI_REQUEST_NULL), then this is a bug -- i.e., completed should return an accurate value. On Sep 16, 2005, at 8:45 PM, Greg Watson wrote: Just for a change, I don't have a build problem! However, I have a question about the MPI_Testsome() call. I'm using MPI_Testsome() to check the completion status of a number of outstanding ISend() requests. I'm doing something like this: int outstanding; main() { tids = (int *)malloc(sizeof(int) * count); stats = (MPI_Status *)malloc(sizeof(MPI_Status) * count); reqs = (MPI_Request *) malloc(sizeof(MPI_Request) * count) do_sends(); outstanding = count; while (outstanding > 0) check_completed(); } do_sends() { for (i = 0; i < count; i++) MPI_ISend(buf, len, MPI_CHAR, i, 0, MPI_COMM_WORLD, &reqs [i]); } check_completed() { int completed; if (MPI_Testsome(count, reqs, &completed, tids, stats) != MPI_SUCCESS) { printf("error in testsome\n"); exit(1); } outstanding -= completed; } The thing is, MPI_Testsome() returns with completed = 1 the first time I call it, then completed = -32766 the second time I call it. It always returns MPI_SUCCESS though. Does anyone know what's going on? Am I doing something dumb? Thanks, Greg ___ devel mailing list de...@open-mpi.org http://www.open-mpi.org/mailman/listinfo.cgi/devel -- {+} Jeff Squyres {+} The Open MPI Project {+} http://www.open-mpi.org/ ___ devel mailing list de...@open-mpi.org http://www.open-mpi.org/mailman/listinfo.cgi/devel ___ devel mailing list de...@open-mpi.org http://www.open-mpi.org/mailman/listinfo.cgi/devel "We must accept finite disappointment, but we must never lose infinite hope." Martin Luther King ___ devel mailing list de...@open-mpi.org http://www.open-mpi.org/mailman/listinfo.cgi/devel "We must accept finite disappointment, but we must never lose infinite hope." Martin Luther King ___ devel mailing list de...@open-mpi.org http://www.open-mpi.org/mailman/listinfo.cgi/devel