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