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.
10 #define BAD_ANSWER 100000
12 int assoc ( int *, int *, int *, MPI_Datatype * );
15 The operation is inoutvec[i] = invec[i] op inoutvec[i]
16 (see 4.9.4). The order is important.
18 Note that the computation is in process rank (in the communicator)
19 order, independant of the root.
21 int assoc(int *invec, int *inoutvec, int *len, MPI_Datatype *dtype)
24 for ( i=0; i<*len; i++ ) {
25 if (inoutvec[i] <= invec[i] ) {
27 MPI_Comm_rank( MPI_COMM_WORLD, &rank );
28 fprintf( stderr, "[%d] inout[0] = %d, in[0] = %d\n",
29 rank, inoutvec[0], invec[0] );
30 inoutvec[i] = BAD_ANSWER;
33 inoutvec[i] = invec[i];
38 int main( int argc, char **argv )
46 MTest_Init( &argc, &argv );
47 MPI_Comm_rank( MPI_COMM_WORLD, &rank );
48 MPI_Comm_size( MPI_COMM_WORLD, &size );
52 MPI_Op_create( (MPI_User_function*)assoc, 0, &op );
53 MPI_Reduce ( &data, &result, 1, MPI_INT, op, size-1, MPI_COMM_WORLD );
54 MPI_Bcast ( &result, 1, MPI_INT, size-1, MPI_COMM_WORLD );
56 if (result == BAD_ANSWER) errors++;
58 MTest_Finalize( errors );
60 return MTestReturnValue( errors );