From: Frederic Suter Date: Thu, 21 Feb 2019 19:32:04 +0000 (+0100) Subject: use more s4u calls in MSG X-Git-Tag: v3_22~274 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/de29f3985505e3db5a0aba8d0ef844f21e971f11 use more s4u calls in MSG One more step to transform MSG into a S4U wrapper \o/ --- diff --git a/src/msg/msg_gos.cpp b/src/msg/msg_gos.cpp index 6136279e6c..81b3e33051 100644 --- a/src/msg/msg_gos.cpp +++ b/src/msg/msg_gos.cpp @@ -291,23 +291,24 @@ static inline msg_comm_t MSG_task_isend_internal(msg_task_t task, const char* al t_simdata->comm = nullptr; msg_global->sent_msg++; - /* Send it by calling SIMIX network layer */ - smx_activity_t act = - simcall_comm_isend(myself->get_impl(), mailbox->get_impl(), t_simdata->bytes_amount, t_simdata->rate, task, - sizeof(void*), nullptr, cleanup, nullptr, nullptr, detached); - t_simdata->comm = boost::static_pointer_cast(act); + simgrid::s4u::CommPtr comm = mailbox->put_init(task, t_simdata->bytes_amount)->set_rate(t_simdata->rate); + t_simdata->comm = comm; + if (detached) + comm->detach(cleanup); + else + comm->start(); - msg_comm_t comm = nullptr; + msg_comm_t msg_comm = nullptr; if (not detached) { - comm = new simgrid::msg::Comm(task, nullptr, act); + msg_comm = new simgrid::msg::Comm(task, nullptr, comm); } if (TRACE_is_enabled() && task->category != nullptr) - simgrid::simix::simcall([act, task] { act->set_category(task->category); }); + simgrid::simix::simcall([comm, task] { comm->get_impl()->set_category(task->category); }); TRACE_msg_task_put_end(); - return comm; + return msg_comm; } /** @@ -431,8 +432,7 @@ msg_comm_t MSG_task_irecv_bounded(msg_task_t *task, const char *name, double rat /* Try to receive it by calling SIMIX network layer */ msg_comm_t comm = new simgrid::msg::Comm( - nullptr, task, - simcall_comm_irecv(SIMIX_process_self(), mbox->get_impl(), task, nullptr, nullptr, nullptr, nullptr, rate)); + nullptr, task, mbox->get_init()->set_dst_data((void**)task, sizeof(msg_task_t*))->set_rate(rate)->start()); return comm; } @@ -450,7 +450,7 @@ int MSG_comm_test(msg_comm_t comm) bool finished = false; try { - finished = simcall_comm_test(comm->s_comm); + finished = comm->s_comm->test(); if (finished && comm->task_received != nullptr) { /* I am the receiver */ (*comm->task_received)->simdata->setNotUsed(); @@ -488,7 +488,7 @@ int MSG_comm_testany(xbt_dynar_t comms) msg_comm_t comm; unsigned int cursor; xbt_dynar_foreach(comms, cursor, comm) { - s_comms.push_back(static_cast(comm->s_comm.get())); + s_comms.push_back(static_cast(comm->s_comm->get_impl().get())); } msg_error_t status = MSG_OK; @@ -536,7 +536,7 @@ void MSG_comm_destroy(msg_comm_t comm) msg_error_t MSG_comm_wait(msg_comm_t comm, double timeout) { try { - simcall_comm_wait(comm->s_comm, timeout); + comm->s_comm->wait_for(timeout); if (comm->task_received != nullptr) { /* I am the receiver */ @@ -584,7 +584,7 @@ int MSG_comm_waitany(xbt_dynar_t comms) msg_comm_t comm; unsigned int cursor; xbt_dynar_foreach(comms, cursor, comm) { - s_comms.push_back(static_cast(comm->s_comm.get())); + s_comms.push_back(static_cast(comm->s_comm->get_impl().get())); } msg_error_t status = MSG_OK; @@ -722,7 +722,6 @@ msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, doubl simdata_task_t t_simdata = task->simdata; t_simdata->sender = MSG_process_self(); t_simdata->source = MSG_host_self(); - t_simdata->setUsed(); msg_global->sent_msg++; @@ -731,7 +730,7 @@ msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, doubl try { simgrid::s4u::CommPtr comm = simgrid::s4u::Mailbox::by_name(alias)->put_init(task, t_simdata->bytes_amount)->set_rate(t_simdata->rate); - t_simdata->comm = boost::static_pointer_cast(comm->get_impl()); + t_simdata->comm = comm; comm->start(); if (TRACE_is_enabled() && task->category != nullptr) simgrid::simix::simcall([comm, task] { comm->get_impl()->set_category(task->category); }); diff --git a/src/msg/msg_private.hpp b/src/msg/msg_private.hpp index e720eba25a..31734b6010 100644 --- a/src/msg/msg_private.hpp +++ b/src/msg/msg_private.hpp @@ -26,7 +26,7 @@ struct s_simdata_task_t { void setNotUsed() { this->isused = false; } simgrid::kernel::activity::ExecImplPtr compute = nullptr; /* SIMIX modeling of computation */ - simgrid::kernel::activity::CommImplPtr comm = nullptr; /* SIMIX modeling of communication */ + simgrid::s4u::CommPtr comm = nullptr; /* S4U modeling of communication */ double bytes_amount = 0.0; /* Data size */ double flops_amount = 0.0; /* Computation size */ msg_process_t sender = nullptr; @@ -57,9 +57,9 @@ class Comm { public: msg_task_t task_sent; /* task sent (NULL for the receiver) */ msg_task_t* task_received; /* where the task will be received (NULL for the sender) */ - smx_activity_t s_comm; /* SIMIX communication object encapsulated (the same for both processes) */ + s4u::CommPtr s_comm; /* SIMIX communication object encapsulated (the same for both processes) */ msg_error_t status = MSG_OK; /* status of the communication once finished */ - Comm(msg_task_t sent, msg_task_t* received, smx_activity_t comm) + Comm(msg_task_t sent, msg_task_t* received, s4u::CommPtr comm) : task_sent(sent), task_received(received), s_comm(std::move(comm)) { } diff --git a/src/msg/msg_task.cpp b/src/msg/msg_task.cpp index 9b3e46c373..7463547b7c 100644 --- a/src/msg/msg_task.cpp +++ b/src/msg/msg_task.cpp @@ -8,6 +8,7 @@ #include #include #include +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_task, msg, "Logging specific to MSG (task)"); @@ -196,7 +197,7 @@ msg_error_t MSG_task_cancel(msg_task_t task) if (simdata->compute) { simgrid::simix::simcall([simdata] { simdata->compute->cancel(); }); } else if (simdata->comm) { - simgrid::simix::simcall([simdata] { simdata->comm->cancel(); }); + simdata->comm->cancel(); } simdata->setNotUsed(); return MSG_OK; @@ -265,7 +266,7 @@ void MSG_task_set_bytes_amount(msg_task_t task, double data_size) double MSG_task_get_remaining_communication(msg_task_t task) { XBT_DEBUG("calling simcall_communication_get_remains(%p)", task->simdata->comm.get()); - return task->simdata->comm->remains(); + return task->simdata->comm->get_remaining(); } /** @brief Returns the size of the data attached to the given task. */