X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6f13df6a73ac3bbfe197cf4076108a818ec21960..94477726d49d67f7ea7bed750733ffff88c4e7c8:/src/smpi/mpi/smpi_request.cpp diff --git a/src/smpi/mpi/smpi_request.cpp b/src/smpi/mpi/smpi_request.cpp index 979b0dffe9..4a76651704 100644 --- a/src/smpi/mpi/smpi_request.cpp +++ b/src/smpi/mpi/smpi_request.cpp @@ -5,16 +5,17 @@ #include "smpi_request.hpp" -#include "smpi_host.hpp" #include "mc/mc.h" #include "private.hpp" +#include "simgrid/s4u/Exec.hpp" #include "smpi_comm.hpp" #include "smpi_datatype.hpp" +#include "smpi_host.hpp" #include "smpi_op.hpp" -#include "smpi_process.hpp" #include "src/kernel/activity/CommImpl.hpp" #include "src/mc/mc_replay.hpp" #include "src/simix/ActorImpl.hpp" +#include "src/smpi/include/smpi_actor.hpp" #include "xbt/config.hpp" #include @@ -370,7 +371,7 @@ void Request::start() if ((flags_ & MPI_REQ_RECV) != 0) { this->print_request("New recv"); - simgrid::smpi::Process* process = smpi_process_remote(simgrid::s4u::Actor::by_pid(dst_)); + simgrid::smpi::ActorExt* process = smpi_process_remote(simgrid::s4u::Actor::by_pid(dst_)); int async_small_thresh = simgrid::config::get_value("smpi/async-small-thresh"); @@ -421,7 +422,7 @@ void Request::start() if (async_small_thresh != 0 || (flags_ & MPI_REQ_RMA) != 0) xbt_mutex_release(mut); } else { /* the RECV flag was not set, so this is a send */ - simgrid::smpi::Process* process = smpi_process_remote(simgrid::s4u::Actor::by_pid(dst_)); + simgrid::smpi::ActorExt* process = smpi_process_remote(simgrid::s4u::Actor::by_pid(dst_)); int rank = src_; if (TRACE_smpi_view_internals()) { TRACE_smpi_send(rank, rank, dst_, tag_, size_); @@ -680,16 +681,16 @@ void Request::iprobe(int source, int tag, MPI_Comm comm, int* flag, MPI_Status* // nsleeps is a multiplier to the sleeptime, to increase speed of execution, each failed iprobe will increase it // This can speed up the execution of certain applications by an order of magnitude, such as HPL static int nsleeps = 1; - double speed = simgrid::s4u::Actor::self()->get_host()->getSpeed(); + double speed = s4u::this_actor::get_host()->get_speed(); double maxrate = simgrid::config::get_value("smpi/iprobe-cpu-usage"); MPI_Request request = new Request(nullptr, 0, MPI_CHAR, source == MPI_ANY_SOURCE ? MPI_ANY_SOURCE : comm->group()->actor(source)->get_pid(), simgrid::s4u::this_actor::get_pid(), tag, comm, MPI_REQ_PERSISTENT | MPI_REQ_RECV); if (smpi_iprobe_sleep > 0) { - smx_activity_t iprobe_sleep = simcall_execution_start( - "iprobe", /* flops to executek*/ nsleeps * smpi_iprobe_sleep * speed * maxrate, /* priority */ 1.0, - /* performance bound */ maxrate * speed, smpi_process()->get_actor()->get_host()); - simcall_execution_wait(iprobe_sleep); + s4u::this_actor::exec_init(/* flops to execute */ nsleeps * smpi_iprobe_sleep * speed * maxrate) + ->set_name("iprobe") + ->start() + ->wait(); } // behave like a receive, but don't do it smx_mailbox_t mailbox; @@ -737,6 +738,9 @@ void Request::finish_wait(MPI_Request* request, MPI_Status * status) if (req->cancelled_==1){ if (status!=MPI_STATUS_IGNORE) status->cancelled=1; + if(req->detached_sender_ != nullptr) + unref(&(req->detached_sender_)); + unref(request); return; } @@ -874,7 +878,7 @@ int Request::waitany(int count, MPI_Request requests[], MPI_Status * status) if ((requests[index] == MPI_REQUEST_NULL) || (not((requests[index]->flags_ & MPI_REQ_ACCUMULATE) && (requests[index]->flags_ & MPI_REQ_RECV)))) { finish_wait(&requests[index],status); - if (requests[i] != MPI_REQUEST_NULL && (requests[i]->flags_ & MPI_REQ_NON_PERSISTENT)) + if (requests[index] != MPI_REQUEST_NULL && (requests[index]->flags_ & MPI_REQ_NON_PERSISTENT)) requests[index] = MPI_REQUEST_NULL; } }