1 /* Copyright (c) 2012-2022. The SimGrid Team.
2 * All rights reserved. */
4 /* This program is free software; you can redistribute it and/or modify it
5 * under the terms of the license (GNU LGPL) which comes with this package. */
10 int main(int argc, char **argv)
19 MPI_Datatype mystruct;
22 MPI_Datatype old_types[3];
25 MPI_Init( &argc, &argv );
27 MPI_Comm_rank( MPI_COMM_WORLD, &rank );
29 int tab[2][3]={{1*rank,2*rank,3*rank},{7*rank,8*rank,9*rank}};
30 MPI_Type_contiguous(3, MPI_INT, &type2);
31 MPI_Type_commit(&type2);
33 /* One value of each type, and two for the contiguous one */
38 old_types[0] = MPI_INT;
39 old_types[1] = MPI_DOUBLE;
41 /* The locations of each element */
42 MPI_Address( &value.a, &indices[0] );
43 MPI_Address( &value.b, &indices[1] );
44 MPI_Address( &tab, &indices[2] );
46 indices[2] = indices[2] - indices[0];
47 indices[1] = indices[1] - indices[0];
50 MPI_Type_struct( 3, blocklens, indices, old_types, &mystruct );
51 MPI_Type_commit( &mystruct );
61 MPI_Bcast( &value, 1, mystruct, 0, MPI_COMM_WORLD );
63 printf("Process %d got %d (-2?) and %f (8.0?), tab (should be all 0):", rank, value.a, value.b);
65 for (int j = 0; j < 2; j++)
66 for (int i = 0; i < 3; i++)
67 printf(" %d", tab[j][i]);
70 /* Clean up the type */
71 MPI_Type_free(&mystruct);
72 MPI_Type_free(&type2);