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