 Algorithmique Numérique Distribuée Public GIT Repository
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *  (C) 2003 by Argonne National Laboratory.
4  *      See COPYRIGHT in top-level directory.
5  */
6 #include "mpi.h"
7 #include <stdio.h>
8 #include "mpitest.h"
10 int prodof( int ndims, const int dims[] );
11 int increasing( int ndims, const int dims[] );
13 int prodof( int ndims, const int dims[] )
14 {
15     int i, prod=1;
16     for (i=0; i<ndims; i++)
17         prod *= dims[i];
18     return prod;
19 }
21 int increasing( int ndims, const int dims[] )
22 {
23     int i, err=0;
24     for (i=1; i<ndims; i++) {
25         if (dims[i] > dims[i-1]) {
26             printf ("%d = dims[%d] > dims[%d] = %d\n", dims[i], i,
27                     i-1, dims[i-1] );
28             err = 1;
29         }
30     }
31     return err;
32 }
33 int main( int argc, char *argv[] )
34 {
35     int errs = 0;
36     int dims, nnodes, ndims;
38     MTest_Init( &argc, &argv );
40     /* Test multiple dims create values.  For each, make sure that the
41        product of dims is the number of input nodes */
42     nnodes = 2*3*5*7*11;
43     ndims  = 2;
44     dims = dims = 0;
45     MPI_Dims_create( nnodes, ndims, dims );
46     if (prodof(ndims,dims) != nnodes) {
47         errs++;
48         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
49                 nnodes, ndims );
50     }
51     if (increasing( ndims, dims )) {
52         errs++;
53         printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
54         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
55                 nnodes, ndims );
56     }
58     /* Test multiple dims create values.  For each, make sure that the
59        product of dims is the number of input nodes */
60     nnodes = 2*7;
61     ndims  = 2;
62     dims = dims = 0;
63     MPI_Dims_create( nnodes, ndims, dims );
64     if (prodof(ndims,dims) != nnodes) {
65         errs++;
66         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
67                 nnodes, ndims );
68     }
69     if (increasing( ndims, dims )) {
70         errs++;
71         printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
72         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
73                 nnodes, ndims );
74     }
76     nnodes = 2*2*3*3*5*7*11;
77     ndims  = 2;
78     dims = dims = 0;
79     MPI_Dims_create( nnodes, ndims, dims );
80     if (prodof(ndims,dims) != nnodes) {
81         errs++;
82         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
83                 nnodes, ndims );
84     }
85     if (increasing( ndims, dims )) {
86         errs++;
87         printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
88         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
89                 nnodes, ndims );
90     }
92     nnodes = 11;
93     ndims  = 2;
94     dims = dims = 0;
95     MPI_Dims_create( nnodes, ndims, dims );
96     if (prodof(ndims,dims) != nnodes) {
97         errs++;
98         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
99                 nnodes, ndims );
100     }
101     if (increasing( ndims, dims )) {
102         errs++;
103         printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
104         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
105                 nnodes, ndims );
106     }
108     nnodes = 5*7*11;
109     ndims  = 4;
110     dims = dims = dims = dims = 0;
111     MPI_Dims_create( nnodes, ndims, dims );
112     if (prodof(ndims,dims) != nnodes) {
113         errs++;
114         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
115                 nnodes, ndims );
116     }
117     if (increasing( ndims, dims )) {
118         errs++;
119         printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
120         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
121                 nnodes, ndims );
122     }
124     nnodes = 64;
125     ndims  = 4;
126     dims = dims = dims = dims = 0;
127     MPI_Dims_create( nnodes, ndims, dims );
128     if (prodof(ndims,dims) != nnodes) {
129         errs++;
130         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
131                 nnodes, ndims );
132     }
133     if (increasing( ndims, dims )) {
134         errs++;
135         printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
136         printf( "dims create returned the wrong decomposition for %d in %d dims\n",
137                 nnodes, ndims );
138     }
140     MTest_Finalize( errs );
141     MPI_Finalize();
142     return 0;
144 }