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
.. 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()
.. 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_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_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::this_actor::execute(double flop, double priority)
- .. autodoxymethod:: simgrid::s4u::this_actor::parallel_execute(const std::vector< s4u::Host *> &hosts, const std::vector< double > &flops_amounts, const std::vector< double > &bytes_amounts)
- .. autodoxymethod:: simgrid::s4u::this_actor::parallel_execute(const std::vector< s4u::Host *> &hosts, const std::vector< double > &flops_amounts, const std::vector< double > &bytes_amounts, double timeout)
+ .. autodoxymethod:: simgrid::s4u::this_actor::parallel_execute(const std::vector< s4u::Host * > &hosts, const std::vector< double > &flops_amounts, const std::vector< double > &bytes_amounts)
+ .. autodoxymethod:: simgrid::s4u::this_actor::parallel_execute(const std::vector< s4u::Host * > &hosts, const std::vector< double > &flops_amounts, const std::vector< double > &bytes_amounts, double timeout)
.. group-tab:: Python
.. 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, std::string 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(void(*code)(int, char **))
.. 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_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_englobing_zone()
.. 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::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::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_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()