[mpich2-commits] r6680 - mpich2/trunk/test/mpi/coll
thakur at mcs.anl.gov
thakur at mcs.anl.gov
Wed May 19 14:07:07 CDT 2010
Author: thakur
Date: 2010-05-19 14:07:07 -0500 (Wed, 19 May 2010)
New Revision: 6680
Added:
mpich2/trunk/test/mpi/coll/red_scat_block2.c
Modified:
mpich2/trunk/test/mpi/coll/Makefile.sm
mpich2/trunk/test/mpi/coll/testlist
Log:
added reduce_scatter_block version of redscat2.c test in preparation for optimized version of reduce_scatter_block that uses the same algorithms as reduce_scatter
Modified: mpich2/trunk/test/mpi/coll/Makefile.sm
===================================================================
--- mpich2/trunk/test/mpi/coll/Makefile.sm 2010-05-19 15:51:05 UTC (rev 6679)
+++ mpich2/trunk/test/mpi/coll/Makefile.sm 2010-05-19 19:07:07 UTC (rev 6680)
@@ -43,6 +43,8 @@
redscat2_LDADD = ../util/mtest.o
red_scat_block_SOURCES = red_scat_block.c
red_scat_block_LDADD = ../util/mtest.o
+red_scat_block2_SOURCES = red_scat_block2.c
+red_scat_block2_LDADD = ../util/mtest.o
coll9_SOURCES = coll9.c
coll7_SOURCES = coll7.c
coll6_SOURCES = coll6.c
Added: mpich2/trunk/test/mpi/coll/red_scat_block2.c
===================================================================
--- mpich2/trunk/test/mpi/coll/red_scat_block2.c (rev 0)
+++ mpich2/trunk/test/mpi/coll/red_scat_block2.c 2010-05-19 19:07:07 UTC (rev 6680)
@@ -0,0 +1,122 @@
+/* -*- Mode: C; c-basic-offset:4 ; -*- */
+/*
+ * (C) 2010 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+/*
+ * Test of reduce_scatter_block.
+ *
+ * Checks that non-commutative operations are not commuted and that
+ * all of the operations are performed.
+ *
+ * Can be called with any number of processors.
+ */
+
+#include "mpi.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpitest.h"
+
+int err = 0;
+
+/* left(x,y) ==> x */
+void left(void *a, void *b, int *count, MPI_Datatype *type)
+{
+ int *in = a;
+ int *inout = b;
+ int i;
+
+ for (i = 0; i < *count; ++i)
+ {
+ if (in[i] > inout[i])
+ ++err;
+ inout[i] = in[i];
+ }
+}
+
+/* right(x,y) ==> y */
+void right(void *a, void *b, int *count, MPI_Datatype *type)
+{
+ int *in = a;
+ int *inout = b;
+ int i;
+
+ for (i = 0; i < *count; ++i)
+ {
+ if (in[i] > inout[i])
+ ++err;
+ inout[i] = inout[i];
+ }
+}
+
+/* Just performs a simple sum but can be marked as non-commutative to
+ potentially tigger different logic in the implementation. */
+void nc_sum(void *a, void *b, int *count, MPI_Datatype *type)
+{
+ int *in = a;
+ int *inout = b;
+ int i;
+
+ for (i = 0; i < *count; ++i)
+ {
+ inout[i] = in[i] + inout[i];
+ }
+}
+
+#define MAX_BLOCK_SIZE 256
+
+int main( int argc, char **argv )
+{
+ int *sendbuf;
+ int block_size;
+ int *recvbuf;
+ int size, rank, i, sumval;
+ MPI_Comm comm;
+ MPI_Op left_op, right_op, nc_sum_op;
+
+ MTest_Init( &argc, &argv );
+ comm = MPI_COMM_WORLD;
+
+ MPI_Comm_size( comm, &size );
+ MPI_Comm_rank( comm, &rank );
+
+ MPI_Op_create(&left, 0/*non-commutative*/, &left_op);
+ MPI_Op_create(&right, 0/*non-commutative*/, &right_op);
+ MPI_Op_create(&nc_sum, 0/*non-commutative*/, &nc_sum_op);
+
+ for (block_size = 1; block_size < MAX_BLOCK_SIZE; block_size *= 2) {
+ sendbuf = (int *) malloc( block_size * size * sizeof(int) );
+ recvbuf = malloc( block_size * sizeof(int) );
+
+ for (i=0; i<(size*block_size); i++)
+ sendbuf[i] = rank + i;
+ for (i=0; i<block_size; i++)
+ recvbuf[i] = 0xdeadbeef;
+
+ MPI_Reduce_scatter_block( sendbuf, recvbuf, block_size, MPI_INT, left_op, comm );
+ for (i = 0; i < block_size; ++i)
+ if (recvbuf[i] != (rank * block_size + i)) ++err;
+
+ MPI_Reduce_scatter_block( sendbuf, recvbuf, block_size, MPI_INT, right_op, comm );
+ for (i = 0; i < block_size; ++i)
+ if (recvbuf[i] != ((size - 1) + (rank * block_size) + i)) ++err;
+
+ MPI_Reduce_scatter_block( sendbuf, recvbuf, block_size, MPI_INT, nc_sum_op, comm );
+ for (i = 0; i < block_size; ++i) {
+ int x = rank * block_size + i;
+ if (recvbuf[i] != (size*x + (size-1)*size/2)) ++err;
+ }
+
+ free(recvbuf);
+ free(sendbuf);
+ }
+
+ MPI_Op_free(&left_op);
+ MPI_Op_free(&right_op);
+ MPI_Op_free(&nc_sum_op);
+
+ MTest_Finalize( err );
+ MPI_Finalize( );
+
+ return err;
+}
Modified: mpich2/trunk/test/mpi/coll/testlist
===================================================================
--- mpich2/trunk/test/mpi/coll/testlist 2010-05-19 15:51:05 UTC (rev 6679)
+++ mpich2/trunk/test/mpi/coll/testlist 2010-05-19 19:07:07 UTC (rev 6680)
@@ -51,6 +51,9 @@
red_scat_block 4
red_scat_block 5
red_scat_block 8
+red_scat_block2 4
+red_scat_block2 5
+red_scat_block2 10
scantst 4
exscan 10
exscan2 5
More information about the mpich2-commits
mailing list