X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e0a9c75622e2b5755f7e95f79f6cdd241fd8cefe..9c5a3a5cae5517b0bff451bfe850395e8665e84a:/teshsuite/smpi/indexed/indexed_test.c diff --git a/teshsuite/smpi/indexed/indexed_test.c b/teshsuite/smpi/indexed/indexed_test.c new file mode 100644 index 0000000000..4ceed68d32 --- /dev/null +++ b/teshsuite/smpi/indexed/indexed_test.c @@ -0,0 +1,56 @@ +/* Copyright (c) 2012-2014. The SimGrid Team. + * All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#include +#include "mpi.h" + +int main(int argc, char *argv[]) +{ + int rank, size, i; + MPI_Datatype type, type2; + int blocklen[3] = { 2, 3, 1 }; + int displacement[3] = { 0, 3, 8 }; + int buffer[27]; + MPI_Status status; + + MPI_Init(&argc, &argv); + MPI_Comm_size(MPI_COMM_WORLD, &size); + if (size < 2) + { + printf("Please run with 2 processes.\n"); + MPI_Finalize(); + return 1; + } + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + + MPI_Type_contiguous(3, MPI_INT, &type2); + MPI_Type_commit(&type2); + MPI_Type_indexed(3, blocklen, displacement, type2, &type); + MPI_Type_commit(&type); + + if (rank == 0) + { + for (i=0; i<27; i++) + buffer[i] = i; + MPI_Send(buffer, 1, type, 1, 123, MPI_COMM_WORLD); + } + + if (rank == 1) + { + for (i=0; i<27; i++) + buffer[i] = -1; + MPI_Recv(buffer, 1, type, 0, 123, MPI_COMM_WORLD, &status); + for (i=0; i<27; i++) + printf("buffer[%d] = %d\n", i, buffer[i]); + fflush(stdout); + } + + MPI_Type_free(&type); + MPI_Type_free(&type2); + MPI_Finalize(); + return 0; +} +