Have a look at MPI_Type_create_struct().

     http://www.open-mpi.org/doc/v1.5/man3/MPI_Type_create_struct.3.php


On Oct 12, 2010, at 11:28 AM, Ed Peddycoart wrote:

> The data that I want to send via MPI is in the form of a struct:
>  
> struct myDataStruct {
>    struct subData1 {
>       int position[2];
>       int length[2];
>    };
>    struct subData2 {
>       float *data1;
>       float *data2;
>       float *data3;
>       float *data4;
>    };
>    struct subData3 {
>       float *data;
>    };
> };
>  
>  
> At first I thought I could simply send the data as follows: 
>  
> struct myDataStruct data = new myDataStruct;
> // allocate and fill in data for sub structs
>  
> MPI_SEND(data, sizeof(data), MPI_BYTE, 0, 19, MPI_COMM_WORLD);
>  
> but apparently, for several reasons, that isn't going to work.  What is the 
> best way to accomplish this? MPI_PACK/MPI_UNPACK?
>  
> Would I do something like this?
>  
> MPI_PACK(data->subData1->position, 2, MPI_INT, packBuffer, PACKBUFFER_SIZE, 
> &packSize, MPI_COMM_WORLD);
> MPI_PACK(data->subData1->length,  2, MPI_INT, packBuffer, PACKBUFFER_SIZE, 
> &packSize, MPI_COMM_WORLD);
> MPI_PACK(data->subData2->data1,  sizeof(data->subDat2->data1), MPI_FLOAT, 
> packBuffer, PACKBUFFER_SIZE, &packSize, MPI_COMM_WORLD);
> MPI_PACK(data->subData2->data2,  sizeof(data->subDat2->data1), MPI_FLOAT, 
> packBuffer, PACKBUFFER_SIZE, &packSize, MPI_COMM_WORLD);
> MPI_PACK(data->subData2->data3,  sizeof(data->subDat2->data1), MPI_FLOAT, 
> packBuffer, PACKBUFFER_SIZE, &packSize, MPI_COMM_WORLD);
> MPI_PACK(data->subData2->data4,  sizeof(data->subDat2->data1), MPI_FLOAT, 
> packBuffer, PACKBUFFER_SIZE, &packSize, MPI_COMM_WORLD);
> MPI_PACK(data->subData3->data1,  sizeof(data->subDat2->data1), MPI_FLOAT, 
> packBuffer, PACKBUFFER_SIZE,  &packSize, MPI_COMM_WORLD);
> MPI_Send(packBuffer, packSize, MPI_PACKED, 1, 100, , MPI_COMM_WORLD);
>  
> Ed
>  
>  
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users


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