1
1

mpi/c: fix memchecker invokation

Signed-off-by: Gilles Gouaillardet <gilles@rist.or.jp>
Этот коммит содержится в:
Gilles Gouaillardet 2020-02-13 09:17:52 +09:00 коммит произвёл Austen Lauria
родитель fc2516457b
Коммит 5751dfe91a
10 изменённых файлов: 52 добавлений и 30 удалений

Просмотреть файл

@ -14,7 +14,7 @@
* Copyright (c) 2010 University of Houston. All rights reserved. * Copyright (c) 2010 University of Houston. All rights reserved.
* Copyright (c) 2013 Los Alamos National Security, LLC. All rights * Copyright (c) 2013 Los Alamos National Security, LLC. All rights
* reserved. * reserved.
* Copyright (c) 2015 Research Organization for Information Science * Copyright (c) 2015-2018 Research Organization for Information Science
* and Technology (RIST). All rights reserved. * and Technology (RIST). All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
@ -64,7 +64,7 @@ int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* check whether the actual send buffer is defined. */ /* check whether the actual send buffer is defined. */
if (MPI_IN_PLACE == sendbuf) { if (MPI_IN_PLACE == sendbuf) {
memchecker_call(&opal_memchecker_base_isdefined, memchecker_call(&opal_memchecker_base_isdefined,
(char *)(recvbuf)+rank*ext, (char *)(recvbuf)+rank*recvcount*ext,
recvcount, recvtype); recvcount, recvtype);
} else { } else {
memchecker_datatype(sendtype); memchecker_datatype(sendtype);

Просмотреть файл

@ -53,24 +53,19 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[],
SPC_RECORD(OMPI_SPC_ALLTOALLW, 1); SPC_RECORD(OMPI_SPC_ALLTOALLW, 1);
MEMCHECKER( MEMCHECKER(
ptrdiff_t recv_ext;
ptrdiff_t send_ext;
memchecker_comm(comm); memchecker_comm(comm);
size = OMPI_COMM_IS_INTER(comm)?ompi_comm_remote_size(comm):ompi_comm_size(comm); size = OMPI_COMM_IS_INTER(comm)?ompi_comm_remote_size(comm):ompi_comm_size(comm);
for ( i = 0; i < size; i++ ) { for ( i = 0; i < size; i++ ) {
if (MPI_IN_PLACE != sendbuf) { if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtypes[i]); memchecker_datatype(sendtypes[i]);
ompi_datatype_type_extent(sendtypes[i], &send_ext);
memchecker_call(&opal_memchecker_base_isdefined, memchecker_call(&opal_memchecker_base_isdefined,
(char *)(sendbuf)+sdispls[i]*send_ext, (char *)(sendbuf)+sdispls[i],
sendcounts[i], sendtypes[i]); sendcounts[i], sendtypes[i]);
} }
memchecker_datatype(recvtypes[i]); memchecker_datatype(recvtypes[i]);
ompi_datatype_type_extent(recvtypes[i], &recv_ext);
memchecker_call(&opal_memchecker_base_isaddressable, memchecker_call(&opal_memchecker_base_isaddressable,
(char *)(recvbuf)+rdispls[i]*recv_ext, (char *)(recvbuf)+rdispls[i],
recvcounts[i], recvtypes[i]); recvcounts[i], recvtypes[i]);
} }
); );

Просмотреть файл

