1
1

Fixes MEMCHECKER vs MPI_IN_PLACE in *alltoall*

cmr=v1.8.2:reviewer=bosilca

This commit was SVN r31924.
Этот коммит содержится в:
Gilles Gouaillardet 2014-06-02 04:43:48 +00:00
родитель c930e44bad
Коммит 1a17a2a960
12 изменённых файлов: 110 добавлений и 82 удалений

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

@ -51,11 +51,13 @@ int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
int err; int err;
MEMCHECKER( MEMCHECKER(
memchecker_datatype(sendtype);
memchecker_datatype(recvtype);
memchecker_call(&opal_memchecker_base_isdefined, sendbuf, sendcount, sendtype);
memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype);
memchecker_comm(comm); memchecker_comm(comm);
if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtype);
memchecker_call(&opal_memchecker_base_isdefined, (void *)sendbuf, sendcount, sendtype);
}
memchecker_datatype(recvtype);
memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype);
); );
if (MPI_PARAM_CHECK) { if (MPI_PARAM_CHECK) {

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

@ -56,20 +56,23 @@ int MPI_Alltoallv(const void *sendbuf, const int sendcounts[],
ptrdiff_t recv_ext; ptrdiff_t recv_ext;
ptrdiff_t send_ext; ptrdiff_t send_ext;
memchecker_datatype(sendtype); if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtype);
ompi_datatype_type_extent(sendtype, &send_ext);
}
memchecker_datatype(recvtype); memchecker_datatype(recvtype);
ompi_datatype_type_extent(recvtype, &recv_ext); ompi_datatype_type_extent(recvtype, &recv_ext);
ompi_datatype_type_extent(sendtype, &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++ ) {
/* check if send chunks are defined. */ if (MPI_IN_PLACE != sendbuf) {
memchecker_call(&opal_memchecker_base_isdefined, /* check if send chunks are defined. */
(char *)(sendbuf)+sdispls[i]*send_ext, memchecker_call(&opal_memchecker_base_isdefined,
sendcounts[i], sendtype); (char *)(sendbuf)+sdispls[i]*send_ext,
sendcounts[i], sendtype);
}
/* check if receive chunks are addressable. */ /* check if receive chunks are addressable. */
memchecker_call(&opal_memchecker_base_isaddressable, memchecker_call(&opal_memchecker_base_isaddressable,
(char *)(recvbuf)+rdispls[i]*recv_ext, (char *)(recvbuf)+rdispls[i]*recv_ext,

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

@ -60,17 +60,17 @@ int MPI_Alltoallw(const void *sendbuf, const int sendcounts[],
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++ ) {
memchecker_datatype(sendtypes[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,
sendcounts[i], sendtypes[i]);
}
memchecker_datatype(recvtypes[i]); memchecker_datatype(recvtypes[i]);
ompi_datatype_type_extent(sendtypes[i], &send_ext);
ompi_datatype_type_extent(recvtypes[i], &recv_ext); ompi_datatype_type_extent(recvtypes[i], &recv_ext);
memchecker_call(&opal_memchecker_base_isdefined,
(char *)(sendbuf)+sdispls[i]*send_ext,
sendcounts[i], sendtypes[i]);
memchecker_call(&opal_memchecker_base_isaddressable, memchecker_call(&opal_memchecker_base_isaddressable,
(char *)(recvbuf)+sdispls[i]*recv_ext, (char *)(recvbuf)+rdispls[i]*recv_ext,
recvcounts[i], recvtypes[i]); recvcounts[i], recvtypes[i]);
} }
); );

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

@ -52,11 +52,13 @@ int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
int err; int err;
MEMCHECKER( MEMCHECKER(
memchecker_datatype(sendtype);
memchecker_datatype(recvtype);
memchecker_call(&opal_memchecker_base_isdefined, sendbuf, sendcount, sendtype);
memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype);
memchecker_comm(comm); memchecker_comm(comm);
if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtype);
memchecker_call(&opal_memchecker_base_isdefined, (void *)sendbuf, sendcount, sendtype);
}
memchecker_datatype(recvtype);
memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype);
); );
if (MPI_PARAM_CHECK) { if (MPI_PARAM_CHECK) {

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

@ -55,20 +55,24 @@ int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispl
ptrdiff_t recv_ext; ptrdiff_t recv_ext;
ptrdiff_t send_ext; ptrdiff_t send_ext;
memchecker_datatype(sendtype);
memchecker_datatype(recvtype);
ompi_datatype_type_extent(recvtype, &recv_ext);
ompi_datatype_type_extent(sendtype, &send_ext);
memchecker_comm(comm); memchecker_comm(comm);
if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtype);
ompi_datatype_type_extent(sendtype, &send_ext);
}
memchecker_datatype(recvtype);
ompi_datatype_type_extent(recvtype, &recv_ext);
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++ ) {
/* check if send chunks are defined. */ if (MPI_IN_PLACE != sendbuf) {
memchecker_call(&opal_memchecker_base_isdefined, /* check if send chunks are defined. */
(char *)(sendbuf)+sdispls[i]*send_ext, memchecker_call(&opal_memchecker_base_isdefined,
sendcounts[i], sendtype); (char *)(sendbuf)+sdispls[i]*send_ext,
sendcounts[i], sendtype);
}
/* check if receive chunks are addressable. */ /* check if receive chunks are addressable. */
memchecker_call(&opal_memchecker_base_isaddressable, memchecker_call(&opal_memchecker_base_isaddressable,
(char *)(recvbuf)+rdispls[i]*recv_ext, (char *)(recvbuf)+rdispls[i]*recv_ext,

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

@ -60,15 +60,16 @@ int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispl
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++ ) {
memchecker_datatype(sendtypes[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,
sendcounts[i], sendtypes[i]);
}
memchecker_datatype(recvtypes[i]); memchecker_datatype(recvtypes[i]);
ompi_datatype_type_extent(sendtypes[i], &send_ext);
ompi_datatype_type_extent(recvtypes[i], &recv_ext); ompi_datatype_type_extent(recvtypes[i], &recv_ext);
memchecker_call(&opal_memchecker_base_isdefined,
(char *)(sendbuf)+sdispls[i]*send_ext,
sendcounts[i], sendtypes[i]);
memchecker_call(&opal_memchecker_base_isaddressable, memchecker_call(&opal_memchecker_base_isaddressable,
(char *)(recvbuf)+sdispls[i]*recv_ext, (char *)(recvbuf)+sdispls[i]*recv_ext,
recvcounts[i], recvtypes[i]); recvcounts[i], recvtypes[i]);

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

@ -52,11 +52,13 @@ int MPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype send
int err; int err;
MEMCHECKER( MEMCHECKER(
memchecker_datatype(sendtype);
memchecker_datatype(recvtype);
memchecker_call(&opal_memchecker_base_isdefined, sendbuf, sendcount, sendtype);
memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype);
memchecker_comm(comm); memchecker_comm(comm);
if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtype);
memchecker_call(&opal_memchecker_base_isdefined, (void *)sendbuf, sendcount, sendtype);
}
memchecker_datatype(recvtype);
memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype);
); );
if (MPI_PARAM_CHECK) { if (MPI_PARAM_CHECK) {

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

@ -56,21 +56,25 @@ int MPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const i
ptrdiff_t recv_ext; ptrdiff_t recv_ext;
ptrdiff_t send_ext; ptrdiff_t send_ext;
memchecker_datatype(sendtype);
memchecker_datatype(recvtype);
ompi_datatype_type_extent(recvtype, &recv_ext);
ompi_datatype_type_extent(sendtype, &send_ext);
memchecker_comm(comm); memchecker_comm(comm);
if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtype);
ompi_datatype_type_extent(recvtype, &recv_ext);
}
memchecker_datatype(recvtype);
ompi_datatype_type_extent(sendtype, &send_ext);
err = ompi_comm_neighbors_count(comm, &indegree, &outdegree, &weighted); err = ompi_comm_neighbors_count(comm, &indegree, &outdegree, &weighted);
if (MPI_SUCCESS == err) { if (MPI_SUCCESS == err) {
for ( i = 0; i < outdegree; i++ ) { if (MPI_IN_PLACE != sendbuf) {
/* check if send chunks are defined. */ for ( i = 0; i < outdegree; i++ ) {
memchecker_call(&opal_memchecker_base_isdefined, /* check if send chunks are defined. */
(char *)(sendbuf)+sdispls[i]*send_ext, memchecker_call(&opal_memchecker_base_isdefined,
sendcounts[i], sendtype); (char *)(sendbuf)+sdispls[i]*send_ext,
sendcounts[i], sendtype);
}
} }
for ( i = 0; i < indegree; i++ ) { for ( i = 0; i < indegree; i++ ) {
/* check if receive chunks are addressable. */ /* check if receive chunks are addressable. */

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

@ -60,14 +60,16 @@ int MPI_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[], const M
err = ompi_comm_neighbors_count(comm, &indegree, &outdegree, &weighted); err = ompi_comm_neighbors_count(comm, &indegree, &outdegree, &weighted);
if (MPI_SUCCESS == err) { if (MPI_SUCCESS == err) {
for ( i = 0; i < outdegree; i++ ) { if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtypes[i]); for ( i = 0; i < outdegree; i++ ) {
memchecker_datatype(sendtypes[i]);
ompi_datatype_type_extent(sendtypes[i], &send_ext); 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]*send_ext,
sendcounts[i], sendtypes[i]); sendcounts[i], sendtypes[i]);
}
} }
for ( i = 0; i < indegree; i++ ) { for ( i = 0; i < indegree; i++ ) {
memchecker_datatype(recvtypes[i]); memchecker_datatype(recvtypes[i]);

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

@ -51,11 +51,13 @@ int MPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendt
int err; int err;
MEMCHECKER( MEMCHECKER(
memchecker_datatype(sendtype);
memchecker_datatype(recvtype);
memchecker_call(&opal_memchecker_base_isdefined, sendbuf, sendcount, sendtype);
memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype);
memchecker_comm(comm); memchecker_comm(comm);
if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtype);
memchecker_call(&opal_memchecker_base_isdefined, (void *)sendbuf, sendcount, sendtype);
}
memchecker_datatype(recvtype);
memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype);
); );
if (MPI_PARAM_CHECK) { if (MPI_PARAM_CHECK) {

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

@ -58,21 +58,25 @@ int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const in
ptrdiff_t recv_ext; ptrdiff_t recv_ext;
ptrdiff_t send_ext; ptrdiff_t send_ext;
memchecker_datatype(sendtype);
memchecker_datatype(recvtype);
ompi_datatype_type_extent(recvtype, &recv_ext);
ompi_datatype_type_extent(sendtype, &send_ext);
memchecker_comm(comm); memchecker_comm(comm);
if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtype);
ompi_datatype_type_extent(recvtype, &recv_ext);
}
memchecker_datatype(recvtype);
ompi_datatype_type_extent(sendtype, &send_ext);
err = ompi_comm_neighbors_count(comm, &indegree, &outdegree, &weighted); err = ompi_comm_neighbors_count(comm, &indegree, &outdegree, &weighted);
if (MPI_SUCCESS == err) { if (MPI_SUCCESS == err) {
for ( i = 0; i < outdegree; i++ ) { if (MPI_IN_PLACE != sendbuf) {
/* check if send chunks are defined. */ for ( i = 0; i < outdegree; i++ ) {
memchecker_call(&opal_memchecker_base_isdefined, /* check if send chunks are defined. */
(char *)(sendbuf)+sdispls[i]*send_ext, memchecker_call(&opal_memchecker_base_isdefined,
sendcounts[i], sendtype); (char *)(sendbuf)+sdispls[i]*send_ext,
sendcounts[i], sendtype);
}
} }
for ( i = 0; i < indegree; i++ ) { for ( i = 0; i < indegree; i++ ) {
/* check if receive chunks are addressable. */ /* check if receive chunks are addressable. */

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

@ -62,14 +62,16 @@ int MPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MP
err = ompi_comm_neighbors_count(comm, &indegree, &outdegree, &weighted); err = ompi_comm_neighbors_count(comm, &indegree, &outdegree, &weighted);
if (MPI_SUCCESS == err) { if (MPI_SUCCESS == err) {
for ( i = 0; i < outdegree; i++ ) { if (MPI_IN_PLACE != sendbuf) {
memchecker_datatype(sendtypes[i]); for ( i = 0; i < outdegree; i++ ) {
memchecker_datatype(sendtypes[i]);
ompi_datatype_type_extent(sendtypes[i], &send_ext); 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]*send_ext,
sendcounts[i], sendtypes[i]); sendcounts[i], sendtypes[i]);
}
} }
for ( i = 0; i < indegree; i++ ) { for ( i = 0; i < indegree; i++ ) {
memchecker_datatype(recvtypes[i]); memchecker_datatype(recvtypes[i]);