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