Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
split Comm::on_start into two signals (on_send and on_recv)
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Thu, 21 Oct 2021 14:36:13 +0000 (16:36 +0200)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Thu, 21 Oct 2021 14:36:13 +0000 (16:36 +0200)
+ the actual start of the Comm occurs when both send and receiver are
  there. This event can be notified by CommImpl::on_start
+ TODO: Comm::on_completion and CommImpl::on_completion are redundant
+ TODO: The CommImpl signals should go back to Comm, but on kernel
  side a CommImpl does not have a piface to notify (yet)

docs/source/Plugins.rst
docs/source/app_s4u.rst
include/simgrid/s4u/Comm.hpp
src/instr/instr_platform.cpp
src/kernel/activity/CommImpl.hpp
src/s4u/s4u_Comm.cpp

index a128573..0c6fd2d 100644 (file)
@@ -77,15 +77,16 @@ Partial list of existing signals in s4u:
   :cpp:member:`Actor::on_host_change <simgrid::s4u::Actor::on_host_change>`
   :cpp:member:`Actor::on_termination <simgrid::s4u::Actor::on_termination>`
   :cpp:member:`Actor::on_destruction <simgrid::s4u::Actor::on_destruction>`
-- :cpp:member:`Comm::on_start <simgrid::s4u::Comm::on_start>`
+- :cpp:member:`Comm::on_send <simgrid::s4u::Comm::on_send>`
+  :cpp:member:`Comm::on_recv <simgrid::s4u::Comm::on_recv>`
   :cpp:member:`Comm::on_completion <simgrid::s4u::Comm::on_completion>`
+- :cpp:member:`CommImpl::on_start <simgrid::kernel::actiivty::CommImpl::on_start>`
+  :cpp:member:`CommImpl::on_completion <simgrid::kernel::activity::CommImpl::on_completion>`
 - :cpp:member:`Engine::on_platform_creation <simgrid::s4u::Engine::on_platform_creation>`
   :cpp:member:`Engine::on_platform_created <simgrid::s4u::Engine::on_platform_created>`
   :cpp:member:`Engine::on_time_advance <simgrid::s4u::Engine::on_time_advance>`
   :cpp:member:`Engine::on_simulation_end <simgrid::s4u::Engine::on_simulation_end>`
   :cpp:member:`Engine::on_deadlock <simgrid::s4u::Engine::on_deadlock>`
-- :cpp:member:`Comm::on_start <simgrid::s4u::Comm::on_start>`
-  :cpp:member:`Comm::on_completion <simgrid::s4u::Comm::on_completion>`
 - :cpp:member:`Exec::on_start <simgrid::s4u::Exec::on_start>`
   :cpp:member:`Exec::on_completion <simgrid::s4u::Exec::on_completion>`
 - :cpp:member:`Exec::on_start <simgrid::s4u::Exec::on_start>`
index a28efe8..09faa66 100644 (file)
@@ -2101,7 +2101,8 @@ Signals
    .. group-tab:: C++
 
       .. doxygenvariable:: simgrid::s4u::Comm::on_completion
-      .. doxygenvariable:: simgrid::s4u::Comm::on_start
+      .. doxygenvariable:: simgrid::s4u::Comm::on_recv
+      .. doxygenvariable:: simgrid::s4u::Comm::on_send
 
 .. _API_s4u_Exec:
 
index 228fcec..b42d1e9 100644 (file)
@@ -64,7 +64,9 @@ public:
    */
   static void sendto(Host* from, Host* to, uint64_t simulated_size_in_bytes);
 
