X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/73646ee1826e59cb556293c0f77a2e1a453b4a34..d5a9454ffc4dbee2eeb3de8975b39fa11f97bf1a:/src/mc/mc_api.cpp diff --git a/src/mc/mc_api.cpp b/src/mc/mc_api.cpp index cbb995dc54..edf7e5ce1a 100644 --- a/src/mc/mc_api.cpp +++ b/src/mc/mc_api.cpp @@ -205,14 +205,21 @@ unsigned long mc_api::get_maxpid() const return MC_smx_get_maxpid(); } +int mc_api::get_actors_size() const +{ + return mc_model_checker->get_remote_simulation().actors().size(); +} + void mc_api::copy_incomplete_comm_pattern(const simgrid::mc::State* state) const { MC_state_copy_incomplete_communications_pattern((simgrid::mc::State*)state); } -void mc_api::copy_index_comm_pattern(const simgrid::mc::State* state) const +void mc_api::copy_index_comm_pattern(simgrid::mc::State* state) const { - MC_state_copy_index_communications_pattern((simgrid::mc::State*)state); + 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 @@ -266,12 +273,55 @@ 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); return host_name; } +bool mc_api::check_send_request_detached(smx_simcall_t const& simcall) const +{ + simgrid::smpi::Request mpi_request; + mc_model_checker->get_remote_simulation().read( + &mpi_request, remote(static_cast(simcall_comm_isend__get__data(simcall)))); + 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(); @@ -319,7 +369,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); } @@ -394,7 +444,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); } @@ -413,6 +463,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); @@ -429,7 +484,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(); } @@ -439,7 +494,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(); }