Finally, to wait at most until a specified time limit, use
:cpp:func:`s4u::Activity::wait_until() <simgrid::s4u::Activity::wait_until>`.
-.. todo::
-
- wait_for and wait_until are currently not implemented for Exec and Io activities.
-
Every kind of activity can be asynchronous:
- :ref:`s4u::CommPtr <API_s4u_Comm>` are created with
A big difference with TCP sockets or MPI communications is that
communications do not start right away after a
-:cpp:func:`Mailbox::put() <simgrid::s4u::Mailbox::put()>`, but wait
-for the corresponding :cpp:func:`Mailbox::get() <simgrid::s4u::Mailbox::get()>`.
+:cpp:func:`Mailbox::put() <simgrid::s4u::Mailbox::put>`, but wait
+for the corresponding :cpp:func:`Mailbox::get() <simgrid::s4u::Mailbox::get>`.
You can change this by :ref:`declaring a receiving actor <s4u_receiving_actor>`.
A big difference with twitter hashtags is that SimGrid does not
on the data you want to get from the mailbox. To model such settings
in SimGrid, you'd have one mailbox per potential topic, and subscribe
to each topic individually with a
-:cpp:func:`get_async() <simgrid::s4u::Mailbox::get_async()>` on each mailbox.
-Then, use :cpp:func:`Comm::wait_any() <simgrid::s4u::Comm::wait_any()>`
+:cpp:func:`get_async() <simgrid::s4u::Mailbox::get_async>` on each mailbox.
+Then, use :cpp:func:`Comm::wait_any() <simgrid::s4u::Comm::wait_any>`
to get the first message on any of the mailbox you are subscribed onto.
The mailboxes are not located on the network, and you can access
that marked as permanent receiver, you should call
``mailbox->set_receiver(nullptr)`` by the end of the actors so that their
memory gets properly reclaimed. This call should be at the end of the
-actor's function, not in a on_exit callback.
+actor's function, not in an on_exit callback.
.. _s4u_raii:
Note that Mailboxes, Hosts and Links are not handled thought smart
pointers (yet?). This means that it is currently impossible to destroy a
-mailbox or a link. You can still destroy an host (but probably
+mailbox or a link. You can still destroy a host (but probably
shouldn't), using :cpp:func:`simgrid::s4u::Host::destroy`.
.. THE EXAMPLES
.. group-tab:: C
.. autodoxymethod:: sg_actor_init(const char *name, sg_host_t host)
- .. autodoxymethod:: sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char **argv)
+ .. autodoxymethod:: sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, const char *const *argv)
.. autodoxymethod:: sg_actor_attach(const char *name, void *data, sg_host_t host, xbt_dict_t properties)
.. autodoxymethod:: sg_actor_detach()
.. autodoxymethod:: simgrid::s4u::Actor::get_host
.. autodoxymethod:: simgrid::s4u::Actor::set_host
- .. autodoxymethod:: simgrid::s4u::Actor::get_refcount()
+ .. autodoxymethod:: simgrid::s4u::Actor::get_refcount
.. autodoxymethod:: simgrid::s4u::Actor::get_impl
.. group-tab:: Python
.. autodoxymethod:: sg_actor_get_host(const_sg_actor_t actor)
.. autodoxymethod:: sg_actor_set_host(sg_actor_t actor, sg_host_t host)
- .. autodoxymethod:: sg_actor_data(const_sg_actor_t actor)
- .. autodoxymethod:: sg_actor_data_set(sg_actor_t actor, void *userdata)
+ .. autodoxymethod:: sg_actor_get_data(const_sg_actor_t actor)
+ .. autodoxymethod:: sg_actor_set_data(sg_actor_t actor, void *userdata)
Suspending and resuming actors
------------------------------
.. autodoxymethod:: simgrid::s4u::Actor::suspend()
.. autodoxymethod:: simgrid::s4u::Actor::resume()
- .. autodoxymethod:: simgrid::s4u::Actor::is_suspended()
+ .. autodoxymethod:: simgrid::s4u::Actor::is_suspended
.. group-tab:: Python
.. autodoxymethod:: sg_actor_suspend(sg_actor_t actor)
.. autodoxymethod:: sg_actor_resume(sg_actor_t actor)
- .. autodoxymethod:: sg_actor_is_suspended(sg_actor_t actor)
+ .. autodoxymethod:: sg_actor_is_suspended(const_sg_actor_t actor)
Specifying when actors should terminate
---------------------------------------
.. autodoxymethod:: simgrid::s4u::Actor::kill()
.. autodoxymethod:: simgrid::s4u::Actor::kill_all()
.. autodoxymethod:: simgrid::s4u::Actor::set_kill_time(double time)
- .. autodoxymethod:: simgrid::s4u::Actor::get_kill_time()
+ .. autodoxymethod:: simgrid::s4u::Actor::get_kill_time
.. autodoxymethod:: simgrid::s4u::Actor::restart()
.. autodoxymethod:: simgrid::s4u::Actor::daemonize()
.. autodoxymethod:: sg_actor_restart(sg_actor_t actor)
.. autodoxymethod:: sg_actor_daemonize(sg_actor_t actor)
+ .. autodoxymethod:: sg_actor_is_daemon
.. _API_s4u_Actor_end:
.. autodoxyvar:: simgrid::s4u::Actor::on_creation
.. autodoxyvar:: simgrid::s4u::Actor::on_suspend
- .. cpp:var:: xbt::signal<void(const Actor&, const Host & previous_location)> Actor::on_host_change
+ .. cpp:var:: xbt::signal<void(const simgrid::s4u::Actor&, const simgrid::s4u::Host & previous_location)> Actor::on_host_change
Signal fired when an actor is migrated from one host to another.
.. autodoxymethod:: simgrid::s4u::this_actor::is_maestro()
.. autodoxymethod:: simgrid::s4u::this_actor::get_host()
- .. autodoxymethod:: simgrid::s4u::this_actor::set_host(Host *new_host)
+ .. autodoxymethod:: simgrid::s4u::this_actor::set_host(simgrid::s4u::Host *new_host)
.. group-tab:: Python
.. group-tab:: C
- .. autodoxymethod:: sg_actor_self_data()
- .. autodoxymethod:: sg_actor_self_data_set(void *data)
+ .. autodoxymethod:: sg_actor_self_get_data()
+ .. autodoxymethod:: sg_actor_self_set_data(void *data)
.. autodoxymethod:: sg_actor_self_get_name()
.. autodoxymethod:: sg_actor_self_get_pid()
.. autodoxymethod:: sg_actor_self_get_ppid()
.. group-tab:: C++
- .. autodoxymethod:: simgrid::s4u::this_actor::exec_async(double flops_amounts)
+ .. autodoxymethod:: simgrid::s4u::this_actor::exec_async
.. autodoxymethod:: simgrid::s4u::this_actor::exec_init(const std::vector< s4u::Host * > &hosts, const std::vector< double > &flops_amounts, const std::vector< double > &bytes_amounts)
.. autodoxymethod:: simgrid::s4u::this_actor::exec_init(double flops_amounts)
.. autodoxymethod:: simgrid::s4u::this_actor::execute(double flop)
.. autodoxymethod:: simgrid::s4u::Engine::is_initialized()
.. autodoxymethod:: simgrid::s4u::Engine::shutdown()
.. autodoxymethod:: simgrid::s4u::Engine::set_config(const std::string &str)
+ .. autodoxymethod:: simgrid::s4u::Engine::set_config(const std::string &name, bool value)
+ .. autodoxymethod:: simgrid::s4u::Engine::set_config(const std::string &name, double value)
+ .. autodoxymethod:: simgrid::s4u::Engine::set_config(const std::string &name, int value)
+ .. autodoxymethod:: simgrid::s4u::Engine::set_config(const std::string &name, const std::string &value)
- .. autodoxymethod:: simgrid::s4u::Engine::load_deployment(const std::string &deploy)
- .. autodoxymethod:: simgrid::s4u::Engine::load_platform(const std::string &platf)
+ .. autodoxymethod:: simgrid::s4u::Engine::load_deployment
+ .. autodoxymethod:: simgrid::s4u::Engine::load_platform
.. autodoxymethod:: simgrid::s4u::Engine::register_actor(const std::string &name)
.. autodoxymethod:: simgrid::s4u::Engine::register_actor(const std::string &name, F code)
- .. autodoxymethod:: simgrid::s4u::Engine::register_default(int(*code)(int, char **))
- .. autodoxymethod:: simgrid::s4u::Engine::register_function(const std::string &name, int(*code)(int, char **))
+ .. autodoxymethod:: simgrid::s4u::Engine::register_default(void(*code)(int, char **))
.. autodoxymethod:: simgrid::s4u::Engine::register_function(const std::string &name, void(*code)(std::vector< std::string >))
+ .. autodoxymethod:: simgrid::s4u::Engine::register_function(const std::string &name, void(*code)(int, char **))
.. group-tab:: Python
.. group-tab:: C++
.. autodoxymethod:: simgrid::s4u::Engine::get_clock()
- .. autodoxymethod:: simgrid::s4u::Engine::run()
+ .. autodoxymethod:: simgrid::s4u::Engine::run
.. group-tab:: Python
.. group-tab:: C++
- .. autodoxymethod:: simgrid::s4u::Engine::get_actor_count()
- .. autodoxymethod:: simgrid::s4u::Engine::get_all_actors()
- .. autodoxymethod:: simgrid::s4u::Engine::get_filtered_actors(const std::function< bool(ActorPtr)> &filter)
+ .. autodoxymethod:: simgrid::s4u::Engine::get_actor_count
+ .. autodoxymethod:: simgrid::s4u::Engine::get_all_actors
+ .. autodoxymethod:: simgrid::s4u::Engine::get_filtered_actors
.. group-tab:: C
.. group-tab:: C++
- .. autodoxymethod:: simgrid::s4u::Engine::get_all_hosts()
- .. autodoxymethod:: simgrid::s4u::Engine::get_host_count()
- .. autodoxymethod:: simgrid::s4u::Engine::get_filtered_hosts(const std::function< bool(Host *)> &filter)
- .. autodoxymethod:: simgrid::s4u::Engine::host_by_name(const std::string &name)
- .. autodoxymethod:: simgrid::s4u::Engine::host_by_name_or_null(const std::string &name)
+ .. autodoxymethod:: simgrid::s4u::Engine::get_all_hosts
+ .. autodoxymethod:: simgrid::s4u::Engine::get_host_count
+ .. autodoxymethod:: simgrid::s4u::Engine::get_filtered_hosts
+ .. autodoxymethod:: simgrid::s4u::Engine::host_by_name
+ .. autodoxymethod:: simgrid::s4u::Engine::host_by_name_or_null
.. group-tab:: Python
.. group-tab:: C++
- .. autodoxymethod:: simgrid::s4u::Engine::get_all_links()
- .. autodoxymethod:: simgrid::s4u::Engine::get_link_count()
+ .. autodoxymethod:: simgrid::s4u::Engine::get_all_links
+ .. autodoxymethod:: simgrid::s4u::Engine::get_link_count
.. autodoxymethod:: simgrid::s4u::Engine::get_filtered_links
- .. autodoxymethod:: simgrid::s4u::Engine::link_by_name(const std::string &name)
- .. autodoxymethod:: simgrid::s4u::Engine::link_by_name_or_null(const std::string &name)
+ .. autodoxymethod:: simgrid::s4u::Engine::link_by_name
+ .. autodoxymethod:: simgrid::s4u::Engine::link_by_name_or_null
Interacting with the routing
----------------------------
.. group-tab:: C++
- .. autodoxymethod:: simgrid::s4u::Engine::get_all_netpoints()
- .. autodoxymethod:: simgrid::s4u::Engine::get_filtered_netzones()
+ .. autodoxymethod:: simgrid::s4u::Engine::get_all_netpoints
+ .. autodoxymethod:: simgrid::s4u::Engine::get_filtered_netzones
.. autodoxymethod:: simgrid::s4u::Engine::get_instance()
- .. autodoxymethod:: simgrid::s4u::Engine::get_netzone_root()
- .. autodoxymethod:: simgrid::s4u::Engine::netpoint_by_name_or_null(const std::string &name)
- .. autodoxymethod:: simgrid::s4u::Engine::netzone_by_name_or_null(const std::string &name)
+ .. autodoxymethod:: simgrid::s4u::Engine::get_netzone_root
+ .. autodoxymethod:: simgrid::s4u::Engine::netpoint_by_name_or_null
+ .. autodoxymethod:: simgrid::s4u::Engine::netzone_by_name_or_null
.. autodoxymethod:: simgrid::s4u::Engine::set_netzone_root(const NetZone *netzone)
Signals
.. group-tab:: C++
- .. autodoxymethod:: simgrid::s4u::Mailbox::get_cname() const
- .. autodoxymethod:: simgrid::s4u::Mailbox::get_name() const
+ .. autodoxymethod:: simgrid::s4u::Mailbox::get_cname
+ .. autodoxymethod:: simgrid::s4u::Mailbox::get_name
.. group-tab:: Python
.. group-tab:: C++
- .. autodoxymethod:: simgrid::s4u::Mailbox::empty()
- .. autodoxymethod:: simgrid::s4u::Mailbox::front()
+ .. autodoxymethod:: simgrid::s4u::Mailbox::empty
+ .. autodoxymethod:: simgrid::s4u::Mailbox::front
.. autodoxymethod:: simgrid::s4u::Mailbox::get()
.. autodoxymethod:: simgrid::s4u::Mailbox::get(double timeout)
.. autodoxymethod:: simgrid::s4u::Mailbox::get_async(void **data)
.. autodoxymethod:: simgrid::s4u::Mailbox::get_init()
.. autodoxymethod:: simgrid::s4u::Mailbox::iprobe(int type, bool(*match_fun)(void *, void *, kernel::activity::CommImpl *), void *data)
- .. autodoxymethod:: simgrid::s4u::Mailbox::listen()
- .. autodoxymethod:: simgrid::s4u::Mailbox::ready()
+ .. autodoxymethod:: simgrid::s4u::Mailbox::listen
+ .. autodoxymethod:: simgrid::s4u::Mailbox::ready
.. group-tab:: Python
.. group-tab:: C++
- .. autodoxymethod:: simgrid::s4u::Mailbox::get_receiver()
+ .. autodoxymethod:: simgrid::s4u::Mailbox::get_receiver
.. autodoxymethod:: simgrid::s4u::Mailbox::set_receiver(ActorPtr actor)
.. group-tab:: C
- .. autodoxymethod:: ::sg_mailbox_set_receiver(const char *alias)
+ .. autodoxymethod:: sg_mailbox_set_receiver(const char *alias)
.. _API_s4u_Resource:
.. autodoxymethod:: sg_host_core_count(const_sg_host_t host)
.. autodoxymethod:: sg_host_dump(const_sg_host_t ws)
.. autodoxymethod:: sg_host_get_name(const_sg_host_t host)
- .. autodoxymethod:: sg_host_load(const_sg_host_t host)
- .. autodoxymethod:: sg_host_speed(const_sg_host_t host)
+ .. autodoxymethod:: sg_host_get_load(const_sg_host_t host)
+ .. autodoxymethod:: sg_host_get_speed(const_sg_host_t host)
User data and properties
------------------------
.. group-tab:: C++
- .. autodoxymethod:: simgrid::s4u::Host::exec_async(double flops_amounts)
- .. autodoxymethod:: simgrid::s4u::Host::execute(double flops)
- .. autodoxymethod:: simgrid::s4u::Host::execute(double flops, double priority)
+ .. autodoxymethod:: simgrid::s4u::Host::exec_async
+ .. autodoxymethod:: simgrid::s4u::Host::execute(double flops) const
+ .. autodoxymethod:: simgrid::s4u::Host::execute(double flops, double priority) const
Platform and routing
--------------------
.. autodoxymethod:: simgrid::s4u::Host::get_netpoint() const
.. autodoxymethod:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< Link * > &links, double *latency) const
.. autodoxymethod:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< kernel::resource::LinkImpl * > &links, double *latency) const
- .. autodoxymethod:: simgrid::s4u::Host::send_to(Host *dest, double byte_amount)
+ .. autodoxymethod:: simgrid::s4u::Host::sendto(Host *dest, double byte_amount)
+ .. autodoxymethod:: simgrid::s4u::Host::sendto_async(Host *dest, double byte_amount)
.. group-tab:: C
- .. autodoxymethod:: sg_host_route(const_sg_host_t from, const_sg_host_t to, xbt_dynar_t links)
- .. autodoxymethod:: sg_host_route_bandwidth(const_sg_host_t from, const_sg_host_t to)
- .. autodoxymethod:: sg_host_route_latency(const_sg_host_t from, const_sg_host_t to)
- .. autodoxymethod:: sg_host_send_to(sg_host_t from, sg_host_t to, double byte_amount)
+ .. autodoxymethod:: sg_host_get_route(const_sg_host_t from, const_sg_host_t to, xbt_dynar_t links)
+ .. autodoxymethod:: sg_host_get_route_bandwidth(const_sg_host_t from, const_sg_host_t to)
+ .. autodoxymethod:: sg_host_get_route_latency(const_sg_host_t from, const_sg_host_t to)
+ .. autodoxymethod:: sg_host_sendto(sg_host_t from, sg_host_t to, double byte_amount)
Signals
-------
.. group-tab:: C
- .. autodoxymethod:: sg_link_bandwidth(const_sg_link_t link)
+ .. autodoxymethod:: sg_link_get_bandwidth(const_sg_link_t link)
+ .. autodoxymethod:: sg_link_get_latency(const_sg_link_t link)
+ .. autodoxymethod:: sg_link_get_name(const_sg_link_t link)
.. autodoxymethod:: sg_link_is_shared(const_sg_link_t link)
- .. autodoxymethod:: sg_link_latency(const_sg_link_t link)
- .. autodoxymethod:: sg_link_name(const_sg_link_t link)
+
+Modifying characteristics
+-------------------------
+
+.. tabs::
+
+ .. group-tab:: C++
+
+ .. autodoxymethod:: simgrid::s4u::Link::set_bandwidth(double value)
+ .. autodoxymethod:: simgrid::s4u::Link::set_latency(double value)
+
+ .. group-tab:: C
+
+ .. autodoxymethod:: sg_link_set_bandwidth(const_sg_link_t link, double value)
+ .. autodoxymethod:: sg_link_set_latency(const_sg_link_t link, double value)
User data and properties
------------------------
.. group-tab:: C
- .. autodoxymethod:: sg_link_data(const_sg_link_t link)
- .. autodoxymethod:: sg_link_data_set(sg_link_t link, void *data)
+ .. autodoxymethod:: sg_link_get_data(const_sg_link_t link)
+ .. autodoxymethod:: sg_link_set_data(sg_link_t link, void *data)
On/Off
------
Dynamic profiles
----------------
+See :ref:`howto_churn` for more details.
+
.. tabs::
.. group-tab:: C++
.. autodoxymethod:: simgrid::s4u::Link::set_latency_profile(kernel::profile::Profile *profile)
.. autodoxymethod:: simgrid::s4u::Link::set_state_profile(kernel::profile::Profile *profile)
+WIFI links
+----------
+
+.. tabs::
+
+ .. group-tab:: C++
+
+ .. autodoxymethod:: simgrid::s4u::Link::set_host_wifi_rate
+
Signals
-------
.. group-tab:: C++
- .. autodoxymethod:: simgrid::s4u::NetZone::add_bypass_route(kernel::routing::NetPoint *src, kernel::routing::NetPoint *dst, kernel::routing::NetPoint *gw_src, kernel::routing::NetPoint *gw_dst, std::vector< kernel::resource::LinkImpl * > &link_list, bool symmetrical)
+ .. autodoxymethod:: simgrid::s4u::NetZone::add_bypass_route
.. autodoxymethod:: simgrid::s4u::NetZone::add_component(kernel::routing::NetPoint *elm)
- .. autodoxymethod:: simgrid::s4u::NetZone::add_route(kernel::routing::NetPoint *src, kernel::routing::NetPoint *dst, kernel::routing::NetPoint *gw_src, kernel::routing::NetPoint *gw_dst, std::vector< kernel::resource::LinkImpl * > &link_list, bool symmetrical)
+ .. autodoxymethod:: simgrid::s4u::NetZone::add_route
.. autodoxymethod:: simgrid::s4u::NetZone::get_children() const
.. autodoxymethod:: simgrid::s4u::NetZone::get_father()
.. autodoxymethod:: simgrid::s4u::Activity::get_cname
.. autodoxymethod:: simgrid::s4u::Activity::get_name
- .. autodoxymethod:: simgrid::s4u::Activity::get_remaining()
- .. autodoxymethod:: simgrid::s4u::Activity::get_state()
+ .. autodoxymethod:: simgrid::s4u::Activity::get_remaining() const
+ .. autodoxymethod:: simgrid::s4u::Activity::get_state() const
.. autodoxymethod:: simgrid::s4u::Activity::set_remaining(double remains)
.. autodoxymethod:: simgrid::s4u::Activity::set_state(Activity::State state)
.. autodoxymethod:: simgrid::s4u::Activity::wait_until(double time_limit)
.. autodoxymethod:: simgrid::s4u::Activity::vetoable_start()
+Suspending and resuming an activity
+-----------------------------------
+
+.. tabs::
+
+ .. group-tab:: C++
+
+ .. autodoxymethod:: simgrid::s4u::Activity::suspend
+ .. autodoxymethod:: simgrid::s4u::Activity::resume
+ .. autodoxymethod:: simgrid::s4u::Activity::is_suspended
+
.. _API_s4u_Comm:
=============
.. group-tab:: C++
- .. autodoxymethod:: simgrid::s4u::Comm::get_dst_data_size()
- .. autodoxymethod:: simgrid::s4u::Comm::get_mailbox()
- .. autodoxymethod:: simgrid::s4u::Comm::get_sender()
+ .. autodoxymethod:: simgrid::s4u::Comm::get_dst_data_size() const
+ .. autodoxymethod:: simgrid::s4u::Comm::get_mailbox() const
+ .. autodoxymethod:: simgrid::s4u::Comm::get_sender() const
.. autodoxymethod:: simgrid::s4u::Comm::set_dst_data(void **buff)
.. autodoxymethod:: simgrid::s4u::Comm::set_dst_data(void **buff, size_t size)
.. autodoxymethod:: simgrid::s4u::Comm::detach()