-  static xbt::signal<void(Comm const&, bool is_sender)> on_start;
+  static xbt::signal<void(Comm const&)> on_send;
+  static xbt::signal<void(Comm const&)> on_recv;
+  static xbt::signal<void(Comm const&)> on_start;
   static xbt::signal<void(Comm const&)> on_completion;
 
   /*! take a vector s4u::CommPtr and return when one of them is finished.
index 2b6db3f..9e70fa7 100644 (file)
@@ -470,10 +470,11 @@ void define_callbacks()
     s4u::Exec::on_completion.connect([](s4u::Exec const&) {
       Container::by_name(instr_pid(*s4u::Actor::self()))->get_state("ACTOR_STATE")->pop_event();
     });
-    s4u::Comm::on_start.connect([](s4u::Comm const&, bool is_sender) {
-      Container::by_name(instr_pid(*s4u::Actor::self()))
-          ->get_state("ACTOR_STATE")
-          ->push_event(is_sender ? "send" : "receive");
+    s4u::Comm::on_send.connect([](s4u::Comm const&) {
+      Container::by_name(instr_pid(*s4u::Actor::self()))->get_state("ACTOR_STATE")->push_event("send");
+    });
+    s4u::Comm::on_recv.connect([](s4u::Comm const&) {
+      Container::by_name(instr_pid(*s4u::Actor::self()))->get_state("ACTOR_STATE")->push_event("receive");
     });
     s4u::Comm::on_completion.connect([](s4u::Comm const&) {
       Container::by_name(instr_pid(*s4u::Actor::self()))->get_state("ACTOR_STATE")->pop_event();
index 0334947..c6411df 100644 (file)
@@ -89,7 +89,6 @@ expectations of the other side, too. See  */
 
   void* src_data_ = nullptr; /* User data associated to the communication */
   void* dst_data_ = nullptr;
-
   static xbt::signal<void(CommImpl const&)> on_start;
   static xbt::signal<void(CommImpl const&)> on_completion;
 };
index b30f311..8db5454 100644 (file)
@@ -19,7 +19,8 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_comm, s4u_activity, "S4U asynchronous commun
 
 namespace simgrid {
 namespace s4u {
-xbt::signal<void(Comm const&, bool is_sender)> Comm::on_start;
+xbt::signal<void(Comm const&)> Comm::on_send;
+xbt::signal<void(Comm const&)> Comm::on_recv;
 xbt::signal<void(Comm const&)> Comm::on_completion;
 
 void Comm::complete(Activity::State state)
@@ -195,12 +196,12 @@ Comm* Comm::start()
     });
 
   } else if (src_buff_ != nullptr) { // Sender side
-    on_start(*this, true /* is_sender*/);
+    on_send(*this);
     pimpl_ = simcall_comm_isend(sender_, mailbox_->get_impl(), remains_, rate_, src_buff_, src_buff_size_, match_fun_,
                                 clean_fun_, copy_data_function_, get_user_data(), detached_);
   } else if (dst_buff_ != nullptr) { // Receiver side
     xbt_assert(not detached_, "Receive cannot be detached");
-    on_start(*this, false /*is_sender*/);
+    on_recv(*this);
     pimpl_ = simcall_comm_irecv(receiver_, mailbox_->get_impl(), dst_buff_, &dst_buff_size_, match_fun_,
                                 copy_data_function_, get_user_data(), rate_);
 
@@ -234,12 +235,12 @@ Comm* Comm::wait_for(double timeout)
       if (from_ != nullptr || to_ != nullptr) {
         return vetoable_start()->wait_for(timeout); // In the case of host2host comm, do it in two simcalls
       } else if (src_buff_ != nullptr) {
-        on_start(*this, true /*is_sender*/);
+        on_send(*this);
         simcall_comm_send(sender_, mailbox_->get_impl(), remains_, rate_, src_buff_, src_buff_size_, match_fun_,
                           copy_data_function_, get_user_data(), timeout);
 
       } else { // Receiver
-        on_start(*this, false /*is_sender*/);
+        on_recv(*this);
         simcall_comm_recv(receiver_, mailbox_->get_impl(), dst_buff_, &dst_buff_size_, match_fun_, copy_data_function_,
                           get_user_data(), timeout, rate_);
       }