Re: [O-MPI devel] MPI question

2005-09-19 Thread George Bosilca
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

2005-09-19 Thread George Bosilca
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

2005-09-19 Thread Greg Watson
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