@ -9,7 +9,7 @@
* University of Stuttgart. All rights reserved. * University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California. * Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved. * 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. * and Technology (RIST). All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
@ -52,9 +52,10 @@ int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype,
if (ompi_comm_rank(comm) == root) { if (ompi_comm_rank(comm) == root) {
/* check whether root's send buffer is defined. */ /* check whether root's send buffer is defined. */
memchecker_call(&opal_memchecker_base_isdefined, buffer, count, datatype); 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 { } else {
if (MPI_ROOT == root) { if (MPI_ROOT == root) {
/* check whether root's send buffer is defined. */ /* check whether root's send buffer is defined. */

Просмотреть файл

@ -51,7 +51,14 @@ int MPI_Exscan(const void *sendbuf, void *recvbuf, int count,
MEMCHECKER( MEMCHECKER(
memchecker_datatype(datatype); 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); memchecker_comm(comm);
); );

Просмотреть файл

@ -14,7 +14,7 @@
* Copyright (c) 2012 Oak Ridge National Laboratory. All rights reserved. * Copyright (c) 2012 Oak Ridge National Laboratory. All rights reserved.
* Copyright (c) 2013 Los Alamos National Security, LLC. All rights * Copyright (c) 2013 Los Alamos National Security, LLC. All rights
* reserved. * 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. * and Technology (RIST). All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
@ -65,7 +65,7 @@ int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* check whether the actual send buffer is defined. */ /* check whether the actual send buffer is defined. */
if (MPI_IN_PLACE == sendbuf) { if (MPI_IN_PLACE == sendbuf) {
memchecker_call(&opal_memchecker_base_isdefined, memchecker_call(&opal_memchecker_base_isdefined,
(char *)(recvbuf)+rank*ext, (char *)(recvbuf)+rank*recvcount*ext,
recvcount, recvtype); recvcount, recvtype);
} else { } else {
memchecker_datatype(sendtype); memchecker_datatype(sendtype);

Просмотреть файл

@ -13,7 +13,7 @@
* Copyright (c) 2007 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2007 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2012-2013 Los Alamos National Security, LLC. All rights * Copyright (c) 2012-2013 Los Alamos National Security, LLC. All rights
* reserved. * 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. * and Technology (RIST). All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
@ -54,26 +54,20 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
SPC_RECORD(OMPI_SPC_IALLTOALLW, 1); SPC_RECORD(OMPI_SPC_IALLTOALLW, 1);
MEMCHECKER( MEMCHECKER(
ptrdiff_t recv_ext;
ptrdiff_t send_ext;
memchecker_comm(comm); memchecker_comm(comm);
size = OMPI_COMM_IS_INTER(comm)?ompi_comm_remote_size(comm):ompi_comm_size(comm); size = OMPI_COMM_IS_INTER(comm)?ompi_comm_remote_size(comm):ompi_comm_size(comm);
for ( i = 0; i < size; i++ ) { for ( i = 0; i < size; i++ ) {
if (MPI_IN_PLACE != sendbuf) { if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtypes[i]); memchecker_datatype(sendtypes[i]);
ompi_datatype_type_extent(sendtypes[i], &send_ext);
memchecker_call(&opal_memchecker_base_isdefined, memchecker_call(&opal_memchecker_base_isdefined,
(char *)(sendbuf)+sdispls[i]*send_ext, (char *)(sendbuf)+sdispls[i],
sendcounts[i], sendtypes[i]); sendcounts[i], sendtypes[i]);
} }
memchecker_datatype(recvtypes[i]); memchecker_datatype(recvtypes[i]);
ompi_datatype_type_extent(recvtypes[i], &recv_ext);
memchecker_call(&opal_memchecker_base_isaddressable, memchecker_call(&opal_memchecker_base_isaddressable,
(char *)(recvbuf)+rdispls[i]*recv_ext, (char *)(recvbuf)+rdispls[i],
recvcounts[i], recvtypes[i]); recvcounts[i], recvtypes[i]);
} }
); );

Просмотреть файл

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 2012 Oak Rigde National Laboratory. All rights reserved. * 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. * and Technology (RIST). All rights reserved.
* Copyright (c) 2017-2018 The University of Tennessee and The University * Copyright (c) 2017-2018 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights * of Tennessee Research Foundation. All rights
@ -42,8 +42,24 @@ int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype,
MEMCHECKER( MEMCHECKER(
memchecker_datatype(datatype); memchecker_datatype(datatype);
memchecker_call(&opal_memchecker_base_isdefined, buffer, count, datatype);
memchecker_comm(comm); 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) { if (MPI_PARAM_CHECK) {

Просмотреть файл

@ -52,7 +52,14 @@ int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count,
MEMCHECKER( MEMCHECKER(
memchecker_datatype(datatype); 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); memchecker_comm(comm);
); );

Просмотреть файл

@ -13,7 +13,7 @@
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2013 Los Alamos National Security, LLC. All rights * Copyright (c) 2013 Los Alamos National Security, LLC. All rights
* reserved. * 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. * and Technology (RIST). All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
@ -54,6 +54,7 @@ int MPI_Pack(const void *inbuf, int incount, MPI_Datatype datatype,
MEMCHECKER( MEMCHECKER(
memchecker_datatype(datatype); memchecker_datatype(datatype);
memchecker_call(&opal_memchecker_base_isdefined, inbuf, incount, 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); memchecker_comm(comm);
); );

Просмотреть файл

@ -10,7 +10,7 @@
* Copyright (c) 2004-2005 The Regents of the University of California. * Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved. * All rights reserved.
* Copyright (c) 2006-2013 Cisco Systems, Inc. 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. * and Technology (RIST). All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
@ -51,7 +51,8 @@ int MPI_Unpack(const void *inbuf, int insize, int *position,
MEMCHECKER( MEMCHECKER(
memchecker_datatype(datatype); 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); memchecker_comm(comm);
); );