From: suter Date: Mon, 10 Sep 2012 08:58:13 +0000 (+0200) Subject: add some test to not perform some memcpy. Mandatory for trace replay on X-Git-Tag: v3_8~146^2~77 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/d37b09424c4b4e8d5b59c575b5b1b3d1b7c252ee?ds=sidebyside add some test to not perform some memcpy. Mandatory for trace replay on top of SMPI. We don't care about data, so the send and recv buffers are always NULL. memcpy doesn't like that at all. --- diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index 9ff9da7e0a..ff3b8554cb 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -144,7 +144,8 @@ void smpi_mpi_start(MPI_Request request) void *oldbuf = request->buf; detached = 1; request->buf = malloc(request->size); - memcpy(request->buf,oldbuf,request->size); + if (oldbuf) + memcpy(request->buf,oldbuf,request->size); XBT_DEBUG("Send request %p is detached; buf %p copied into %p",request,oldbuf,request->buf); }else{ XBT_DEBUG("Send request %p is not detached (buf: %p)",request,request->buf); @@ -690,7 +691,8 @@ void smpi_mpi_reduce(void *sendbuf, void *recvbuf, int count, // FIXME: check for errors smpi_datatype_extent(datatype, &lb, &dataext); // Local copy from root - smpi_datatype_copy(sendbuf, count, datatype, recvbuf, count, datatype); + if (sendbuf && recvbuf) + smpi_datatype_copy(sendbuf, count, datatype, recvbuf, count, datatype); // Receive buffers from senders //TODO: make a MPI_barrier here ? requests = xbt_new(MPI_Request, size - 1); @@ -715,7 +717,8 @@ void smpi_mpi_reduce(void *sendbuf, void *recvbuf, int count, if(index == MPI_UNDEFINED) { break; } - smpi_op_apply(op, tmpbufs[index], recvbuf, &count, &datatype); + if(op) /* op can be MPI_OP_NULL that does nothing */ + smpi_op_apply(op, tmpbufs[index], recvbuf, &count, &datatype); } for(index = 0; index < size - 1; index++) { xbt_free(tmpbufs[index]);