X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/583a10d8a63c6c037d2116f15dbbd3c2b035806e..65a65222d323e2f8927a1e6738edda6f4673af0c:/src/simix/libsmx.cpp diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index 3137ed381a..d488f6c953 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -45,6 +45,13 @@ smx_activity_t simcall_execution_parallel_start(const std::string& name, int hos const double* flops_amount, const double* bytes_amount, double rate, double timeout) { + /* Check that we are not mixing VMs and PMs in the parallel task */ + bool is_a_vm = (nullptr != dynamic_cast(host_list[0])); + for (int i = 1; i < host_nb; i++) { + bool tmp_is_a_vm = (nullptr != dynamic_cast(host_list[i])); + xbt_assert(is_a_vm == tmp_is_a_vm, "parallel_execute: mixing VMs and PMs is not supported (yet)."); + } + /* checking for infinite values */ for (int i = 0 ; i < host_nb ; ++i) { if (flops_amount != nullptr) @@ -71,9 +78,9 @@ smx_activity_t simcall_execution_parallel_start(const std::string& name, int hos * * @param execution The execution synchro */ -e_smx_state_t simcall_execution_wait(smx_activity_t execution) +e_smx_state_t simcall_execution_wait(const smx_activity_t& execution) { - return (e_smx_state_t) simcall_BODY_execution_wait(execution); + return (e_smx_state_t)simcall_BODY_execution_wait(static_cast(execution.get())); } e_smx_state_t simcall_execution_test(const smx_activity_t& execution) @@ -215,7 +222,16 @@ smx_activity_t simcall_comm_iprobe(smx_mailbox_t mbox, int type, /** * @ingroup simix_comm_management */ -unsigned int simcall_comm_waitany(smx_activity_t* comms, size_t count, double timeout) +unsigned int simcall_comm_waitany(smx_activity_t comms[], size_t count, double timeout) +{ + std::unique_ptr rcomms(new simgrid::kernel::activity::CommImpl*[count]); + std::transform(comms, comms + count, rcomms.get(), [](const smx_activity_t& comm) { + return static_cast(comm.get()); + }); + return simcall_BODY_comm_waitany(rcomms.get(), count, timeout); +} + +unsigned int simcall_comm_waitany(simgrid::kernel::activity::CommImpl* comms[], size_t count, double timeout) { return simcall_BODY_comm_waitany(comms, count, timeout); } @@ -223,7 +239,18 @@ unsigned int simcall_comm_waitany(smx_activity_t* comms, size_t count, double ti /** * @ingroup simix_comm_management */ -int simcall_comm_testany(smx_activity_t* comms, size_t count) +int simcall_comm_testany(smx_activity_t comms[], size_t count) +{ + if (count == 0) + return -1; + std::unique_ptr rcomms(new simgrid::kernel::activity::CommImpl*[count]); + std::transform(comms, comms + count, rcomms.get(), [](const smx_activity_t& comm) { + return static_cast(comm.get()); + }); + return simcall_BODY_comm_testany(rcomms.get(), count); +} + +int simcall_comm_testany(simgrid::kernel::activity::CommImpl* comms[], size_t count) { if (count == 0) return -1; @@ -233,19 +260,19 @@ int simcall_comm_testany(smx_activity_t* comms, size_t count) /** * @ingroup simix_comm_management */ -void simcall_comm_wait(smx_activity_t comm, double timeout) +void simcall_comm_wait(const smx_activity_t& comm, double timeout) { xbt_assert(std::isfinite(timeout), "timeout is not finite!"); - simcall_BODY_comm_wait(comm, timeout); + simcall_BODY_comm_wait(static_cast(comm.get()), timeout); } /** * @ingroup simix_comm_management * */ -int simcall_comm_test(smx_activity_t comm) +int simcall_comm_test(const smx_activity_t& comm) { - return simcall_BODY_comm_test(comm); + return simcall_BODY_comm_test(static_cast(comm.get())); } /** @@ -404,7 +431,7 @@ smx_activity_t simcall_execution_start(const std::string& name, const std::strin { return simgrid::simix::simcall([name, category, flops_amount, priority, bound, host] { return simgrid::kernel::activity::ExecImplPtr( - new simgrid::kernel::activity::ExecImpl(std::move(name), std::move(category), nullptr, host)) + new simgrid::kernel::activity::ExecImpl(std::move(name), std::move(category), host)) ->start(flops_amount, priority, bound); }); }