X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/841d7ae6385610f340ae3c0be8273bdd9ec80cd5..7f9bfecfa8f78da52f5451934dcd209acfa94787:/src/s4u/s4u_Actor.cpp diff --git a/src/s4u/s4u_Actor.cpp b/src/s4u/s4u_Actor.cpp index e230a33afa..b963779456 100644 --- a/src/s4u/s4u_Actor.cpp +++ b/src/s4u/s4u_Actor.cpp @@ -56,6 +56,15 @@ ActorPtr Actor::init(const std::string& name, s4u::Host* host) return actor->iface(); } +/** Set a non-default stack size for this context (in Kb) + * + * This must be done before starting the actor, and it won't work with the thread factory. */ +ActorPtr Actor::set_stacksize(unsigned stacksize) +{ + pimpl_->set_stacksize(stacksize * 1024); + return this; +} + ActorPtr Actor::start(const std::function& code) { simgrid::kernel::actor::simcall([this, &code] { pimpl_->start(code); }); @@ -476,6 +485,12 @@ void sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, const char actor->start(std::move(function)); } +sg_actor_t sg_actor_create(const char* name, sg_host_t host, xbt_main_func_t code, int argc, const char* const* argv) +{ + simgrid::kernel::actor::ActorCode function = simgrid::xbt::wrap_main(code, argc, argv); + return simgrid::s4u::Actor::init(name, host)->start(std::move(function)).get(); +} + void sg_actor_exit() { simgrid::s4u::this_actor::exit(); @@ -739,10 +754,32 @@ sg_actor_t sg_actor_self() return simgrid::s4u::Actor::self(); } -void sg_actor_self_execute(double flops) +void sg_actor_self_execute(double flops) // XBT_DEPRECATED_v330 +{ + simgrid::s4u::this_actor::execute(flops); +} + +void sg_actor_execute(double flops) { simgrid::s4u::this_actor::execute(flops); } +void sg_actor_execute_with_priority(double flops, double priority) +{ + simgrid::s4u::this_actor::exec_init(flops)->set_priority(priority)->wait(); +} + +void sg_actor_parallel_execute(int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount) +{ + std::vector hosts(host_list, host_list + host_nb); + std::vector flops; + std::vector bytes; + if (flops_amount != nullptr) + flops = std::vector(flops_amount, flops_amount + host_nb); + if (bytes_amount != nullptr) + bytes = std::vector(bytes_amount, bytes_amount + host_nb * host_nb); + + simgrid::s4u::this_actor::parallel_execute(hosts, flops, bytes); +} /** @brief Take an extra reference on that actor to prevent it to be garbage-collected */ void sg_actor_ref(const_sg_actor_t actor) @@ -781,6 +818,23 @@ sg_exec_t sg_actor_exec_init(double computation_amount) return exec.get(); } +sg_exec_t sg_actor_parallel_exec_init(int host_nb, const sg_host_t* host_list, double* flops_amount, + double* bytes_amount) +{ + std::vector hosts(host_list, host_list + host_nb); + std::vector flops; + std::vector bytes; + if (flops_amount != nullptr) + flops = std::vector(flops_amount, flops_amount + host_nb); + if (bytes_amount != nullptr) + bytes = std::vector(bytes_amount, bytes_amount + host_nb * host_nb); + + simgrid::s4u::ExecPtr exec = simgrid::s4u::ExecPtr(new simgrid::s4u::Exec()); + exec->set_flops_amounts(flops)->set_bytes_amounts(bytes)->set_hosts(hosts); + exec->add_ref(); + return exec.get(); +} + sg_exec_t sg_actor_exec_async(double computation_amount) { simgrid::s4u::ExecPtr exec = simgrid::s4u::this_actor::exec_async(computation_amount);