Skip to content

Commit 5751dfe

Browse files
ggouaillardetawlauria
authored andcommitted
mpi/c: fix memchecker invokation
Signed-off-by: Gilles Gouaillardet <[email protected]>
1 parent fc25164 commit 5751dfe

File tree

10 files changed

+52
-30
lines changed

10 files changed

+52
-30
lines changed

ompi/mpi/c/allgather.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* Copyright (c) 2010 University of Houston. All rights reserved.
1515
* Copyright (c) 2013 Los Alamos National Security, LLC. All rights
1616
* reserved.
17-
* Copyright (c) 2015 Research Organization for Information Science
17+
* Copyright (c) 2015-2018 Research Organization for Information Science
1818
* and Technology (RIST). All rights reserved.
1919
* $COPYRIGHT$
2020
*
@@ -64,7 +64,7 @@ int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
6464
/* check whether the actual send buffer is defined. */
6565
if (MPI_IN_PLACE == sendbuf) {
6666
memchecker_call(&opal_memchecker_base_isdefined,
67-
(char *)(recvbuf)+rank*ext,
67+
(char *)(recvbuf)+rank*recvcount*ext,
6868
recvcount, recvtype);
6969
} else {
7070
memchecker_datatype(sendtype);

ompi/mpi/c/alltoallw.c

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,24 +53,19 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[],
5353
SPC_RECORD(OMPI_SPC_ALLTOALLW, 1);
5454

5555
MEMCHECKER(
56-
ptrdiff_t recv_ext;
57-
ptrdiff_t send_ext;
58-
5956
memchecker_comm(comm);
6057

6158
size = OMPI_COMM_IS_INTER(comm)?ompi_comm_remote_size(comm):ompi_comm_size(comm);
6259
for ( i = 0; i < size; i++ ) {
6360
if (MPI_IN_PLACE != sendbuf) {
6461
memchecker_datatype(sendtypes[i]);
65-
ompi_datatype_type_extent(sendtypes[i], &send_ext);
6662
memchecker_call(&opal_memchecker_base_isdefined,
67-
(char *)(sendbuf)+sdispls[i]*send_ext,
63+
(char *)(sendbuf)+sdispls[i],
6864
sendcounts[i], sendtypes[i]);
6965
}
7066
memchecker_datatype(recvtypes[i]);
71-
ompi_datatype_type_extent(recvtypes[i], &recv_ext);
7267
memchecker_call(&opal_memchecker_base_isaddressable,
73-
(char *)(recvbuf)+rdispls[i]*recv_ext,
68+
(char *)(recvbuf)+rdispls[i],
7469
recvcounts[i], recvtypes[i]);
7570
}
7671
);

ompi/mpi/c/bcast.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* University of Stuttgart. All rights reserved.
1010
* Copyright (c) 2004-2005 The Regents of the University of California.
1111
* All rights reserved.
12-
* Copyright (c) 2015 Research Organization for Information Science
12+
* Copyright (c) 2015-2018 Research Organization for Information Science
1313
* and Technology (RIST). All rights reserved.
1414
* $COPYRIGHT$
1515
*
@@ -52,9 +52,10 @@ int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype,
5252
if (ompi_comm_rank(comm) == root) {
5353
/* check whether root's send buffer is defined. */
5454
memchecker_call(&opal_memchecker_base_isdefined, buffer, count, datatype);
55+
} else {
56+
/* check whether receive buffer is addressable. */
57+
memchecker_call(&opal_memchecker_base_isaddressable, buffer, count, datatype);
5558
}
56-
/* check whether receive buffer is addressable. */
57-
memchecker_call(&opal_memchecker_base_isaddressable, buffer, count, datatype);
5859
} else {
5960
if (MPI_ROOT == root) {
6061
/* check whether root's send buffer is defined. */

ompi/mpi/c/exscan.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,14 @@ int MPI_Exscan(const void *sendbuf, void *recvbuf, int count,
5151

5252
MEMCHECKER(
5353
memchecker_datatype(datatype);
54-
memchecker_call(&opal_memchecker_base_isdefined, sendbuf, count, datatype);
54+
if (0 != ompi_comm_rank(comm)) {
55+
if (MPI_IN_PLACE != sendbuf) {
56+
memchecker_call(&opal_memchecker_base_isdefined, sendbuf, count, datatype);
57+
} else {
58+
memchecker_call(&opal_memchecker_base_isdefined, recvbuf, count, datatype);
59+
}
60+
}
61+
memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, count, datatype);
5562
memchecker_comm(comm);
5663
);
5764

ompi/mpi/c/iallgather.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* Copyright (c) 2012 Oak Ridge National Laboratory. All rights reserved.
1515
* Copyright (c) 2013 Los Alamos National Security, LLC. All rights
1616
* reserved.
17-
* Copyright (c) 2015-2019 Research Organization for Information Science
17+
* Copyright (c) 2015-2020 Research Organization for Information Science
1818
* and Technology (RIST). All rights reserved.
1919
* $COPYRIGHT$
2020
*
@@ -65,7 +65,7 @@ int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
6565
/* check whether the actual send buffer is defined. */
6666
if (MPI_IN_PLACE == sendbuf) {
6767
memchecker_call(&opal_memchecker_base_isdefined,
68-
(char *)(recvbuf)+rank*ext,
68+
(char *)(recvbuf)+rank*recvcount*ext,
6969
recvcount, recvtype);
7070
} else {
7171
memchecker_datatype(sendtype);

ompi/mpi/c/ialltoallw.c

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* Copyright (c) 2007 Cisco Systems, Inc. All rights reserved.
1414
* Copyright (c) 2012-2013 Los Alamos National Security, LLC. All rights
1515
* reserved.
16-
* Copyright (c) 2014-2019 Research Organization for Information Science
16+
* Copyright (c) 2014-2020 Research Organization for Information Science
1717
* and Technology (RIST). All rights reserved.
1818
* $COPYRIGHT$
1919
*
@@ -54,26 +54,20 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
5454
SPC_RECORD(OMPI_SPC_IALLTOALLW, 1);
5555

5656
MEMCHECKER(
57-
ptrdiff_t recv_ext;
58-
ptrdiff_t send_ext;
59-
60-
6157
memchecker_comm(comm);
6258

6359
size = OMPI_COMM_IS_INTER(comm)?ompi_comm_remote_size(comm):ompi_comm_size(comm);
6460
for ( i = 0; i < size; i++ ) {
6561
if (MPI_IN_PLACE != sendbuf) {
6662
memchecker_datatype(sendtypes[i]);
67-
ompi_datatype_type_extent(sendtypes[i], &send_ext);
6863
memchecker_call(&opal_memchecker_base_isdefined,
69-
(char *)(sendbuf)+sdispls[i]*send_ext,
64+
(char *)(sendbuf)+sdispls[i],
7065
sendcounts[i], sendtypes[i]);
7166
}
7267

7368
memchecker_datatype(recvtypes[i]);
74-
ompi_datatype_type_extent(recvtypes[i], &recv_ext);
7569
memchecker_call(&opal_memchecker_base_isaddressable,
76-
(char *)(recvbuf)+rdispls[i]*recv_ext,
70+
(char *)(recvbuf)+rdispls[i],
7771
recvcounts[i], recvtypes[i]);
7872
}
7973
);

ompi/mpi/c/ibcast.c

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Copyright (c) 2012 Oak Rigde National Laboratory. All rights reserved.
3-
* Copyright (c) 2015-2019 Research Organization for Information Science
3+
* Copyright (c) 2015-2020 Research Organization for Information Science
44
* and Technology (RIST). All rights reserved.
55
* Copyright (c) 2017-2018 The University of Tennessee and The University
66
* of Tennessee Research Foundation. All rights
@@ -42,8 +42,24 @@ int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype,
4242

4343
MEMCHECKER(
4444
memchecker_datatype(datatype);
45-
memchecker_call(&opal_memchecker_base_isdefined, buffer, count, datatype);
4645
memchecker_comm(comm);
46+
if (OMPI_COMM_IS_INTRA(comm)) {
47+
if (ompi_comm_rank(comm) == root) {
48+
/* check whether root's send buffer is defined. */
49+
memchecker_call(&opal_memchecker_base_isdefined, buffer, count, datatype);
50+
} else {
51+
/* check whether receive buffer is addressable. */
52+
memchecker_call(&opal_memchecker_base_isaddressable, buffer, count, datatype);
53+
}
54+
} else {
55+
if (MPI_ROOT == root) {
56+
/* check whether root's send buffer is defined. */
57+
memchecker_call(&opal_memchecker_base_isdefined, buffer, count, datatype);
58+
} else if (MPI_PROC_NULL != root) {
59+
/* check whether receive buffer is addressable. */
60+
memchecker_call(&opal_memchecker_base_isaddressable, buffer, count, datatype);
61+
}
62+
}
4763
);
4864

4965
if (MPI_PARAM_CHECK) {

ompi/mpi/c/iexscan.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,14 @@ int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count,
5252

5353
MEMCHECKER(
5454
memchecker_datatype(datatype);
55-
memchecker_call(&opal_memchecker_base_isdefined, sendbuf, count, datatype);
55+
if (0 != ompi_comm_rank(comm)) {
56+
if (MPI_IN_PLACE != sendbuf) {
57+
memchecker_call(&opal_memchecker_base_isdefined, sendbuf, count, datatype);
58+
} else {
59+
memchecker_call(&opal_memchecker_base_isdefined, recvbuf, count, datatype);
60+
}
61+
}
62+
memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, count, datatype);
5663
memchecker_comm(comm);
5764
);
5865

ompi/mpi/c/pack.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
1414
* Copyright (c) 2013 Los Alamos National Security, LLC. All rights
1515
* reserved.
16-
* Copyright (c) 2015-2017 Research Organization for Information Science
16+
* Copyright (c) 2015-2018 Research Organization for Information Science
1717
* and Technology (RIST). All rights reserved.
1818
* $COPYRIGHT$
1919
*
@@ -54,6 +54,7 @@ int MPI_Pack(const void *inbuf, int incount, MPI_Datatype datatype,
5454
MEMCHECKER(
5555
memchecker_datatype(datatype);
5656
memchecker_call(&opal_memchecker_base_isdefined, inbuf, incount, datatype);
57+
memchecker_call(&opal_memchecker_base_isaddressable, (void *)((char *)outbuf + *position), outsize, MPI_PACKED);
5758
memchecker_comm(comm);
5859
);
5960

ompi/mpi/c/unpack.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* Copyright (c) 2004-2005 The Regents of the University of California.
1111
* All rights reserved.
1212
* Copyright (c) 2006-2013 Cisco Systems, Inc. All rights reserved.
13-
* Copyright (c) 2015-2017 Research Organization for Information Science
13+
* Copyright (c) 2015-2018 Research Organization for Information Science
1414
* and Technology (RIST). All rights reserved.
1515
* $COPYRIGHT$
1616
*
@@ -51,7 +51,8 @@ int MPI_Unpack(const void *inbuf, int insize, int *position,
5151

5252
MEMCHECKER(
5353
memchecker_datatype(datatype);
54-
memchecker_call(&opal_memchecker_base_isdefined, outbuf, outcount, datatype);
54+
memchecker_call(&opal_memchecker_base_isdefined, inbuf, insize, MPI_PACKED);
55+
memchecker_call(&opal_memchecker_base_isaddressable, outbuf, outcount, datatype);
5556
memchecker_comm(comm);
5657
);
5758

0 commit comments

Comments
 (0)