Open MPI logo

Open MPI User's Mailing List Archives

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

Subject: Re: [OMPI users] Memchecker report on v1.3b2 (includes potential bug reports)
From: François PELLEGRINI (francois.pellegrini_at_[hidden])
Date: 2008-11-19 11:18:25


Bonjour Shiqing,

Shiqing Fan wrote:
> Dear François,
>
> Thanks a lot for your report, it's really a great help for us. :-)

No problem. Your software helps me too, so as soon as you have fixes
and new builds please tell me, so that I can try again.

> For the issues:

> 1) When you got "Conditional jump" errors, normally that means some
> uninitialized(or undefined) values were used. The parameters that passed
> into PMPI_Init_thread might contain uninitialized values, which could
> cause errors (even seg-fault) later. I need some time to run your
> application to check where these values exactly are. I'll post another
> email when it's done.

OK. For this specific problem, though, you do not
need Scotch. The involved lines are just below :

#define SCOTCH_PTHREAD

int
main (
int argc,
char * argv[])
{
  ...
#ifdef SCOTCH_PTHREAD
  int thrdlvlreqval;
  int thrdlvlproval;
#endif /* SCOTCH_PTHREAD */

#ifdef SCOTCH_PTHREAD
  thrdlvlreqval = MPI_THREAD_MULTIPLE;
  if (MPI_Init_thread (&argc, &argv, thrdlvlreqval, &thrdlvlproval) != MPI_SUCCESS)
    errorPrint ("main: Cannot initialize (1)");
  if (thrdlvlreqval > thrdlvlproval)
    errorPrint ("main: MPI implementation is not thread-safe: recompile without
SCOTCH_PTHREAD");
#else /* SCOTCH_PTHREAD */
  if (MPI_Init (&argc, &argv) != MPI_SUCCESS)
    errorPrint ("main: Cannot initialize (2)");
#endif /* SCOTCH_PTHREAD */

...and the line I used to run it was in my previous post.
I don't see the problem in my coding. What did I do wrong ?
If you want a Scotch tarball to play with, tell me : the
release on the forge is currenlty a 5.1.2, and I am close
to releasing a 5.1.3 (I will fix my double-Isend bug before,
see below), so I can provide you with a 5.1.3beta along
with my test data.

[...]
> 4) Well, this sounds reasonable, but according to the MPI-1 standard
> (see page 40 for non-blocking send/recv, a more detailed explanation in
> page 30):
>
> "A nonblocking send call indicates that the system may start copying
> data out of the send buffer. The sender should */not access*/ any part
> of the send buffer after a nonblocking send operation is called, until
> the send completes."
>
> So before calling MPI_Wait to complete an isend operation, any access to
> the send buffer is illegal. It might be a little strict, but we have to
> do what the standard says.

Agreed. I will rewrite my piece of code accordingly. I told
you there might be bugs in my code. ;-)

Best regards,

                                        f.p.