From f7ad2ab0e2118708ddf0110cc718b3001d75ccee Mon Sep 17 00:00:00 2001 From: SUTER Frederic Date: Sun, 6 Feb 2022 11:59:09 +0100 Subject: [PATCH] test and testany are non blocking simcalls --- src/kernel/activity/ActivityImpl.cpp | 14 ++------------ src/s4u/s4u_Activity.cpp | 9 +++++---- src/smpi/mpi/smpi_request.cpp | 10 ++++++---- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/kernel/activity/ActivityImpl.cpp b/src/kernel/activity/ActivityImpl.cpp index 5618538298..ed1f237f69 100644 --- a/src/kernel/activity/ActivityImpl.cpp +++ b/src/kernel/activity/ActivityImpl.cpp @@ -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(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(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::vectortest(issuer)) { observer->set_result(i); - issuer->simcall_answer(); return i; } } - issuer->simcall_answer(); return -1; } diff --git a/src/s4u/s4u_Activity.cpp b/src/s4u/s4u_Activity.cpp index eee17e8d1a..aed5f01b28 100644 --- a/src/s4u/s4u_Activity.cpp +++ b/src/s4u/s4u_Activity.cpp @@ -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& 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); diff --git a/src/smpi/mpi/smpi_request.cpp b/src/smpi/mpi/smpi_request.cpp index b8e9e613ba..5d8551d15d 100644 --- a/src/smpi/mpi/smpi_request.cpp +++ b/src/smpi/mpi/smpi_request.cpp @@ -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"); -- 2.20.1