Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] testsome returns negative indices
From: Ross Boylan (ross_at_[hidden])
Date: 2014-03-21 12:01:55


On Fri, 2014-03-21 at 14:11 +0000, Jeff Squyres (jsquyres) wrote:
> Is that C or R code?
C.
>
> If it's R, I think the next step would be to check the R wrapper for MPI_Testsome and see what is actually being returned by OMPI in C before it gets converted to R. I'm afraid I don't know R, so I can't really comment on the syntax / correctness of your code snipit.
>
> If it's C -- which I don't think it is, but it *could* be...? -- I would need to understand your syntax in calling MPI_Testsome better; e.g., what's &INTEGER(foo)[x]?
allocVector(INTSXP, countn+1) allocates an R vector of integers.
INTEGER(indices) returns the data portion of that structure, where the
actual integers go. The &...[0] get the address of the first location.
PROTECT keeps things from being garbage-collected by R.

The allocation of indices is a cheat: the first location is used for the
outcount, and the following locations get the actual indices.

status is a pointer to an array of MPI status objects,

The indices should be small integers, shouldn't they? I'm also getting
some large values back.

Ross
>
> On Mar 20, 2014, at 8:39 PM, Ross Boylan <ross_at_[hidden]> wrote:
>
> > MPI_Testsome seems to have returned successfully, with a positive outcount, and yet given me a negative index, -4432. Can anyone help me understand what's going on?
> >
> > The call is from R, and so there might be a translation issue. My first thought was that it might be 32 vs 64 bit integers, but both OMPI and R seem to be using the C int type for the integers.
> >
> > Here's the inner call:
> >
> > SEXP mpi_testsome(SEXP sexp_count){
> > int countn=INTEGER(sexp_count)[0];
> > SEXP indices;
> > PROTECT (indices = allocVector(INTSXP, countn+1));
> > mpi_errhandler(MPI_Testsome(countn, request, &INTEGER(indices)[0],
> > &INTEGER(indices)[1], status));
> > UNPROTECT(1);
> > return indices;
> > }
> >
> > SEXP is an R structure.
> >
> > OMPI 1.7.4.
> >
> > Ross Boylan
> >
> > _______________________________________________
> > users mailing list
> > users_at_[hidden]
> > http://www.open-mpi.org/mailman/listinfo.cgi/users
>
>