[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.
Robert G. Brown rgb at phy.duke.eduWed Sep 27 20:44:10 PDT 2006
- Previous message: [Beowulf] Stupid MPI programming question
- Next message: [Beowulf] Stupid MPI programming question
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
- Previous message: [Beowulf] Stupid MPI programming question
- Next message: [Beowulf] Stupid MPI programming question
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Beowulf mailing list
