diff --git a/ompi/mpi/c/allgather.c b/ompi/mpi/c/allgather.c index cef55e123d..1ca7b0c49b 100644 --- a/ompi/mpi/c/allgather.c +++ b/ompi/mpi/c/allgather.c @@ -14,7 +14,7 @@ * Copyright (c) 2010 University of Houston. All rights reserved. * Copyright (c) 2013 Los Alamos National Security, LLC. All rights * reserved. - * Copyright (c) 2015 Research Organization for Information Science + * Copyright (c) 2015-2018 Research Organization for Information Science * and Technology (RIST). All rights reserved. * $COPYRIGHT$ * @@ -64,7 +64,7 @@ int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, /* check whether the actual send buffer is defined. */ if (MPI_IN_PLACE == sendbuf) { memchecker_call(&opal_memchecker_base_isdefined, - (char *)(recvbuf)+rank*ext, + (char *)(recvbuf)+rank*recvcount*ext, recvcount, recvtype); } else { memchecker_datatype(sendtype); diff --git a/ompi/mpi/c/alltoallw.c b/ompi/mpi/c/alltoallw.c index de354dd992..022cac4231 100644 --- a/ompi/mpi/c/alltoallw.c +++ b/ompi/mpi/c/alltoallw.c @@ -53,24 +53,19 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[], SPC_RECORD(OMPI_SPC_ALLTOALLW, 1); MEMCHECKER( - ptrdiff_t recv_ext; - ptrdiff_t send_ext; - memchecker_comm(comm); size = OMPI_COMM_IS_INTER(comm)?ompi_comm_remote_size(comm):ompi_comm_size(comm); for ( i = 0; i < size; i++ ) { if (MPI_IN_PLACE != sendbuf) { memchecker_datatype(sendtypes[i]); - ompi_datatype_type_extent(sendtypes[i], &send_ext); memchecker_call(&opal_memchecker_base_isdefined, - (char *)(sendbuf)+sdispls[i]*send_ext, + (char *)(sendbuf)+sdispls[i], sendcounts[i], sendtypes[i]); } memchecker_datatype(recvtypes[i]); - ompi_datatype_type_extent(recvtypes[i], &recv_ext); memchecker_call(&opal_memchecker_base_isaddressable, - (char *)(recvbuf)+rdispls[i]*recv_ext, + (char *)(recvbuf)+rdispls[i], recvcounts[i], recvtypes[i]); } ); diff --git a/ompi/mpi/c/bcast.c b/ompi/mpi/c/bcast.c index 7db18f2292..65ecca93cf 100644 --- a/ompi/mpi/c/bcast.c +++ b/ompi/mpi/c/bcast.c @@ -9,7 +9,7 @@ * University of Stuttgart. All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. - * Copyright (c) 2015 Research Organization for Information Science + * Copyright (c) 2015-2018 Research Organization for Information Science * and Technology (RIST). All rights reserved. * $COPYRIGHT$ * @@ -52,9 +52,10 @@ int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, if (ompi_comm_rank(comm) == root) { /* check whether root's send buffer is defined. */ memchecker_call(&opal_memchecker_base_isdefined, buffer, count, datatype); + } else { + /* check whether receive buffer is addressable. */ + memchecker_call(&opal_memchecker_base_isaddressable, buffer, count, datatype); } - /* check whether receive buffer is addressable. */ - memchecker_call(&opal_memchecker_base_isaddressable, buffer, count, datatype); } else { if (MPI_ROOT == root) { /* check whether root's send buffer is defined. */ diff --git a/ompi/mpi/c/exscan.c b/ompi/mpi/c/exscan.c index 45326d94aa..00a26107c1 100644 --- a/ompi/mpi/c/exscan.c +++ b/ompi/mpi/c/exscan.c @@ -51,7 +51,14 @@ int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MEMCHECKER( memchecker_datatype(datatype); - memchecker_call(&opal_memchecker_base_isdefined, sendbuf, count, datatype); + if (0 != ompi_comm_rank(comm)) { + if (MPI_IN_PLACE != sendbuf) { + memchecker_call(&opal_memchecker_base_isdefined, sendbuf, count, datatype); + } else { + memchecker_call(&opal_memchecker_base_isdefined, recvbuf, count, datatype); + } + } + memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, count, datatype); memchecker_comm(comm); ); diff --git a/ompi/mpi/c/iallgather.c b/ompi/mpi/c/iallgather.c index 8e0abe3fe8..bb7aa504cd 100644 --- a/ompi/mpi/c/iallgather.c +++ b/ompi/mpi/c/iallgather.c @@ -14,7 +14,7 @@ * Copyright (c) 2012 Oak Ridge National Laboratory. All rights reserved. * Copyright (c) 2013 Los Alamos National Security, LLC. All rights * reserved. - * Copyright (c) 2015-2019 Research Organization for Information Science + * Copyright (c) 2015-2020 Research Organization for Information Science * and Technology (RIST). All rights reserved. * $COPYRIGHT$ * @@ -65,7 +65,7 @@ int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, /* check whether the actual send buffer is defined. */ if (MPI_IN_PLACE == sendbuf) { memchecker_call(&opal_memchecker_base_isdefined, - (char *)(recvbuf)+rank*ext, + (char *)(recvbuf)+rank*recvcount*ext, recvcount, recvtype); } else { memchecker_datatype(sendtype); diff --git a/ompi/mpi/c/ialltoallw.c b/ompi/mpi/c/ialltoallw.c index 6dc4af8854..88620d6f11 100644 --- a/ompi/mpi/c/ialltoallw.c +++ b/ompi/mpi/c/ialltoallw.c @@ -13,7 +13,7 @@ * Copyright (c) 2007 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2012-2013 Los Alamos National Security, LLC. All rights * reserved. - * Copyright (c) 2014-2019 Research Organization for Information Science + * Copyright (c) 2014-2020 Research Organization for Information Science * and Technology (RIST). All rights reserved. * $COPYRIGHT$ * @@ -54,26 +54,20 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl SPC_RECORD(OMPI_SPC_IALLTOALLW, 1); MEMCHECKER( - ptrdiff_t recv_ext; - ptrdiff_t send_ext; - - memchecker_comm(comm); size = OMPI_COMM_IS_INTER(comm)?ompi_comm_remote_size(comm):ompi_comm_size(comm); for ( i = 0; i < size; i++ ) { if (MPI_IN_PLACE != sendbuf) { memchecker_datatype(sendtypes[i]); - ompi_datatype_type_extent(sendtypes[i], &send_ext); memchecker_call(&opal_memchecker_base_isdefined, - (char *)(sendbuf)+sdispls[i]*send_ext, + (char *)(sendbuf)+sdispls[i], sendcounts[i], sendtypes[i]); } memchecker_datatype(recvtypes[i]); - ompi_datatype_type_extent(recvtypes[i], &recv_ext); memchecker_call(&opal_memchecker_base_isaddressable, - (char *)(recvbuf)+rdispls[i]*recv_ext, + (char *)(recvbuf)+rdispls[i], recvcounts[i], recvtypes[i]); } ); diff --git a/ompi/mpi/c/ibcast.c b/ompi/mpi/c/ibcast.c index 2dcdbb9633..5ab3fb0768 100644 --- a/ompi/mpi/c/ibcast.c +++ b/ompi/mpi/c/ibcast.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2012 Oak Rigde National Laboratory. All rights reserved. - * Copyright (c) 2015-2019 Research Organization for Information Science + * Copyright (c) 2015-2020 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2017-2018 The University of Tennessee and The University * of Tennessee Research Foundation. All rights @@ -42,8 +42,24 @@ int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, MEMCHECKER( memchecker_datatype(datatype); - memchecker_call(&opal_memchecker_base_isdefined, buffer, count, datatype); memchecker_comm(comm); + if (OMPI_COMM_IS_INTRA(comm)) { + if (ompi_comm_rank(comm) == root) { + /* check whether root's send buffer is defined. */ + memchecker_call(&opal_memchecker_base_isdefined, buffer, count, datatype); + } else { + /* check whether receive buffer is addressable. */ + memchecker_call(&opal_memchecker_base_isaddressable, buffer, count, datatype); + } + } else { + if (MPI_ROOT == root) { + /* check whether root's send buffer is defined. */ + memchecker_call(&opal_memchecker_base_isdefined, buffer, count, datatype); + } else if (MPI_PROC_NULL != root) { + /* check whether receive buffer is addressable. */ + memchecker_call(&opal_memchecker_base_isaddressable, buffer, count, datatype); + } + } ); if (MPI_PARAM_CHECK) { diff --git a/ompi/mpi/c/iexscan.c b/ompi/mpi/c/iexscan.c index 4c56e08f1e..8260e5190e 100644 --- a/ompi/mpi/c/iexscan.c +++ b/ompi/mpi/c/iexscan.c @@ -52,7 +52,14 @@ int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MEMCHECKER( memchecker_datatype(datatype); - memchecker_call(&opal_memchecker_base_isdefined, sendbuf, count, datatype); + if (0 != ompi_comm_rank(comm)) { + if (MPI_IN_PLACE != sendbuf) { + memchecker_call(&opal_memchecker_base_isdefined, sendbuf, count, datatype); + } else { + memchecker_call(&opal_memchecker_base_isdefined, recvbuf, count, datatype); + } + } + memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, count, datatype); memchecker_comm(comm); ); diff --git a/ompi/mpi/c/pack.c b/ompi/mpi/c/pack.c index 7a8f295a6d..3ce1815578 100644 --- a/ompi/mpi/c/pack.c +++ b/ompi/mpi/c/pack.c @@ -13,7 +13,7 @@ * Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2013 Los Alamos National Security, LLC. All rights * reserved. - * Copyright (c) 2015-2017 Research Organization for Information Science + * Copyright (c) 2015-2018 Research Organization for Information Science * and Technology (RIST). All rights reserved. * $COPYRIGHT$ * @@ -54,6 +54,7 @@ int MPI_Pack(const void *inbuf, int incount, MPI_Datatype datatype, MEMCHECKER( memchecker_datatype(datatype); memchecker_call(&opal_memchecker_base_isdefined, inbuf, incount, datatype); + memchecker_call(&opal_memchecker_base_isaddressable, (void *)((char *)outbuf + *position), outsize, MPI_PACKED); memchecker_comm(comm); ); diff --git a/ompi/mpi/c/unpack.c b/ompi/mpi/c/unpack.c index 0d7e2a68c3..3aaab9d3e7 100644 --- a/ompi/mpi/c/unpack.c +++ b/ompi/mpi/c/unpack.c @@ -10,7 +10,7 @@ * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2006-2013 Cisco Systems, Inc. All rights reserved. - * Copyright (c) 2015-2017 Research Organization for Information Science + * Copyright (c) 2015-2018 Research Organization for Information Science * and Technology (RIST). All rights reserved. * $COPYRIGHT$ * @@ -51,7 +51,8 @@ int MPI_Unpack(const void *inbuf, int insize, int *position, MEMCHECKER( memchecker_datatype(datatype); - memchecker_call(&opal_memchecker_base_isdefined, outbuf, outcount, datatype); + memchecker_call(&opal_memchecker_base_isdefined, inbuf, insize, MPI_PACKED); + memchecker_call(&opal_memchecker_base_isaddressable, outbuf, outcount, datatype); memchecker_comm(comm); );