Archives


- Beowulf
- Beowulf Announce
- Scyld-users
- Beowulf on Debian

[Beowulf] Stupid MPI programming question

Many of your questions may have already been answered in earlier discussions or in the FAQ. The search results page will indicate current discussions as well as past list serves, articles, and papers.

Search

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,
>> MPI_COMM_WORLD);
>
> 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
assuming

  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:

   MPI_Bcast(mystring,10,MPI_CHAR,MASTER_RANK,MPI_COMM_WORLD);

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

    rgb

-- 
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