1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
3 * (C) 2001 by Argonne National Laboratory.
4 * See COPYRIGHT in top-level directory.
15 double array[X][Y][Z];
17 int main(int argc, char *argv[])
20 MPI_Datatype subarray;
21 int array_size[] = { X, Y, Z };
22 int array_subsize[] = { X / 2, Y / 2, Z };
23 int array_start[] = { 0, 0, 0 };
27 MPI_Init(&argc, &argv);
28 MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
30 for (i = 0; i < X; ++i) {
31 for (j = 0; j < Y; ++j) {
32 for (k = 0; k < Z; ++k) {
36 array[i][j][k] = -2.0;
41 MPI_Type_create_subarray(3, array_size, array_subsize, array_start, MPI_ORDER_C,
42 MPI_DOUBLE, &subarray);
43 MPI_Type_commit(&subarray);
46 MPI_Send(array, 1, subarray, 1, 0, MPI_COMM_WORLD);
48 MPI_Recv(array, 1, subarray, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
49 for (i = array_start[0]; i < array_subsize[0]; ++i) {
50 for (j = array_start[1]; j < array_subsize[1]; ++j) {
51 for (k = array_start[2]; k < array_subsize[2]; ++k) {
52 if (array[i][j][k] != 2.0)
59 MPI_Type_free(&subarray);
61 MPI_Allreduce(MPI_IN_PLACE, &errs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
64 printf("Found %d errors\n", errs);
66 printf(" No Errors\n");