Sorry for the delay in replying; I was out last week.

MPI_SEND and MPI_RECV take pointers to the buffer to send and receive, 
respectively.

When you send a scalar variable, like an int, you get the address of the buffer 
via the & operator (e.g., MPI_Send(&i, ...)).  When you send a new'ed/malloc'ed 
array, you only need to send the pointer value -- i.e., the address pointing to 
the buffer.  Don't send the address of the pointer, because then you're telling 
MPI to overwrite the pointer itself.  I.e.,:

  work = new char[...];
  MPI_Send(work, ...)

not

  work = new char[...];
  MPI_Send(&work, ...);

More below.

On Apr 11, 2012, at 3:03 PM, Peter Sels wrote:

> Probably a buffer overrun or so, but I cannot see where.

The buffer overrun is where you specify &array in your MPI_SEND/MPI_RECV calls.

> On linux I get:  Segmentation fault (11)
> 
> Increasing the length gives more problems...
> 
> How can I get this code stable?
> What am I doing wrong?
> Is there a maximum length to MPI messages?

No.

> For sending a string, do I use MPI_CHARACTER or MPI_BYTE or ...?

MPI_BYTE.  MPI_CHARACTER is for Fortran CHARACTERs.

> How come I cannot assert that my messages end in '\0' when received?
> And how come that when I print them, I also get a segmentation fault?

I think these two issues are symptoms of (work) vs. (&work), from above.

> Can I send two subsequent messages using MPI_Send, or do I have to do

Sure.

> the first as MPI_Isend and then do a MPI_Wait before the next
> MPI_Send?...

You can do multiple Isend's and then a Waitall, if you want.

> Why do I not find code online for receiving the length first and then
> allocating a buffer of this size and then receiving the next message?

I don't know.  Perhaps you didn't google enough?  :-)

FWIW, the new MPI-3 functions MPI_MPROBE and MPI_IMPROBE will help with 
unknown-length messages, too.  We have that implemented on the Open MPI SVN 
trunk, but they are not yet available in a stable release.  They'll debut in 
OMPI v1.7.

-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to: 
http://www.cisco.com/web/about/doing_business/legal/cri/


Reply via email to