Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
update test
authorgenaud <genaud@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 16 Jul 2009 10:36:34 +0000 (10:36 +0000)
committergenaud <genaud@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 16 Jul 2009 10:36:34 +0000 (10:36 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6514 48e7efb5-ca39-0410-a469-dd3cf9ba447f

examples/smpi/Makefile.am
examples/smpi/sendrecv.c
src/smpi/smpi_mpi.c

index 0e55db2..7c4beba 100644 (file)
@@ -14,7 +14,8 @@
 #    <simgrid>/tools/tesh/README.tesh
 #  - List the tesh file in the TESTS variable so that it gets tested on make check
 
 #    <simgrid>/tools/tesh/README.tesh
 #  - List the tesh file in the TESTS variable so that it gets tested on make check
 
-noinst_PROGRAMS = allreduce bcast bcbench compute compute2 compute3 first second mvmul ring_c split scatter reduce  sendrecv 
+noinst_PROGRAMS = allreduce bcast bcbench compute compute2 compute3 first pingpong second sendrecv mvmul ring_c split scatter reduce 
+
 allreduce: allreduce.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
 bcast: bcast.c
 allreduce: allreduce.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
 bcast: bcast.c
@@ -29,6 +30,8 @@ compute3: compute3.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
 first: mvmul.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
        $(top_builddir)/src/smpi/smpicc $^ -o $@
 first: mvmul.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
+pingpong: pingpong.c
+       $(top_builddir)/src/smpi/smpicc $^ -o $@
 second: second.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
 scatter: scatter.c
 second: second.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
 scatter: scatter.c
@@ -37,6 +40,8 @@ reduce: reduce.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
 ring_c: ring_c.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
        $(top_builddir)/src/smpi/smpicc $^ -o $@
 ring_c: ring_c.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
+sendrecv: sendrecv.c
+       $(top_builddir)/src/smpi/smpicc $^ -o $@
 split: split.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
 mvmul: mvmul.c
 split: split.c
        $(top_builddir)/src/smpi/smpicc $^ -o $@
 mvmul: mvmul.c
index 7b11ce0..da30874 100644 (file)
@@ -1,26 +1,63 @@
 #include "mpi.h"
 #include <stdio.h>
 #include "mpi.h"
 #include <stdio.h>
-int main(int argc, char *argv[])
-{
-#define TAG_RCV 998
+
+int test(int myid, int numprocs) {
+// The tags should match on the sender and receiver side.
+// The distinction between sendtag and recvtag is mainly
+// useful to make some other Recv or Send calls match the sendrecv. 
+#define TAG_RCV 999
 #define TAG_SND 999
 #define TAG_SND 999
-    int myid, numprocs, left, right;
-    int buffer[10], buffer2[10];
+
+
+#define BUFLEN 10
+    int left, right;
+    int buffer[BUFLEN], buffer2[BUFLEN];
+    int i;
     MPI_Request request;
     MPI_Status status;
     MPI_Request request;
     MPI_Status status;
-    MPI_Init(&argc,&argv);
-    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
-    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
+
+    for (i=0;i<BUFLEN;i++) {
+               buffer[i]=myid;
+    }
+
     right = (myid + 1) % numprocs;
     left = myid - 1;
     if (left < 0)
         left = numprocs - 1;
     right = (myid + 1) % numprocs;
     left = myid - 1;
     if (left < 0)
         left = numprocs - 1;
+
+    /* performs a right-to-left shift of vectors */ 
     MPI_Sendrecv(buffer, 10, MPI_INT, left, TAG_SND, buffer2, 10, MPI_INT, right, TAG_RCV, MPI_COMM_WORLD, &status);
  
     MPI_Sendrecv(buffer, 10, MPI_INT, left, TAG_SND, buffer2, 10, MPI_INT, right, TAG_RCV, MPI_COMM_WORLD, &status);
  
+    for (i=0;i<BUFLEN;i++) {
+               if (buffer2[i]!=((myid+1)%numprocs)) {
+                         fprintf(stderr,"[%d] error: should have values %d, has %d\n",myid,myid-1,buffer[i]);
+                         return(0);
+             }
+    }
+    return(1);
+}
+int main(int argc, char *argv[])
+{
+
+   int myid, numprocs;
+
+    MPI_Init(&argc,&argv);
+    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
+    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
+
+
+    if (0==myid) 
+               printf("\n    *** MPI_Sendrecv test ***\n\n");
+
+    if ( test(myid,numprocs)) {
+               fprintf(stderr,"[%d] ok.\n",myid);
+    }
+    else {
+               fprintf(stderr,"[%d] failed.\n",myid);
+    }
+
+
     MPI_Finalize();
     return 0;
 }
     MPI_Finalize();
     return 0;
 }
index 4ee1d8a..1e1f6c9 100644 (file)
@@ -210,7 +210,7 @@ smpi_mpi_request_t rrequest;
            retval = smpi_create_request(sendbuf, sendcount, sendtype, 
                                rank,dest,sendtag, 
                                comm, &srequest);
            retval = smpi_create_request(sendbuf, sendcount, sendtype, 
                                rank,dest,sendtag, 
                                comm, &srequest);
-         printf("[%d] isend request src=%d -> dst=%d (retval=%d)\n",rank,rank,dest,retval);
+         //printf("[%d] isend request src=%d -> dst=%d (retval=%d)\n",rank,rank,dest,retval);
          smpi_mpi_isend(srequest);
         
          
          smpi_mpi_isend(srequest);
         
          
@@ -221,17 +221,17 @@ smpi_mpi_request_t rrequest;
          retval = smpi_create_request(recvbuf, recvcount, recvtype, 
                                source, rank,recvtag, 
                                comm, &rrequest);
          retval = smpi_create_request(recvbuf, recvcount, recvtype, 
                                source, rank,recvtag, 
                                comm, &rrequest);
-         printf("[%d] irecv request src=%d -> dst=%d (retval=%d)\n",rank,source,rank,retval);
+         //printf("[%d] irecv request src=%d -> dst=%d (retval=%d)\n",rank,source,rank,retval);
          smpi_mpi_irecv(rrequest);
 
          //retval = MPI_Irecv( recvbuf, recvcount, recvtype, source, recvtag, MPI_COMM_WORLD, &rrequest);
 
 
          smpi_mpi_wait(srequest, MPI_STATUS_IGNORE);
          smpi_mpi_irecv(rrequest);
 
          //retval = MPI_Irecv( recvbuf, recvcount, recvtype, source, recvtag, MPI_COMM_WORLD, &rrequest);
 
 
          smpi_mpi_wait(srequest, MPI_STATUS_IGNORE);
-         printf("[%d] isend request src=%d dst=%d tag=%d COMPLETED (retval=%d) \n",rank,rank,dest,sendtag,retval);
+         //printf("[%d] isend request src=%d dst=%d tag=%d COMPLETED (retval=%d) \n",rank,rank,dest,sendtag,retval);
 
          smpi_mpi_wait(rrequest, MPI_STATUS_IGNORE);
 
          smpi_mpi_wait(rrequest, MPI_STATUS_IGNORE);
-         printf("[%d] irecv request src=%d -> dst=%d tag=%d COMPLETED (retval=%d)\n",rank,source,rank,recvtag,retval);
+         //printf("[%d] irecv request src=%d -> dst=%d tag=%d COMPLETED (retval=%d)\n",rank,source,rank,recvtag,retval);
 
          return(retval);
 }
 
          return(retval);
 }