int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) { int err; MEMCHECKER( memchecker_datatype(datatype); memchecker_comm(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); } );
int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) { size_t sendtype_size, recvtype_size; int err; 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); );
int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char **array_of_argv[], const int array_of_maxprocs[], const MPI_Info array_of_info[], int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) { int i=0, rc=0, rank=0, size=0, flag; ompi_communicator_t *newcomp=NULL; bool send_first=false; /* they are contacting us first */ char port_name[MPI_MAX_PORT_NAME]; bool non_mpi = false, cumulative = false; MEMCHECKER( memchecker_comm(comm); );
int MPI_Pack(const void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, int outsize, int *position, MPI_Comm comm) { int rc = MPI_SUCCESS, ret; opal_convertor_t local_convertor; struct iovec invec; unsigned int iov_count; size_t size; MEMCHECKER( memchecker_datatype(datatype); memchecker_call(&opal_memchecker_base_isdefined, inbuf, incount, datatype); memchecker_comm(comm); );
int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newcomm) { ompi_communicator_t *newcomp=MPI_COMM_NULL; ompi_proc_t **procs=NULL; int local_size, remote_size; int first; int total_size; int rc=MPI_SUCCESS; int thigh = high; ompi_group_t *new_group_pointer; MEMCHECKER( memchecker_comm(intercomm); );
int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) { size_t sendtype_size, recvtype_size; int err; MEMCHECKER( 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); );
int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) { int err; SPC_RECORD(OMPI_SPC_SCAN, 1); MEMCHECKER( memchecker_datatype(datatype); memchecker_comm(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); } );
int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm, MPI_Status *status) { ompi_request_t* req; int rc = MPI_SUCCESS; SPC_RECORD(OMPI_SPC_SENDRECV, 1); MEMCHECKER( memchecker_datatype(sendtype); memchecker_datatype(recvtype); memchecker_call(&opal_memchecker_base_isdefined, sendbuf, sendcount, sendtype); memchecker_comm(comm); );
int MPI_Scatterv(void *sendbuf, int *sendcounts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) { int i, size, err; MEMCHECKER( ptrdiff_t ext; size = ompi_comm_size(comm); ompi_ddt_type_extent(recvtype, &ext); memchecker_comm(comm); if(OMPI_COMM_IS_INTRA(comm)) { if(ompi_comm_rank(comm) == root) { memchecker_datatype(sendtype); /* check whether root's send buffer is defined. */ for (i = 0; i < size; i++) { memchecker_call(&opal_memchecker_base_isdefined, (char *)(sendbuf)+displs[i]*ext, sendcounts[i], sendtype); } if(MPI_IN_PLACE != recvbuf) { memchecker_datatype(recvtype); /* check whether receive buffer is addressable. */ memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype); } } else { memchecker_datatype(recvtype); /* check whether receive buffer is addressable. */ memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype); } } else { if(MPI_ROOT == root) { memchecker_datatype(sendtype); /* check whether root's send buffer is defined. */ for (i = 0; i < size; i++) { memchecker_call(&opal_memchecker_base_isdefined, (char *)(sendbuf)+displs[i]*ext, sendcounts[i], sendtype); } } else if (MPI_PROC_NULL != root) { /* check whether receive buffer is addressable. */ memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype); } } );
int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) { int err; MEMCHECKER( int rank; ptrdiff_t ext; rank = ompi_comm_rank(comm); ompi_datatype_type_extent(recvtype, &ext); memchecker_comm(comm); if(OMPI_COMM_IS_INTRA(comm)) { if(ompi_comm_rank(comm) == root) { /* check whether root's send buffer is defined. */ if (MPI_IN_PLACE == sendbuf) { memchecker_call(&opal_memchecker_base_isdefined, (char *)(recvbuf)+rank*ext, recvcount, recvtype); } else { memchecker_datatype(sendtype); memchecker_call(&opal_memchecker_base_isdefined, sendbuf, sendcount, sendtype); } memchecker_datatype(recvtype); /* check whether root's receive buffer is addressable. */ memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype); } else { memchecker_datatype(sendtype); /* check whether send buffer is defined on other processes. */ memchecker_call(&opal_memchecker_base_isdefined, sendbuf, sendcount, sendtype); } } else { if (MPI_ROOT == root) { memchecker_datatype(recvtype); /* check whether root's receive buffer is addressable. */ memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, recvtype); } else if (MPI_PROC_NULL != root) { memchecker_datatype(sendtype); /* check whether send buffer is defined. */ memchecker_call(&opal_memchecker_base_isdefined, sendbuf, sendcount, sendtype); } } );
int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request) { int err; MEMCHECKER( memchecker_datatype(datatype); memchecker_comm(comm); /* check whether receive buffer is defined. */ memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, count, datatype); /* check whether the actual send buffer is defined. */ if (MPI_IN_PLACE == sendbuf) { memchecker_call(&opal_memchecker_base_isdefined, recvbuf, count, datatype); } else { memchecker_call(&opal_memchecker_base_isdefined, sendbuf, count, datatype); } );
int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm) { int i, err; int indegree, outdegree, weighted; size_t sendtype_size, recvtype_size; bool zerosend=true, zerorecv=true; MEMCHECKER( ptrdiff_t recv_ext; ptrdiff_t send_ext; 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); if (MPI_SUCCESS == err) { if (MPI_IN_PLACE != sendbuf) { for ( i = 0; i < outdegree; i++ ) { /* check if send chunks are defined. */ memchecker_call(&opal_memchecker_base_isdefined, (char *)(sendbuf)+sdispls[i]*send_ext, sendcounts[i], sendtype); } } for ( i = 0; i < indegree; i++ ) { /* check if receive chunks are addressable. */ memchecker_call(&opal_memchecker_base_isaddressable, (char *)(recvbuf)+rdispls[i]*recv_ext, recvcounts[i], recvtype); } } );
int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) { int err; MEMCHECKER( memchecker_comm(comm); memchecker_datatype(datatype); /* check receive buffer of current proccess, whether it's addressable. */ memchecker_call(&opal_memchecker_base_isaddressable, recvbuf, recvcount, datatype); /* check whether the actual send buffer is defined. */ if(MPI_IN_PLACE == sendbuf) { memchecker_call(&opal_memchecker_base_isdefined, recvbuf, recvcount, datatype); } else { memchecker_call(&opal_memchecker_base_isdefined, sendbuf, recvcount, datatype); } );
int MPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[], const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) { int i, err; int indegree, outdegree; SPC_RECORD(OMPI_SPC_NEIGHBOR_ALLTOALLW, 1); MEMCHECKER( ptrdiff_t recv_ext; ptrdiff_t send_ext; memchecker_comm(comm); err = mca_topo_base_neighbor_count (comm, &indegree, &outdegree); if (MPI_SUCCESS == err) { if (MPI_IN_PLACE != sendbuf) { for ( i = 0; i < outdegree; i++ ) { 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]); } } for ( i = 0; i < indegree; i++ ) { memchecker_datatype(recvtypes[i]); ompi_datatype_type_extent(recvtypes[i], &recv_ext); memchecker_call(&opal_memchecker_base_isaddressable, (char *)(recvbuf)+sdispls[i]*recv_ext, recvcounts[i], recvtypes[i]); } } );
int MPIX_Allgatherv_init(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Info info, MPI_Request *request) { int i, size, err; SPC_RECORD(OMPI_SPC_ALLGATHERV_INIT, 1); MEMCHECKER( int rank; ptrdiff_t ext; rank = ompi_comm_rank(comm); size = ompi_comm_size(comm); ompi_datatype_type_extent(recvtype, &ext); memchecker_datatype(recvtype); memchecker_comm (comm); /* check whether the receive buffer is addressable. */ for (i = 0; i < size; i++) { memchecker_call(&opal_memchecker_base_isaddressable, (char *)(recvbuf)+displs[i]*ext, recvcounts[i], recvtype); } /* check whether the actual send buffer is defined. */ if (MPI_IN_PLACE == sendbuf) { memchecker_call(&opal_memchecker_base_isdefined, (char *)(recvbuf)+displs[rank]*ext, recvcounts[rank], recvtype); } else { memchecker_datatype(sendtype); memchecker_call(&opal_memchecker_base_isdefined, sendbuf, sendcount, sendtype); } );
int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request) { int i, size, err; size_t sendtype_size, recvtype_size; MEMCHECKER( ptrdiff_t recv_ext; ptrdiff_t send_ext; 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); for ( i = 0; i < size; i++ ) { if (MPI_IN_PLACE != sendbuf) { /* check if send chunks are defined. */ memchecker_call(&opal_memchecker_base_isdefined, (char *)(sendbuf)+sdispls[i]*send_ext, sendcounts[i], sendtype); } /* check if receive chunks are addressable. */ memchecker_call(&opal_memchecker_base_isaddressable, (char *)(recvbuf)+rdispls[i]*recv_ext, recvcounts[i], recvtype); } );
int MPI_Comm_create_group (MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm) { int rc; MEMCHECKER( memchecker_comm(comm); );