X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0fabb12fc92ad7f1d47ec977e2d7e4eb36f16977..294a7c93ce4eacc0310a7f3f261639afbbe011d2:/src/smpi/smpi_pmpi.cpp diff --git a/src/smpi/smpi_pmpi.cpp b/src/smpi/smpi_pmpi.cpp index 15bb7391f1..6002014fed 100644 --- a/src/smpi/smpi_pmpi.cpp +++ b/src/smpi/smpi_pmpi.cpp @@ -4,7 +4,6 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include -#include #include #include "private.h" @@ -385,8 +384,8 @@ int PMPI_Group_excl(MPI_Group group, int n, int *ranks, MPI_Group * newgroup) } else { if (n == 0) { *newgroup = group; - if (group != smpi_comm_group(MPI_COMM_WORLD) - && group != smpi_comm_group(MPI_COMM_SELF) && group != MPI_GROUP_EMPTY) + if (group != MPI_COMM_WORLD->group() + && group != MPI_COMM_SELF->group() && group != MPI_GROUP_EMPTY) group->use(); return MPI_SUCCESS; } else if (n == group->size()) { @@ -423,7 +422,7 @@ int PMPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group * n } else { if (n == 0) { *newgroup = group; - if (group != smpi_comm_group(MPI_COMM_WORLD) && group != smpi_comm_group(MPI_COMM_SELF) && + if (group != MPI_COMM_WORLD->group() && group != MPI_COMM_SELF->group() && group != MPI_GROUP_EMPTY) group->use(); return MPI_SUCCESS; @@ -440,7 +439,7 @@ int PMPI_Comm_rank(MPI_Comm comm, int *rank) } else if (rank == nullptr) { return MPI_ERR_ARG; } else { - *rank = smpi_comm_rank(comm); + *rank = comm->rank(); return MPI_SUCCESS; } } @@ -452,7 +451,7 @@ int PMPI_Comm_size(MPI_Comm comm, int *size) } else if (size == nullptr) { return MPI_ERR_ARG; } else { - *size = smpi_comm_size(comm); + *size = comm->size(); return MPI_SUCCESS; } } @@ -464,7 +463,7 @@ int PMPI_Comm_get_name (MPI_Comm comm, char* name, int* len) } else if (name == nullptr || len == nullptr) { return MPI_ERR_ARG; } else { - smpi_comm_get_name(comm, name, len); + comm->get_name(name, len); return MPI_SUCCESS; } } @@ -476,8 +475,8 @@ int PMPI_Comm_group(MPI_Comm comm, MPI_Group * group) } else if (group == nullptr) { return MPI_ERR_ARG; } else { - *group = smpi_comm_group(comm); - if (*group != smpi_comm_group(MPI_COMM_WORLD) && *group != MPI_GROUP_NULL && *group != MPI_GROUP_EMPTY) + *group = comm->group(); + if (*group != MPI_COMM_WORLD->group() && *group != MPI_GROUP_NULL && *group != MPI_GROUP_EMPTY) (*group)->use(); return MPI_SUCCESS; } @@ -493,7 +492,7 @@ int PMPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result) if (comm1 == comm2) { /* Same communicators means same groups */ *result = MPI_IDENT; } else { - *result = smpi_comm_group(comm1)->compare(smpi_comm_group(comm2)); + *result = comm1->group()->compare(comm2->group()); if (*result == MPI_IDENT) { *result = MPI_CONGRUENT; } @@ -509,7 +508,7 @@ int PMPI_Comm_dup(MPI_Comm comm, MPI_Comm * newcomm) } else if (newcomm == nullptr) { return MPI_ERR_ARG; } else { - return smpi_comm_dup(comm, newcomm); + return comm->dup(newcomm); } } @@ -526,7 +525,7 @@ int PMPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm * newcomm) return MPI_SUCCESS; }else{ group->use(); - *newcomm = smpi_comm_new(group, nullptr); + *newcomm = new simgrid::SMPI::Comm(group, nullptr); return MPI_SUCCESS; } } @@ -538,7 +537,7 @@ int PMPI_Comm_free(MPI_Comm * comm) } else if (*comm == MPI_COMM_NULL) { return MPI_ERR_COMM; } else { - smpi_comm_destroy(*comm); + (*comm)->destroy(); *comm = MPI_COMM_NULL; return MPI_SUCCESS; } @@ -552,7 +551,7 @@ int PMPI_Comm_disconnect(MPI_Comm * comm) } else if (*comm == MPI_COMM_NULL) { return MPI_ERR_COMM; } else { - smpi_comm_destroy(*comm); + (*comm)->destroy(); *comm = MPI_COMM_NULL; return MPI_SUCCESS; } @@ -568,7 +567,7 @@ int PMPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm* comm_out) } else if (comm == MPI_COMM_NULL) { retval = MPI_ERR_COMM; } else { - *comm_out = smpi_comm_split(comm, color, key); + *comm_out = comm->split(color, key); retval = MPI_SUCCESS; } smpi_bench_begin(); @@ -726,7 +725,7 @@ int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MP } else if (src == MPI_PROC_NULL) { *request = MPI_REQUEST_NULL; retval = MPI_SUCCESS; - } else if (src!=MPI_ANY_SOURCE && (src >= smpi_comm_group(comm)->size() || src <0)){ + } else if (src!=MPI_ANY_SOURCE && (src >= comm->group()->size() || src <0)){ retval = MPI_ERR_RANK; } else if ((count < 0) || (buf==nullptr && count > 0)) { retval = MPI_ERR_COUNT; @@ -737,7 +736,7 @@ int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MP } else { int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int src_traced = smpi_comm_group(comm)->index(src); + int src_traced = comm->group()->index(src); instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); extra->type = TRACING_IRECV; @@ -777,7 +776,7 @@ int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MP } else if (dst == MPI_PROC_NULL) { *request = MPI_REQUEST_NULL; retval = MPI_SUCCESS; - } else if (dst >= smpi_comm_group(comm)->size() || dst <0){ + } else if (dst >= comm->group()->size() || dst <0){ retval = MPI_ERR_RANK; } else if ((count < 0) || (buf==nullptr && count > 0)) { retval = MPI_ERR_COUNT; @@ -787,7 +786,7 @@ int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MP retval = MPI_ERR_TAG; } else { int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int dst_traced = smpi_comm_group(comm)->index(dst); + int dst_traced = comm->group()->index(dst); instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); extra->type = TRACING_ISEND; extra->src = rank; @@ -826,7 +825,7 @@ int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, M } else if (dst == MPI_PROC_NULL) { *request = MPI_REQUEST_NULL; retval = MPI_SUCCESS; - } else if (dst >= smpi_comm_group(comm)->size() || dst <0){ + } else if (dst >= comm->group()->size() || dst <0){ retval = MPI_ERR_RANK; } else if ((count < 0)|| (buf==nullptr && count > 0)) { retval = MPI_ERR_COUNT; @@ -836,7 +835,7 @@ int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, M retval = MPI_ERR_TAG; } else { int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int dst_traced = smpi_comm_group(comm)->index(dst); + int dst_traced = comm->group()->index(dst); instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); extra->type = TRACING_ISSEND; extra->src = rank; @@ -874,7 +873,7 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI smpi_empty_status(status); status->MPI_SOURCE = MPI_PROC_NULL; retval = MPI_SUCCESS; - } else if (src!=MPI_ANY_SOURCE && (src >= smpi_comm_group(comm)->size() || src <0)){ + } else if (src!=MPI_ANY_SOURCE && (src >= comm->group()->size() || src <0)){ retval = MPI_ERR_RANK; } else if ((count < 0) || (buf==nullptr && count > 0)) { retval = MPI_ERR_COUNT; @@ -884,7 +883,7 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI retval = MPI_ERR_TAG; } else { int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int src_traced = smpi_comm_group(comm)->index(src); + int src_traced = comm->group()->index(src); instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1); extra->type = TRACING_RECV; extra->src = src_traced; @@ -902,7 +901,7 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI // the src may not have been known at the beginning of the recv (MPI_ANY_SOURCE) if (status != MPI_STATUS_IGNORE) { - src_traced = smpi_comm_group(comm)->index(status->MPI_SOURCE); + src_traced = comm->group()->index(status->MPI_SOURCE); if (!TRACE_smpi_view_internals()) { TRACE_smpi_recv(rank, src_traced, rank, tag); } @@ -924,7 +923,7 @@ int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI retval = MPI_ERR_COMM; } else if (dst == MPI_PROC_NULL) { retval = MPI_SUCCESS; - } else if (dst >= smpi_comm_group(comm)->size() || dst <0){ + } else if (dst >= comm->group()->size() || dst <0){ retval = MPI_ERR_RANK; } else if ((count < 0) || (buf == nullptr && count > 0)) { retval = MPI_ERR_COUNT; @@ -934,7 +933,7 @@ int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI retval = MPI_ERR_TAG; } else { int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int dst_traced = smpi_comm_group(comm)->index(dst); + int dst_traced = comm->group()->index(dst); instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); extra->type = TRACING_SEND; extra->src = rank; @@ -970,7 +969,7 @@ int PMPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MP retval = MPI_ERR_COMM; } else if (dst == MPI_PROC_NULL) { retval = MPI_SUCCESS; - } else if (dst >= smpi_comm_group(comm)->size() || dst <0){ + } else if (dst >= comm->group()->size() || dst <0){ retval = MPI_ERR_RANK; } else if ((count < 0) || (buf==nullptr && count > 0)) { retval = MPI_ERR_COUNT; @@ -980,7 +979,7 @@ int PMPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MP retval = MPI_ERR_TAG; } else { int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int dst_traced = smpi_comm_group(comm)->index(dst); + int dst_traced = comm->group()->index(dst); instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); extra->type = TRACING_SSEND; extra->src = rank; @@ -1020,8 +1019,8 @@ int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dst, smpi_empty_status(status); status->MPI_SOURCE = MPI_PROC_NULL; retval = MPI_SUCCESS; - }else if (dst >= smpi_comm_group(comm)->size() || dst <0 || - (src!=MPI_ANY_SOURCE && (src >= smpi_comm_group(comm)->size() || src <0))){ + }else if (dst >= comm->group()->size() || dst <0 || + (src!=MPI_ANY_SOURCE && (src >= comm->group()->size() || src <0))){ retval = MPI_ERR_RANK; } else if ((sendcount < 0 || recvcount<0) || (sendbuf==nullptr && sendcount > 0) || (recvbuf==nullptr && recvcount>0)) { @@ -1031,8 +1030,8 @@ int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dst, } else { int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int dst_traced = smpi_comm_group(comm)->index(dst); - int src_traced = smpi_comm_group(comm)->index(src); + int dst_traced = comm->group()->index(dst); + int src_traced = comm->group()->index(src); instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); extra->type = TRACING_SENDRECV; extra->src = src_traced; @@ -1215,7 +1214,7 @@ int PMPI_Wait(MPI_Request * request, MPI_Status * status) if (is_wait_for_receive) { if(src_traced==MPI_ANY_SOURCE) src_traced = (status!=MPI_STATUS_IGNORE) ? - smpi_comm_group(comm)->rank(status->MPI_SOURCE) : + comm->group()->rank(status->MPI_SOURCE) : src_traced; TRACE_smpi_recv(rank, src_traced, dst_traced, tag_traced); } @@ -1265,7 +1264,7 @@ int PMPI_Waitany(int count, MPI_Request requests[], int *index, MPI_Status * sta if (is_wait_for_receive) { if(savedvals[*index].src==MPI_ANY_SOURCE) src_traced = (status != MPI_STATUSES_IGNORE) - ? smpi_comm_group(savedvals[*index].comm)->rank(status->MPI_SOURCE) + ? savedvals[*index].comm->group()->rank(status->MPI_SOURCE) : savedvals[*index].src; TRACE_smpi_recv(rank_traced, src_traced, dst_traced, savedvals[*index].tag); } @@ -1316,7 +1315,7 @@ int PMPI_Waitall(int count, MPI_Request requests[], MPI_Status status[]) if (is_wait_for_receive) { if(src_traced==MPI_ANY_SOURCE) src_traced = (status!=MPI_STATUSES_IGNORE) ? - smpi_comm_group(savedvals[i].comm)->rank(status[i].MPI_SOURCE) : savedvals[i].src; + savedvals[i].comm->group()->rank(status[i].MPI_SOURCE) : savedvals[i].src; TRACE_smpi_recv(rank_traced, src_traced, dst_traced,savedvals[i].tag); } } @@ -1371,7 +1370,7 @@ int PMPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm c retval = MPI_ERR_ARG; } else { int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int root_traced = smpi_comm_group(comm)->index(root); + int root_traced = comm->group()->index(root); instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1); extra->type = TRACING_BCAST; @@ -1383,7 +1382,7 @@ int PMPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm c dt_size_send = smpi_datatype_size(datatype); extra->send_size = count * dt_size_send; TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__, extra); - if (smpi_comm_size(comm) > 1) + if (comm->size() > 1) mpi_coll_bcast_fun(buf, count, datatype, root, comm); retval = MPI_SUCCESS; @@ -1427,21 +1426,21 @@ int PMPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbu if (comm == MPI_COMM_NULL) { retval = MPI_ERR_COMM; } else if ((( sendbuf != MPI_IN_PLACE) && (sendtype == MPI_DATATYPE_NULL)) || - ((smpi_comm_rank(comm) == root) && (recvtype == MPI_DATATYPE_NULL))){ + ((comm->rank() == root) && (recvtype == MPI_DATATYPE_NULL))){ retval = MPI_ERR_TYPE; - } else if ((( sendbuf != MPI_IN_PLACE) && (sendcount <0)) || ((smpi_comm_rank(comm) == root) && (recvcount <0))){ + } else if ((( sendbuf != MPI_IN_PLACE) && (sendcount <0)) || ((comm->rank() == root) && (recvcount <0))){ retval = MPI_ERR_COUNT; } else { char* sendtmpbuf = static_cast(sendbuf); int sendtmpcount = sendcount; MPI_Datatype sendtmptype = sendtype; - if( (smpi_comm_rank(comm) == root) && (sendbuf == MPI_IN_PLACE )) { + if( (comm->rank() == root) && (sendbuf == MPI_IN_PLACE )) { sendtmpcount=0; sendtmptype=recvtype; } int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int root_traced = smpi_comm_group(comm)->index(root); + int root_traced = comm->group()->index(root); instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1); extra->type = TRACING_GATHER; extra->root = root_traced; @@ -1453,7 +1452,7 @@ int PMPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbu extra->send_size = sendtmpcount * dt_size_send; extra->datatype2 = encode_datatype(recvtype, &known); int dt_size_recv = 1; - if ((smpi_comm_rank(comm) == root) && known == 0) + if ((comm->rank() == root) && known == 0) dt_size_recv = smpi_datatype_size(recvtype); extra->recv_size = recvcount * dt_size_recv; @@ -1479,7 +1478,7 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recv if (comm == MPI_COMM_NULL) { retval = MPI_ERR_COMM; } else if ((( sendbuf != MPI_IN_PLACE) && (sendtype == MPI_DATATYPE_NULL)) || - ((smpi_comm_rank(comm) == root) && (recvtype == MPI_DATATYPE_NULL))){ + ((comm->rank() == root) && (recvtype == MPI_DATATYPE_NULL))){ retval = MPI_ERR_TYPE; } else if (( sendbuf != MPI_IN_PLACE) && (sendcount <0)){ retval = MPI_ERR_COUNT; @@ -1489,15 +1488,15 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recv char* sendtmpbuf = static_cast(sendbuf); int sendtmpcount = sendcount; MPI_Datatype sendtmptype = sendtype; - if( (smpi_comm_rank(comm) == root) && (sendbuf == MPI_IN_PLACE )) { + if( (comm->rank() == root) && (sendbuf == MPI_IN_PLACE )) { sendtmpcount=0; sendtmptype=recvtype; } int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int root_traced = smpi_comm_group(comm)->index(root); + int root_traced = comm->group()->index(root); int i = 0; - int size = smpi_comm_size(comm); + int size = comm->size(); instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1); extra->type = TRACING_GATHERV; extra->num_processes = size; @@ -1512,7 +1511,7 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recv int dt_size_recv = 1; if (known == 0) dt_size_recv = smpi_datatype_size(recvtype); - if ((smpi_comm_rank(comm) == root)) { + if ((comm->rank() == root)) { extra->recvcounts = xbt_new(int, size); for (i = 0; i < size; i++) // copy data to avoid bad free extra->recvcounts[i] = recvcounts[i] * dt_size_recv; @@ -1545,7 +1544,7 @@ int PMPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype, retval = MPI_ERR_COUNT; } else { if(sendbuf == MPI_IN_PLACE) { - sendbuf=static_cast(recvbuf)+smpi_datatype_get_extent(recvtype)*recvcount*smpi_comm_rank(comm); + sendbuf=static_cast(recvbuf)+smpi_datatype_get_extent(recvtype)*recvcount*comm->rank(); sendcount=recvcount; sendtype=recvtype; } @@ -1592,13 +1591,13 @@ int PMPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, } else { if(sendbuf == MPI_IN_PLACE) { - sendbuf=static_cast(recvbuf)+smpi_datatype_get_extent(recvtype)*displs[smpi_comm_rank(comm)]; - sendcount=recvcounts[smpi_comm_rank(comm)]; + sendbuf=static_cast(recvbuf)+smpi_datatype_get_extent(recvtype)*displs[comm->rank()]; + sendcount=recvcounts[comm->rank()]; sendtype=recvtype; } int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; int i = 0; - int size = smpi_comm_size(comm); + int size = comm->size(); instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1); extra->type = TRACING_ALLGATHERV; extra->num_processes = size; @@ -1636,11 +1635,11 @@ int PMPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, if (comm == MPI_COMM_NULL) { retval = MPI_ERR_COMM; - } else if (((smpi_comm_rank(comm) == root) && (!is_datatype_valid(sendtype))) || + } else if (((comm->rank() == root) && (!is_datatype_valid(sendtype))) || ((recvbuf != MPI_IN_PLACE) && (!is_datatype_valid(recvtype)))) { retval = MPI_ERR_TYPE; } else if ((sendbuf == recvbuf) || - ((smpi_comm_rank(comm)==root) && sendcount>0 && (sendbuf == nullptr))){ + ((comm->rank()==root) && sendcount>0 && (sendbuf == nullptr))){ retval = MPI_ERR_BUFFER; }else { @@ -1649,14 +1648,14 @@ int PMPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, recvcount = sendcount; } int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int root_traced = smpi_comm_group(comm)->index(root); + int root_traced = comm->group()->index(root); instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1); extra->type = TRACING_SCATTER; extra->root = root_traced; int known = 0; extra->datatype1 = encode_datatype(sendtype, &known); int dt_size_send = 1; - if ((smpi_comm_rank(comm) == root) && known == 0) + if ((comm->rank() == root) && known == 0) dt_size_send = smpi_datatype_size(sendtype); extra->send_size = sendcount * dt_size_send; extra->datatype2 = encode_datatype(recvtype, &known); @@ -1686,18 +1685,18 @@ int PMPI_Scatterv(void *sendbuf, int *sendcounts, int *displs, retval = MPI_ERR_COMM; } else if (sendcounts == nullptr || displs == nullptr) { retval = MPI_ERR_ARG; - } else if (((smpi_comm_rank(comm) == root) && (sendtype == MPI_DATATYPE_NULL)) || + } else if (((comm->rank() == root) && (sendtype == MPI_DATATYPE_NULL)) || ((recvbuf != MPI_IN_PLACE) && (recvtype == MPI_DATATYPE_NULL))) { retval = MPI_ERR_TYPE; } else { if (recvbuf == MPI_IN_PLACE) { recvtype = sendtype; - recvcount = sendcounts[smpi_comm_rank(comm)]; + recvcount = sendcounts[comm->rank()]; } int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int root_traced = smpi_comm_group(comm)->index(root); + int root_traced = comm->group()->index(root); int i = 0; - int size = smpi_comm_size(comm); + int size = comm->size(); instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1); extra->type = TRACING_SCATTERV; extra->num_processes = size; @@ -1707,7 +1706,7 @@ int PMPI_Scatterv(void *sendbuf, int *sendcounts, int *displs, int dt_size_send = 1; if (known == 0) dt_size_send = smpi_datatype_size(sendtype); - if ((smpi_comm_rank(comm) == root)) { + if ((comm->rank() == root)) { extra->sendcounts = xbt_new(int, size); for (i = 0; i < size; i++) // copy data to avoid bad free extra->sendcounts[i] = sendcounts[i] * dt_size_send; @@ -1741,7 +1740,7 @@ int PMPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, retval = MPI_ERR_ARG; } else { int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int root_traced = smpi_comm_group(comm)->index(root); + int root_traced = comm->group()->index(root); instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1); extra->type = TRACING_REDUCE; int known = 0; @@ -1912,7 +1911,7 @@ int PMPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datat } else { int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; int i = 0; - int size = smpi_comm_size(comm); + int size = comm->size(); instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1); extra->type = TRACING_REDUCE_SCATTER; extra->num_processes = size; @@ -1963,7 +1962,7 @@ int PMPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount, } else if (recvcount < 0) { retval = MPI_ERR_ARG; } else { - int count = smpi_comm_size(comm); + int count = comm->size(); int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1); @@ -2022,8 +2021,8 @@ int PMPI_Alltoall(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* rec int sendtmpcount = sendcount; MPI_Datatype sendtmptype = sendtype; if (sendbuf == MPI_IN_PLACE) { - sendtmpbuf = static_cast(xbt_malloc(recvcount * smpi_comm_size(comm) * smpi_datatype_size(recvtype))); - memcpy(sendtmpbuf, recvbuf, recvcount * smpi_comm_size(comm) * smpi_datatype_size(recvtype)); + sendtmpbuf = static_cast(xbt_malloc(recvcount * comm->size() * smpi_datatype_size(recvtype))); + memcpy(sendtmpbuf, recvbuf, recvcount * comm->size() * smpi_datatype_size(recvtype)); sendtmpcount = recvcount; sendtmptype = recvtype; } @@ -2071,7 +2070,7 @@ int PMPI_Alltoallv(void* sendbuf, int* sendcounts, int* senddisps, MPI_Datatype } else { int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; int i = 0; - int size = smpi_comm_size(comm); + int size = comm->size(); instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1); extra->type = TRACING_ALLTOALLV; extra->send_size = 0; @@ -2307,35 +2306,44 @@ int PMPI_Cart_create(MPI_Comm comm_old, int ndims, int* dims, int* periodic, int } else if (ndims < 0 || (ndims > 0 && (dims == nullptr || periodic == nullptr)) || comm_cart == nullptr) { return MPI_ERR_ARG; } else{ - return smpi_mpi_cart_create(comm_old, ndims, dims, periodic, reorder, comm_cart); + new simgrid::SMPI::Cart(comm_old, ndims, dims, periodic, reorder, comm_cart); + return MPI_SUCCESS; } } int PMPI_Cart_rank(MPI_Comm comm, int* coords, int* rank) { - if(comm == MPI_COMM_NULL || smpi_comm_topo(comm) == nullptr) { + if(comm == MPI_COMM_NULL || comm->topo() == nullptr) { return MPI_ERR_TOPOLOGY; } if (coords == nullptr) { return MPI_ERR_ARG; } - return smpi_mpi_cart_rank(comm, coords, rank); + simgrid::SMPI::Cart* topo = static_cast(comm->topo()); + if (topo==nullptr) { + return MPI_ERR_ARG; + } + return topo->rank(coords, rank); } int PMPI_Cart_shift(MPI_Comm comm, int direction, int displ, int* source, int* dest) { - if(comm == MPI_COMM_NULL || smpi_comm_topo(comm) == nullptr) { + if(comm == MPI_COMM_NULL || comm->topo() == nullptr) { return MPI_ERR_TOPOLOGY; } if (source == nullptr || dest == nullptr || direction < 0 ) { return MPI_ERR_ARG; } - return smpi_mpi_cart_shift(comm, direction, displ, source, dest); + simgrid::SMPI::Cart* topo = static_cast(comm->topo()); + if (topo==nullptr) { + return MPI_ERR_ARG; + } + return topo->shift(direction, displ, source, dest); } int PMPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int* coords) { - if(comm == MPI_COMM_NULL || smpi_comm_topo(comm) == nullptr) { + if(comm == MPI_COMM_NULL || comm->topo() == nullptr) { return MPI_ERR_TOPOLOGY; } - if (rank < 0 || rank >= smpi_comm_size(comm)) { + if (rank < 0 || rank >= comm->size()) { return MPI_ERR_RANK; } if (maxdims <= 0) { @@ -2344,27 +2352,39 @@ int PMPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int* coords) { if(coords == nullptr) { return MPI_ERR_ARG; } - return smpi_mpi_cart_coords(comm, rank, maxdims, coords); + simgrid::SMPI::Cart* topo = static_cast(comm->topo()); + if (topo==nullptr) { + return MPI_ERR_ARG; + } + return topo->coords(rank, maxdims, coords); } int PMPI_Cart_get(MPI_Comm comm, int maxdims, int* dims, int* periods, int* coords) { - if(comm == nullptr || smpi_comm_topo(comm) == nullptr) { + if(comm == nullptr || comm->topo() == nullptr) { return MPI_ERR_TOPOLOGY; } if(maxdims <= 0 || dims == nullptr || periods == nullptr || coords == nullptr) { return MPI_ERR_ARG; } - return smpi_mpi_cart_get(comm, maxdims, dims, periods, coords); + simgrid::SMPI::Cart* topo = static_cast(comm->topo()); + if (topo==nullptr) { + return MPI_ERR_ARG; + } + return topo->get(maxdims, dims, periods, coords); } int PMPI_Cartdim_get(MPI_Comm comm, int* ndims) { - if (comm == MPI_COMM_NULL || smpi_comm_topo(comm) == nullptr) { + if (comm == MPI_COMM_NULL || comm->topo() == nullptr) { return MPI_ERR_TOPOLOGY; } if (ndims == nullptr) { return MPI_ERR_ARG; } - return smpi_mpi_cartdim_get(comm, ndims); + simgrid::SMPI::Cart* topo = static_cast(comm->topo()); + if (topo==nullptr) { + return MPI_ERR_ARG; + } + return topo->dim_get(ndims); } int PMPI_Dims_create(int nnodes, int ndims, int* dims) { @@ -2374,18 +2394,24 @@ int PMPI_Dims_create(int nnodes, int ndims, int* dims) { if (ndims < 1 || nnodes < 1) { return MPI_ERR_DIMS; } - - return smpi_mpi_dims_create(nnodes, ndims, dims); + return simgrid::SMPI::Dims_create(nnodes, ndims, dims); } int PMPI_Cart_sub(MPI_Comm comm, int* remain_dims, MPI_Comm* comm_new) { - if(comm == MPI_COMM_NULL || smpi_comm_topo(comm) == nullptr) { + if(comm == MPI_COMM_NULL || comm->topo() == nullptr) { return MPI_ERR_TOPOLOGY; } if (comm_new == nullptr) { return MPI_ERR_ARG; } - return smpi_mpi_cart_sub(comm, remain_dims, comm_new); + simgrid::SMPI::Cart* topo = static_cast(comm->topo()); + if (topo==nullptr) { + return MPI_ERR_ARG; + } + simgrid::SMPI::Cart* cart = topo->sub(remain_dims, comm_new); + if(cart==nullptr) + return MPI_ERR_ARG; + return MPI_SUCCESS; } int PMPI_Type_create_resized(MPI_Datatype oldtype,MPI_Aint lb, MPI_Aint extent, MPI_Datatype *newtype){ @@ -2760,7 +2786,7 @@ int PMPI_Attr_delete(MPI_Comm comm, int keyval) { else if (comm==MPI_COMM_NULL) return MPI_ERR_COMM; else - return smpi_comm_attr_delete(comm, keyval); + return comm->attr_delete(keyval); } int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) { @@ -2798,7 +2824,7 @@ int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) { *static_cast(attr_value) = &one; return MPI_SUCCESS; default: - return smpi_comm_attr_get(comm, keyval, attr_value, flag); + return comm->attr_get(keyval, attr_value, flag); } } @@ -2809,7 +2835,7 @@ int PMPI_Attr_put(MPI_Comm comm, int keyval, void* attr_value) { else if (comm==MPI_COMM_NULL) return MPI_ERR_COMM; else - return smpi_comm_attr_put(comm, keyval, attr_value); + return comm->attr_put(keyval, attr_value); } int PMPI_Comm_get_attr (MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag)