X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3586592c9ea0c8b4e934a29126c75de611bbc61c..9f9eacbd59910b9bce3a39e41ce1d966f9a60c4c:/src/mc/mc_api.cpp diff --git a/src/mc/mc_api.cpp b/src/mc/mc_api.cpp index bf62e03b11..bb70bacf0f 100644 --- a/src/mc/mc_api.cpp +++ b/src/mc/mc_api.cpp @@ -205,17 +205,30 @@ unsigned long mc_api::get_maxpid() const return MC_smx_get_maxpid(); } -void mc_api::copy_incomplete_comm_pattern(const simgrid::mc::State* state) const +int mc_api::get_actors_size() const { - MC_state_copy_incomplete_communications_pattern((simgrid::mc::State*)state); + return mc_model_checker->get_remote_simulation().actors().size(); } -void mc_api::copy_index_comm_pattern(const simgrid::mc::State* state) const +void mc_api::copy_incomplete_comm_pattern(simgrid::mc::State* state) const { - MC_state_copy_index_communications_pattern((simgrid::mc::State*)state); + state->incomplete_comm_pattern_.clear(); + for (unsigned i=0; i < MC_smx_get_maxpid(); i++) { + std::vector res; + for (auto const& comm : incomplete_communications_pattern[i]) + res.push_back(comm->dup()); + state->incomplete_comm_pattern_.push_back(std::move(res)); + } +} + +void mc_api::copy_index_comm_pattern(simgrid::mc::State* state) const +{ + state->communication_indices_.clear(); + for (auto const& list_process_comm : initial_communications_pattern) + state->communication_indices_.push_back(list_process_comm.index_comm); } -kernel::activity::CommImpl* mc_api::get_pattern_comm_addr(smx_simcall_t request) const +kernel::activity::CommImpl* mc_api::get_comm_isend_raw_addr(smx_simcall_t request) const { auto comm_addr = simcall_comm_isend__getraw__result(request); return static_cast(comm_addr); @@ -266,6 +279,21 @@ std::vector mc_api::get_pattern_comm_data(void* addr) const return buffer; } +std::vector mc_api::get_pattern_comm_data(mc::RemotePtr const& comm_addr) const +{ + simgrid::mc::Remote temp_comm; + mc_model_checker->get_remote_simulation().read(temp_comm, comm_addr); + const simgrid::kernel::activity::CommImpl* comm = temp_comm.get_buffer(); + + std::vector buffer {}; + if (comm->src_buff_ != nullptr) { + buffer.resize(comm->src_buff_size_); + mc_model_checker->get_remote_simulation().read_bytes(buffer.data(), buffer.size(), + remote(comm->src_buff_)); + } + return buffer; +} + const char* mc_api::get_actor_host_name(smx_actor_t actor) const { const char* host_name = MC_smx_actor_get_host_name(actor); @@ -280,6 +308,26 @@ bool mc_api::check_send_request_detached(smx_simcall_t const& simcall) const return mpi_request.detached(); } +smx_actor_t mc_api::get_src_actor(mc::RemotePtr const& comm_addr) const +{ + simgrid::mc::Remote temp_comm; + mc_model_checker->get_remote_simulation().read(temp_comm, comm_addr); + const simgrid::kernel::activity::CommImpl* comm = temp_comm.get_buffer(); + + auto src_proc = mc_model_checker->get_remote_simulation().resolve_actor(simgrid::mc::remote(comm->src_actor_.get())); + return src_proc; +} + +smx_actor_t mc_api::get_dst_actor(mc::RemotePtr const& comm_addr) const +{ + simgrid::mc::Remote temp_comm; + mc_model_checker->get_remote_simulation().read(temp_comm, comm_addr); + const simgrid::kernel::activity::CommImpl* comm = temp_comm.get_buffer(); + + auto dst_proc = mc_model_checker->get_remote_simulation().resolve_actor(simgrid::mc::remote(comm->dst_actor_.get())); + return dst_proc; +} + std::size_t mc_api::get_remote_heap_bytes() const { RemoteSimulation& process = mc_model_checker->get_remote_simulation(); @@ -327,7 +375,7 @@ void mc_api::mc_show_deadlock() const MC_show_deadlock(); } -smx_actor_t mc_api::mc_smx_simcall_get_issuer(s_smx_simcall const* req) const +smx_actor_t mc_api::simcall_get_issuer(s_smx_simcall const* req) const { return MC_smx_simcall_get_issuer(req); } @@ -402,7 +450,7 @@ std::string mc_api::request_get_dot_output(smx_simcall_t req, int value) const return simgrid::mc::request_get_dot_output(req, value); } -const char* mc_api::simix_simcall_name(simgrid::simix::Simcall kind) const +const char* mc_api::simcall_get_name(simgrid::simix::Simcall kind) const { return SIMIX_simcall_name(kind); } @@ -421,6 +469,11 @@ int mc_api::get_smpi_request_tag(smx_simcall_t const& simcall, simgrid::simix::S } #endif +void mc_api::restore_state(std::shared_ptr system_state) const +{ + system_state->restore(&mc_model_checker->get_remote_simulation()); +} + bool mc_api::snapshot_equal(const Snapshot* s1, const Snapshot* s2) const { return simgrid::mc::snapshot_equal(s1, s2); @@ -437,7 +490,7 @@ void mc_api::s_close() const session->close(); } -void mc_api::s_restore_initial_state() const +void mc_api::restore_initial_state() const { session->restore_initial_state(); } @@ -447,7 +500,7 @@ void mc_api::execute(Transition const& transition) session->execute(transition); } -void mc_api::s_log_state() const +void mc_api::log_state() const { session->log_state(); }