X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dca5789b6c379104cde889f9d16ba462aeba7929..246388d21097723092dfc24d709231ff2b493010:/src/smpi/bindings/smpi_pmpi_coll.cpp diff --git a/src/smpi/bindings/smpi_pmpi_coll.cpp b/src/smpi/bindings/smpi_pmpi_coll.cpp index 69421bd94c..6fa2231507 100644 --- a/src/smpi/bindings/smpi_pmpi_coll.cpp +++ b/src/smpi/bindings/smpi_pmpi_coll.cpp @@ -25,8 +25,8 @@ int PMPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm c } else if (not datatype->is_valid()) { retval = MPI_ERR_ARG; } else { - int rank = simgrid::s4u::Actor::self()->getPid(); - TRACE_smpi_comm_in(rank, __FUNCTION__, + int rank = simgrid::s4u::this_actor::get_pid(); + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::CollTIData("bcast", root, -1.0, datatype->is_replayable() ? count : count * datatype->size(), -1, simgrid::smpi::Datatype::encode(datatype), "")); @@ -49,8 +49,8 @@ int PMPI_Barrier(MPI_Comm comm) if (comm == MPI_COMM_NULL) { retval = MPI_ERR_COMM; } else { - int rank = simgrid::s4u::Actor::self()->getPid(); - TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::NoOpTIData("barrier")); + int rank = simgrid::s4u::this_actor::get_pid(); + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::NoOpTIData("barrier")); simgrid::smpi::Colls::barrier(comm); @@ -89,10 +89,10 @@ int PMPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbu sendtmpcount=0; sendtmptype=recvtype; } - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); TRACE_smpi_comm_in( - rank, __FUNCTION__, + rank, __func__, new simgrid::instr::CollTIData( "gather", root, -1.0, sendtmptype->is_replayable() ? sendtmpcount : sendtmpcount * sendtmptype->size(), (comm->rank() != root || recvtype->is_replayable()) ? recvcount : recvcount * recvtype->size(), @@ -122,7 +122,7 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recv retval = MPI_ERR_TYPE; } else if (( sendbuf != MPI_IN_PLACE) && (sendcount <0)){ retval = MPI_ERR_COUNT; - } else if (recvcounts == nullptr || displs == nullptr) { + } else if ((comm->rank() == root) && (recvcounts == nullptr || displs == nullptr)) { retval = MPI_ERR_ARG; } else { char* sendtmpbuf = static_cast(sendbuf); @@ -133,7 +133,7 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recv sendtmptype=recvtype; } - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); int dt_size_recv = recvtype->is_replayable() ? 1 : recvtype->size(); std::vector* trace_recvcounts = new std::vector; @@ -142,7 +142,7 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recv trace_recvcounts->push_back(recvcounts[i] * dt_size_recv); } - TRACE_smpi_comm_in(rank, __FUNCTION__, + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::VarCollTIData( "gatherV", root, sendtmptype->is_replayable() ? sendtmpcount : sendtmpcount * sendtmptype->size(), nullptr, @@ -178,9 +178,9 @@ int PMPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype, sendcount=recvcount; sendtype=recvtype; } - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank, __FUNCTION__, + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::CollTIData( "allGather", -1, -1.0, sendtype->is_replayable() ? sendcount : sendcount * sendtype->size(), recvtype->is_replayable() ? recvcount : recvcount * recvtype->size(), @@ -215,16 +215,16 @@ int PMPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, sendcount=recvcounts[comm->rank()]; sendtype=recvtype; } - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); int dt_size_recv = recvtype->is_replayable() ? 1 : recvtype->size(); std::vector* trace_recvcounts = new std::vector; for (int i = 0; i < comm->size(); i++) // copy data to avoid bad free trace_recvcounts->push_back(recvcounts[i] * dt_size_recv); - TRACE_smpi_comm_in(rank, __FUNCTION__, + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::VarCollTIData( - "allGatherV", -1, sendtype->is_replayable() ? sendcount : sendcount * sendtype->size(), + "allgatherv", -1, sendtype->is_replayable() ? sendcount : sendcount * sendtype->size(), nullptr, dt_size_recv, trace_recvcounts, simgrid::smpi::Datatype::encode(sendtype), simgrid::smpi::Datatype::encode(recvtype))); @@ -258,10 +258,10 @@ int PMPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, recvtype = sendtype; recvcount = sendcount; } - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); TRACE_smpi_comm_in( - rank, __FUNCTION__, + rank, __func__, new simgrid::instr::CollTIData( "scatter", root, -1.0, (comm->rank() != root || sendtype->is_replayable()) ? sendcount : sendcount * sendtype->size(), @@ -296,7 +296,7 @@ int PMPI_Scatterv(void *sendbuf, int *sendcounts, int *displs, recvtype = sendtype; recvcount = sendcounts[comm->rank()]; } - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); int dt_size_send = sendtype->is_replayable() ? 1 : sendtype->size(); std::vector* trace_sendcounts = new std::vector; @@ -305,9 +305,9 @@ int PMPI_Scatterv(void *sendbuf, int *sendcounts, int *displs, trace_sendcounts->push_back(sendcounts[i] * dt_size_send); } - TRACE_smpi_comm_in(rank, __FUNCTION__, + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::VarCollTIData( - "scatterV", root, dt_size_send, trace_sendcounts, + "scatterv", root, dt_size_send, trace_sendcounts, recvtype->is_replayable() ? recvcount : recvcount * recvtype->size(), nullptr, simgrid::smpi::Datatype::encode(sendtype), simgrid::smpi::Datatype::encode(recvtype))); @@ -331,9 +331,9 @@ int PMPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, } else if (not datatype->is_valid() || op == MPI_OP_NULL) { retval = MPI_ERR_ARG; } else { - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank, __FUNCTION__, + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::CollTIData("reduce", root, 0, datatype->is_replayable() ? count : count * datatype->size(), -1, simgrid::smpi::Datatype::encode(datatype), "")); @@ -381,10 +381,10 @@ int PMPI_Allreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp sendtmpbuf = static_cast(xbt_malloc(count*datatype->get_extent())); simgrid::smpi::Datatype::copy(recvbuf, count, datatype,sendtmpbuf, count, datatype); } - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); - TRACE_smpi_comm_in(rank, __FUNCTION__, - new simgrid::instr::CollTIData("allReduce", -1, 0, + TRACE_smpi_comm_in(rank, __func__, + new simgrid::instr::CollTIData("allreduce", -1, 0, datatype->is_replayable() ? count : count * datatype->size(), -1, simgrid::smpi::Datatype::encode(datatype), "")); @@ -414,15 +414,21 @@ int PMPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MP } else if (op == MPI_OP_NULL) { retval = MPI_ERR_OP; } else { - int rank = simgrid::s4u::Actor::self()->getPid(); - - TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::Pt2PtTIData( - "scan", -1, datatype->is_replayable() ? count : count * datatype->size(), - simgrid::smpi::Datatype::encode(datatype))); + int rank = simgrid::s4u::this_actor::get_pid(); + void* sendtmpbuf = sendbuf; + if (sendbuf == MPI_IN_PLACE) { + sendtmpbuf = static_cast(xbt_malloc(count * datatype->size())); + memcpy(sendtmpbuf, recvbuf, count * datatype->size()); + } + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::Pt2PtTIData( + "scan", -1, datatype->is_replayable() ? count : count * datatype->size(), + simgrid::smpi::Datatype::encode(datatype))); - retval = simgrid::smpi::Colls::scan(sendbuf, recvbuf, count, datatype, op, comm); + retval = simgrid::smpi::Colls::scan(sendtmpbuf, recvbuf, count, datatype, op, comm); TRACE_smpi_comm_out(rank); + if (sendbuf == MPI_IN_PLACE) + xbt_free(sendtmpbuf); } smpi_bench_begin(); @@ -441,17 +447,16 @@ int PMPI_Exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, } else if (op == MPI_OP_NULL) { retval = MPI_ERR_OP; } else { - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); void* sendtmpbuf = sendbuf; if (sendbuf == MPI_IN_PLACE) { sendtmpbuf = static_cast(xbt_malloc(count * datatype->size())); memcpy(sendtmpbuf, recvbuf, count * datatype->size()); } - TRACE_smpi_comm_in(rank, __FUNCTION__, - new simgrid::instr::Pt2PtTIData("exscan", -1, - datatype->is_replayable() ? count : count * datatype->size(), - simgrid::smpi::Datatype::encode(datatype))); + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::Pt2PtTIData( + "exscan", -1, datatype->is_replayable() ? count : count * datatype->size(), + simgrid::smpi::Datatype::encode(datatype))); retval = simgrid::smpi::Colls::exscan(sendtmpbuf, recvbuf, count, datatype, op, comm); @@ -478,7 +483,7 @@ int PMPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datat } else if (recvcounts == nullptr) { retval = MPI_ERR_ARG; } else { - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); std::vector* trace_recvcounts = new std::vector; int dt_send_size = datatype->is_replayable() ? 1 : datatype->size(); int totalcount = 0; @@ -494,9 +499,9 @@ int PMPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datat memcpy(sendtmpbuf, recvbuf, totalcount * datatype->size()); } - TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::VarCollTIData( - "reduceScatter", -1, dt_send_size, nullptr, -1, trace_recvcounts, - simgrid::smpi::Datatype::encode(datatype), "")); + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::VarCollTIData( + "reducescatter", -1, dt_send_size, nullptr, -1, trace_recvcounts, + simgrid::smpi::Datatype::encode(datatype), "")); simgrid::smpi::Colls::reduce_scatter(sendtmpbuf, recvbuf, recvcounts, datatype, op, comm); retval = MPI_SUCCESS; @@ -527,7 +532,7 @@ int PMPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount, } else { int count = comm->size(); - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); int dt_send_size = datatype->is_replayable() ? 1 : datatype->size(); std::vector* trace_recvcounts = new std::vector(recvcount * dt_send_size); // copy data to avoid bad free @@ -537,8 +542,8 @@ int PMPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount, memcpy(sendtmpbuf, recvbuf, recvcount * count * datatype->size()); } - TRACE_smpi_comm_in(rank, __FUNCTION__, - new simgrid::instr::VarCollTIData("reduceScatter", -1, 0, nullptr, -1, trace_recvcounts, + TRACE_smpi_comm_in(rank, __func__, + new simgrid::instr::VarCollTIData("reducescatter", -1, 0, nullptr, -1, trace_recvcounts, simgrid::smpi::Datatype::encode(datatype), "")); int* recvcounts = new int[count]; @@ -569,7 +574,7 @@ int PMPI_Alltoall(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* rec } else if ((sendbuf != MPI_IN_PLACE && sendtype == MPI_DATATYPE_NULL) || recvtype == MPI_DATATYPE_NULL) { retval = MPI_ERR_TYPE; } else { - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); void* sendtmpbuf = static_cast(sendbuf); int sendtmpcount = sendcount; MPI_Datatype sendtmptype = sendtype; @@ -580,7 +585,7 @@ int PMPI_Alltoall(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* rec sendtmptype = recvtype; } - TRACE_smpi_comm_in(rank, __FUNCTION__, + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::CollTIData( "allToAll", -1, -1.0, sendtmptype->is_replayable() ? sendtmpcount : sendtmpcount * sendtmptype->size(), @@ -614,7 +619,7 @@ int PMPI_Alltoallv(void* sendbuf, int* sendcounts, int* senddisps, MPI_Datatype recvdisps == nullptr) { retval = MPI_ERR_ARG; } else { - int rank = simgrid::s4u::Actor::self()->getPid(); + int rank = simgrid::s4u::this_actor::get_pid(); int size = comm->size(); int send_size = 0; int recv_size = 0; @@ -651,7 +656,7 @@ int PMPI_Alltoallv(void* sendbuf, int* sendcounts, int* senddisps, MPI_Datatype trace_sendcounts->push_back(sendtmpcounts[i] * dt_size_send); } - TRACE_smpi_comm_in(rank, __FUNCTION__, + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::VarCollTIData("allToAllV", -1, send_size, trace_sendcounts, recv_size, trace_recvcounts, simgrid::smpi::Datatype::encode(sendtype), simgrid::smpi::Datatype::encode(recvtype)));