Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
use more s4u calls in MSG
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 21 Feb 2019 19:32:04 +0000 (20:32 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 21 Feb 2019 19:32:04 +0000 (20:32 +0100)
One more step to transform MSG into a S4U wrapper \o/

src/msg/msg_gos.cpp
src/msg/msg_private.hpp
src/msg/msg_task.cpp

index 6136279..81b3e33 100644 (file)
@@ -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++;
 
   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<simgrid::kernel::activity::CommImpl>(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) {
   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)
   }
 
   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();
 
 
   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(
 
   /* 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;
 }
 
   return comm;
 }
@@ -450,7 +450,7 @@ int MSG_comm_test(msg_comm_t comm)
   bool finished = false;
 
   try {
   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();
     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) {
   msg_comm_t comm;
   unsigned int cursor;
   xbt_dynar_foreach(comms, cursor, comm) {
-    s_comms.push_back(static_cast<simgrid::kernel::activity::CommImpl*>(comm->s_comm.get()));
+    s_comms.push_back(static_cast<simgrid::kernel::activity::CommImpl*>(comm->s_comm->get_impl().get()));
   }
 
   msg_error_t status = MSG_OK;
   }
 
   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 {
 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 */
 
     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) {
   msg_comm_t comm;
   unsigned int cursor;
   xbt_dynar_foreach(comms, cursor, comm) {
-    s_comms.push_back(static_cast<simgrid::kernel::activity::CommImpl*>(comm->s_comm.get()));
+    s_comms.push_back(static_cast<simgrid::kernel::activity::CommImpl*>(comm->s_comm->get_impl().get()));
   }
 
   msg_error_t status = MSG_OK;
   }
 
   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();
   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++;
   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);
   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<simgrid::kernel::activity::CommImpl>(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); });
     comm->start();
     if (TRACE_is_enabled() && task->category != nullptr)
       simgrid::simix::simcall([comm, task] { comm->get_impl()->set_category(task->category); });
index e720eba..31734b6 100644 (file)
@@ -26,7 +26,7 @@ struct s_simdata_task_t {
   void setNotUsed() { this->isused = false; }
 
   simgrid::kernel::activity::ExecImplPtr compute = nullptr; /* SIMIX modeling of computation */
   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;
   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) */
 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 */
   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))
   {
   }
       : task_sent(sent), task_received(received), s_comm(std::move(comm))
   {
   }
index 9b3e46c..7463547 100644 (file)
@@ -8,6 +8,7 @@
 #include <algorithm>
 #include <cmath>
 #include <simgrid/modelchecker.h>
 #include <algorithm>
 #include <cmath>
 #include <simgrid/modelchecker.h>
+#include <simgrid/s4u/Comm.hpp>
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_task, msg, "Logging specific to MSG (task)");
 
 
 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) {
   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;
   }
   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());
 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. */
 }
 
 /** @brief Returns the size of the data attached to the given task. */