From 99e8fb90a14e543c1a4b2feaf22a5c0670c2951a Mon Sep 17 00:00:00 2001 From: genaud Date: Thu, 16 Jul 2009 15:25:18 +0000 Subject: [PATCH 1/1] * MPI_Sendrecv user+internal levels * added another test for alltoall git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6515 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- ChangeLog | 2 +- examples/smpi/alltoall2.c | 68 +++++++++++++++++++++++++++++++++++++++ src/smpi/private.h | 3 ++ src/smpi/smpi_mpi.c | 41 ++++++++++++----------- 4 files changed, 95 insertions(+), 19 deletions(-) create mode 100644 examples/smpi/alltoall2.c diff --git a/ChangeLog b/ChangeLog index 863403d127..013329ca2e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,7 +2,7 @@ SimGrid (3.3.2-svn) unstable; urgency=low SMPI: * Implement some more MPI primitives: - MPI_Waitany, MPI_Waitall, MPI_Reduce, MPI_Allreduce + MPI_Waitany, MPI_Waitall, MPI_Reduce, MPI_Allreduce, MPI_Sendrecv * Add support for optimized collectives (Bcast is now binomial by default) * Port smpirun and smpicc to OS X diff --git a/examples/smpi/alltoall2.c b/examples/smpi/alltoall2.c new file mode 100644 index 0000000000..ae47160d1e --- /dev/null +++ b/examples/smpi/alltoall2.c @@ -0,0 +1,68 @@ +/**************************************************************************** + + MESSAGE PASSING INTERFACE TEST CASE SUITE + + Copyright IBM Corp. 1995 + + IBM Corp. hereby grants a non-exclusive license to use, copy, modify, and + distribute this software for any purpose and without fee provided that the + above copyright notice and the following paragraphs appear in all copies. + + IBM Corp. makes no representation that the test cases comprising this + suite are correct or are an accurate representation of any standard. + + In no event shall IBM be liable to any party for direct, indirect, special + incidental, or consequential damage arising out of the use of this software + even if IBM Corp. has been advised of the possibility of such damage. + + IBM CORP. SPECIFICALLY DISCLAIMS ANY WARRANTIES INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS AND IBM + CORP. HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + ENHANCEMENTS, OR MODIFICATIONS. + +**************************************************************************** + + These test cases reflect an interpretation of the MPI Standard. They are + are, in most cases, unit tests of specific MPI behaviors. If a user of any + test case from this set believes that the MPI Standard requires behavior + different than that implied by the test case we would appreciate feedback. + + Comments may be sent to: + Richard Treumann + treumann@kgn.ibm.com + +**************************************************************************** +*/ +#include "mpi.h" +#include +#include +#include +#include + + +#define MAXLEN 10000 + +void main() +{ + int out[1000000],in[1000000],i,j,k; + int myself,tasks; + + MPI_Init(0,0); + MPI_Comm_rank(MPI_COMM_WORLD,&myself); + MPI_Comm_size(MPI_COMM_WORLD,&tasks); + for(j=1;j<=MAXLEN;j*=10) { + for(i=0;i dst=%d (retval=%d)\n",rank,rank,dest,retval); smpi_mpi_isend(srequest); - - //retval = MPI_Isend( sendbuf, sendcount, sendtype, dest, sendtag, MPI_COMM_WORLD, &srequest); - - /* recv */ 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); 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); - 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); return(retval); } +/** + * MPI_Sendrecv user entry point + **/ +int SMPI_MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, + void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, + MPI_Comm comm, MPI_Status *status) +{ +int retval = MPI_SUCCESS; + + smpi_bench_end(); + smpi_mpi_sendrecv( sendbuf, sendcount, sendtype, dest, sendtag, + recvbuf, recvcount, recvtype, source, recvtag, + comm, status); + smpi_bench_begin(); + return retval; + + +} /** * MPI_Wait and friends @@ -349,7 +357,7 @@ static void print_buffer_double(void *buf, int len, char *msg, int rank) #endif /** - * MPI_Reduce + * MPI_Reduce internal level **/ int smpi_mpi_reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) @@ -476,9 +484,6 @@ int root=0; // arbitrary choice /** * MPI_Scatter user entry point **/ -//int SMPI_MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype datatype, -// void *recvbuf, int recvcount, MPI_Datatype recvtype,int root, -// MPI_Comm comm); int SMPI_MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype datatype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) -- 2.20.1