Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
test and testany are non blocking simcalls
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Sun, 6 Feb 2022 10:59:09 +0000 (11:59 +0100)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Sun, 6 Feb 2022 10:59:09 +0000 (11:59 +0100)
src/kernel/activity/ActivityImpl.cpp
src/s4u/s4u_Activity.cpp
src/smpi/mpi/smpi_request.cpp

index 5618538..ed1f237 100644 (file)
@@ -63,23 +63,15 @@ const char* ActivityImpl::get_state_str() const
 
 bool ActivityImpl::test(actor::ActorImpl* issuer)
 {
-  // Associate this simcall to the synchro
-  auto* observer = dynamic_cast<kernel::actor::ActivityTestSimcall*>(issuer->simcall_.observer_);
-  if (observer)
-    register_simcall(&issuer->simcall_);
-
   if (state_ != State::WAITING && state_ != State::RUNNING) {
     finish();
     issuer->exception_ = nullptr; // Do not propagate exception in that case
     return true;
   }
 
-  if (observer) {
+  if (auto* observer = dynamic_cast<kernel::actor::ActivityTestSimcall*>(issuer->simcall_.observer_))
     observer->set_result(false);
-    issuer->waiting_synchro_ = nullptr;
-    unregister_simcall(&issuer->simcall_);
-    issuer->simcall_answer();
-  }
+
   return false;
 }
 
@@ -97,11 +89,9 @@ ssize_t ActivityImpl::test_any(actor::ActorImpl* issuer, const std::vector<Activ
   for (std::size_t i = 0; i < activities.size(); ++i) {
     if (activities[i]->test(issuer)) {
       observer->set_result(i);
-      issuer->simcall_answer();
       return i;
     }
   }
-  issuer->simcall_answer();
   return -1;
 }
 
index eee17e8..aed5f01 100644 (file)
@@ -83,8 +83,7 @@ bool Activity::test()
 
   kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self();
   kernel::actor::ActivityTestSimcall observer{issuer, pimpl_.get()};
-  if (kernel::actor::simcall_blocking([&observer] { observer.get_activity()->test(observer.get_issuer()); },
-                                      &observer)) {
+  if (kernel::actor::simcall([&observer] { return observer.get_activity()->test(observer.get_issuer()); }, &observer)) {
     complete(State::FINISHED);
     return true;
   }
@@ -99,8 +98,10 @@ ssize_t Activity::test_any(const std::vector<ActivityPtr>& activities)
 
   kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self();
   kernel::actor::ActivityTestanySimcall observer{issuer, ractivities};
-  ssize_t changed_pos = kernel::actor::simcall_blocking(
-      [&observer] { kernel::activity::ActivityImpl::test_any(observer.get_issuer(), observer.get_activities()); },
+  ssize_t changed_pos = kernel::actor::simcall(
+      [&observer] {
+        return kernel::activity::ActivityImpl::test_any(observer.get_issuer(), observer.get_activities());
+      },
       &observer);
   if (changed_pos != -1)
     activities.at(changed_pos)->complete(State::FINISHED);
index b8e9e61..5d8551d 100644 (file)
@@ -695,8 +695,8 @@ int Request::test(MPI_Request * request, MPI_Status * status, int* flag) {
       try{
         kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self();
         kernel::actor::ActivityTestSimcall observer{issuer, (*request)->action_.get()};
-        *flag = kernel::actor::simcall_blocking([&observer] { observer.get_activity()->test(observer.get_issuer()); },
-                                                &observer);
+        *flag = kernel::actor::simcall([&observer] { return observer.get_activity()->test(observer.get_issuer()); },
+                                       &observer);
       } catch (const Exception&) {
         *flag = 0;
         return ret;
@@ -785,8 +785,10 @@ int Request::testany(int count, MPI_Request requests[], int *index, int* flag, M
     try{
       kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self();
       kernel::actor::ActivityTestanySimcall observer{issuer, comms};
-      i = kernel::actor::simcall_blocking(
-          [&observer] { kernel::activity::ActivityImpl::test_any(observer.get_issuer(), observer.get_activities()); },
+      i = kernel::actor::simcall(
+          [&observer] {
+            return kernel::activity::ActivityImpl::test_any(observer.get_issuer(), observer.get_activities());
+          },
           &observer);
     } catch (const Exception&) {
       XBT_DEBUG("Exception in testany");