Hello,
I'm working on HPL (High Performance Linpack) and I have a question about
MPI_Type_create_struct :
int MPI_Type_struct(
int count,
int *array_of_blocklengths,
MPI_Aint *array_of_displacements,
MPI_Datatype *array_of_types,
MPI_Datatype *newtype
)
- Two processes A and B calls MPI_Type_create_struct with the same content of
'count', 'array_of_blocklengths' and 'array_of_types', but maybe
*not* the same 'array_of_displacements' (due to private memory or
custom stride of send/recv buffer)
- Example :
On process A :
count = 3
dispA[0] = 0 - blen[0] = 1 - type[0] = MPI_INT => block0
dispA[1] = 16 - blen[1] = 2 - type[1] = MPI_DOUBLE => block1
dispA[2] = 2014 - blen[2] = 4 - type[2] = MPI_DOUBLE => block2
On process B :
count = 3
dispB[0] = 8 - blen[0] = 1 - type[0] = MPI_INT
dispB[1] = 24 - blen[1] = 2 - type[1] = MPI_DOUBLE
dispB[2] = 128 - blen[2] = 4 - type[2] = MPI_DOUBLE
- The question is : According to MPI, is this possible that two
processes calls this MPI routine with their own different
displacements ? (like example above - and also what HPL does)
- If yes, at Receiver side, I suppose that further send/recv with
this type will do :
block0 from A at dispA[0] must be written to B on dispB[0]
block1 from A at dispA[1] must be written to B on dispB[1]
and block2 from A at dispA[2] must be written to B on dispB[2],
aren't they ?
Thank you for any response,
Quan
_______________________________________________