[Beowulf] Stupid MPI programming question

Robert G. Brown rgb at phy.duke.edu
Wed Sep 27 20:44:10 PDT 2006

On Wed, 27 Sep 2006, Joe Landman wrote:

> Hi Brent
> Clements, Brent M (SAIC) wrote:
>> Hey Guys,
>> I've been sitting here working for the past 48 hours and I'm fighting
>> a stupid bug in some mpi code I'm working on
>> How do I broadcast a char string to my slave mpi processes? And how
>> do I receive that char string and print it out on my slave mpi
>> process.
>> This is what I have in my code(some things have been removed)
>> #define MASTER_RANK 0
>> char* mystring;
> Hmmm....  This makes *mystring a string (ok, a character array), and
> mystring a pointer to a character array.
>> mystring = "some test";
> ok ... I haven't played with "strings" recently in C, though I seem to
> remember needing a "\0" at the end.  RGB is more likely a C language
> guru/lawyer than I am, I don't remember off the top of my head if this
> is strictly necessary.

The data string "some test" is automatically so terminated (and should
have length 10 to accomodate the termination), so that shouldn't be a
problem.  So basically mystring is allocated at compile time and its
address is loaded into the pointer mystring, which should be OK.

>> MPI_Bcast(&mystring, sizeof(basedir), MPI_CHAR, MASTER_RANK,
> Lets put on our parser hat.  The first argument is
> 	pointer to (pointer to mystring)
> mystring is a pointer, *mystring is the (technically) first character in
> the array, and &mystring is a pointer to mystring, which is a pointer to
> a pointer to the first character in the array.

Ya, I think so to.  If you allocated:

char mystring[] = "some test";

then you should be able to use &mystring, &mystring[0], or just mystring
as synonyms.  However, char *mystring means it is ALREADY a pointer, so

  int MPI_Bcast ( void *buffer, int count, MPI_Datatype datatype,
    int root, MPI_Comm comm );

you don't want to pass the address of a POINTER, you want to pass the
POINTER ITSELF -- the contents of which are the address of the string.
I would therefore expect the call to look more like:


but mind you, I don't speak MPI per se.


Robert G. Brown	                       http://www.phy.duke.edu/~rgb/
Duke University Dept. of Physics, Box 90305
Durham, N.C. 27708-0305
Phone: 1-919-660-2567  Fax: 919-660-2525     email:rgb at phy.duke.edu

More information about the Beowulf mailing list