8 <object id="TOC" data="graphical-toc.svg" type="image/svg+xml"></object>
10 window.onload=function() { // Wait for the SVG to be loaded before changing it
11 var elem=document.querySelector("#TOC").contentDocument.getElementById("ActorBox")
12 elem.style="opacity:0.93999999;fill:#ff0000;fill-opacity:0.1;stroke:#000000;stroke-width:0.35277778;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1";
18 The S4U interface (SimGrid for you) mixes the full power of SimGrid
19 with the full power of C++. This is the preferred interface to describe
20 abstract algorithms in the domains of Cloud, P2P, HPC, IoT, and similar
23 Since v3.33 (Spring 2023), S4U is the main interface of SimGrid for algorithms.
24 It is feature complete, but may still evolve slightly in future releases.
25 When this happens, compiling your code will produce deprecation warnings for 4
26 releases (one year) before the removal of the old symbols.
28 .. _S4U_main_concepts:
33 A typical SimGrid simulation is composed of several |API_s4u_Actors|_, that
34 execute user-provided functions. The actors have to explicitly use the
35 S4U interface to express their :ref:`computation <API_s4u_Exec>`,
36 :ref:`communication <API_s4u_Comm>`, :ref:`disk usage <API_s4u_Io>`,
37 and other |API_s4u_Activities|_, so that they get reflected within the
38 simulator. These activities take place on resources such as |API_s4u_Hosts|_,
39 |API_s4u_Links|_, and |API_s4u_Disks|_. SimGrid predicts the time taken by each
40 activity and orchestrates the actors accordingly, waiting for the
41 completion of these activities.
44 When **communicating**, data is not directly sent to other actors but
45 posted onto a |API_s4u_Mailbox|_ that serves as a rendezvous point between
46 communicating actors. This means that you don't need to know who you
47 are talking to, you just put your communication `Put` request in a
48 mailbox, and it will be matched with a complementary `Get`
49 request. Alternatively, actors can interact through **classical
50 synchronization mechanisms** such as |API_s4u_Barrier|_, |API_s4u_Semaphore|_,
51 |API_s4u_Mutex|_, and |API_s4u_ConditionVariable|_.
53 Each actor is located on a simulated |API_s4u_Host|_. Each host is located
54 in a |API_s4u_NetZone|_, that knows the networking path between one
55 resource to another. Each NetZone is included in another one, forming
56 a tree of NetZones which root zone contains the whole platform. The
57 actors can also be located on a |API_s4U_VirtualMachine|_ that may
58 restrict the activities it contains to a limited amount of cores.
59 Virtual machines can also be migrated between hosts.
61 The :ref:`simgrid::s4u::this_actor <API_s4u_this_actor>` namespace
62 provides many helper functions to simplify the code of actors.
64 .. rst-class:: compact-list
66 - **Simulation Elements**
68 - :ref:`class Actor <API_s4u_Actor>`: Active entities executing your application.
69 - :ref:`class Engine <API_s4u_Engine>`: Simulation engine (singleton).
70 - :ref:`class Mailbox <API_s4u_Mailbox>`: Communication rendezvous, with which actors meet each other.
74 - :ref:`class Disk <API_s4u_Disk>`: Resource on which actors can write and read data.
75 - :ref:`class Host <API_s4u_Host>`: Actor location, providing computational power.
76 - :ref:`class Link <API_s4u_Link>`: Interconnecting hosts.
77 - :ref:`class NetZone <API_s4u_NetZone>`: Sub-region of the platform, containing resources (Hosts, Links, etc).
78 - :ref:`class VirtualMachine <API_s4u_VirtualMachine>`: Execution containers that can be moved between Hosts.
80 - **Activities** (:ref:`class Activity <API_s4u_Activity>`): The things that actors can do on resources.
82 - :ref:`class Comm <API_s4u_Comm>`: Communication activity, started on Mailboxes and consuming links.
83 - :ref:`class Exec <API_s4u_Exec>`: Computation activity, started on Host and consuming CPU resources.
84 - :ref:`class Io <API_s4u_Io>`: I/O activity, started on and consuming disks.
86 - **Synchronization Objects**: Classical IPC that actors can use
88 - :ref:`class Barrier <API_s4u_Barrier>`
89 - :ref:`class ConditionVariable <API_s4u_ConditionVariable>`
90 - :ref:`class Mutex <API_s4u_Mutex>`
91 - :ref:`class Semaphore <API_s4u_Semaphore>`
93 .. |API_s4u_Actors| replace:: **Actors**
94 .. _API_s4u_Actors: #api-s4u-actor
96 .. |API_s4u_Activities| replace:: **Activities**
97 .. _API_s4u_Activities: #api-s4u-activity
99 .. |API_s4u_Hosts| replace:: **Hosts**
100 .. _API_s4u_Hosts: #api-s4u-host
102 .. |API_s4u_Links| replace:: **Links**
103 .. _API_s4u_Links: #api-s4u-link
105 .. |API_s4u_Disks| replace:: **Disks**
106 .. _API_s4u_Disks: #api-s4u-disk
108 .. |API_s4u_VirtualMachine| replace:: **VirtualMachines**
110 .. |API_s4u_Host| replace:: **Host**
112 .. |API_s4u_Mailbox| replace:: **Mailbox**
114 .. |API_s4u_Mailboxes| replace:: **Mailboxes**
115 .. _API_s4u_Mailboxes: #s4u-mailbox
117 .. |API_s4u_NetZone| replace:: **NetZone**
119 .. |API_s4u_Barrier| replace:: **Barrier**
121 .. |API_s4u_Semaphore| replace:: **Semaphore**
123 .. |API_s4u_ConditionVariable| replace:: **ConditionVariable**
125 .. |API_s4u_Mutex| replace:: **Mutex**
132 Activities represent the actions that consume a resource, such as a
133 :ref:`Comm <API_s4u_Comm>` that consumes the *transmitting power* of
134 :ref:`Link <API_s4u_Link>` resources, or an :ref:`Exec <API_s4u_Exec>`
135 that consumes the *computing power* of :ref:`Host <API_s4u_Host>` resources.
136 See also the :ref:`full API <API_s4u_Activity>` below.
138 =======================
139 Asynchronous Activities
140 =======================
142 Every activity can be either **blocking** or **asynchronous**. For
143 example, :cpp:func:`s4u::Mailbox::put() <simgrid::s4u::Mailbox::put>`
144 and :cpp:func:`s4u::Mailbox::get() <simgrid::s4u::Mailbox::get>`
145 create blocking communications: the actor is blocked until the
146 completion of that communication. Asynchronous communications do not
147 block the actor during their execution but progress on their own.
149 Once your asynchronous activity is started, you can test for its
150 completion using :cpp:func:`s4u::Activity::test() <simgrid::s4u::Activity::test>`.
151 This function returns ``true`` if the activity is completed already.
152 You can also use :cpp:func:`s4u::Activity::wait() <simgrid::s4u::Activity::wait>`
153 to block until the completion of the activity. To wait for at most a given amount of time,
154 use :cpp:func:`s4u::Activity::wait_for() <simgrid::s4u::Activity::wait_for>`.
155 Finally, to wait at most until a specified time limit, use
156 :cpp:func:`s4u::Activity::wait_until() <simgrid::s4u::Activity::wait_until>`.
158 Every kind of activity can be asynchronous.
159 :ref:`s4u::CommPtr <API_s4u_Comm>` are created with :cpp:func:`s4u::Mailbox::put_async() <simgrid::s4u::Mailbox::put_async>` and
160 :cpp:func:`s4u::Mailbox::get_async() <simgrid::s4u::Mailbox::get_async>`;
161 :ref:`s4u::IoPtr <API_s4u_Io>` are created with :cpp:func:`s4u::Disk::read_async() <simgrid::s4u::Disk::read_async>` and
162 :cpp:func:`s4u::Disk::write_async() <simgrid::s4u::Disk::write_async>`; and
163 :ref:`s4u::ExecPtr <API_s4u_Exec>` are created with
164 :cpp:func:`s4u::Host::exec_async() <simgrid::s4u::Host::exec_async>`.
165 In the future, it will become possible to have asynchronous IPC such as asynchronous mutex lock requests.
167 The following example shows how to have several concurrent
168 communications ongoing. First, you have to declare a vector in which
169 we will store the ongoing communications. It is also useful to have a
172 .. literalinclude:: ../../examples/cpp/comm-waitall/s4u-comm-waitall.cpp
174 :start-after: init-begin
175 :end-before: init-end
178 Then, you start all the communications that should occur concurrently with
179 :cpp:func:`s4u::Mailbox::put_async() <simgrid::s4u::Mailbox::put_async>`.
180 Finally, the actor waits for the completion of all of them at once
181 with :cpp:func:`s4u::Comm::wait_all() <simgrid::s4u::Comm::wait_all>`.
183 .. literalinclude:: ../../examples/cpp/comm-waitall/s4u-comm-waitall.cpp
185 :start-after: put-begin
189 =====================
190 Activities Life cycle
191 =====================
193 Sometimes, you want to change the setting of an activity before it even starts.
195 .. todo:: write this section
202 Please also refer to the :ref:`API reference for s4u::Mailbox
209 |API_s4u_Mailboxes|_ are rendezvous points for network communications,
210 similar to URLs on which you could post and retrieve data. Actually,
211 the mailboxes are not involved in the communication once it starts,
212 but only to find the contact with which you want to communicate.
214 They are similar to many common things: The phone number, which allows
215 the caller to find the receiver. The Twitter hashtag, which helps
216 senders and receivers to find each other. In TCP, the pair
217 ``{host name, host port}`` to which you can connect to find your peer.
218 In HTTP, URLs through which the clients can connect to the servers.
219 In ZeroMQ, the queues are used to match senders and receivers.
221 One big difference with most of these systems is that no actor is the
222 exclusive owner of a mailbox, neither in sending nor in receiving.
223 Many actors can send into and/or receive from the same mailbox. TCP
224 socket ports for example are shared on the sender side but exclusive
225 on the receiver side (only one process can receive from a given socket
226 at a given point of time).
228 A big difference with TCP sockets or MPI communications is that
229 communications do not start right away after a
230 :cpp:func:`Mailbox::put() <simgrid::s4u::Mailbox::put>`, but wait
231 for the corresponding :cpp:func:`Mailbox::get() <simgrid::s4u::Mailbox::get>`.
232 You can change this by :ref:`declaring a receiving actor <s4u_receiving_actor>`.
234 A big difference with Twitter hashtags is that SimGrid does not
235 offer easy support to broadcast a given message to many
236 receivers. So that would be like a Twitter tag where each message
237 is consumed by the first receiver.
239 A big difference with the ZeroMQ queues is that you cannot filter
240 on the data you want to get from the mailbox. To model such settings
241 in SimGrid, you'd have one mailbox per potential topic, and subscribe
242 to each topic individually with a
243 :cpp:func:`get_async() <simgrid::s4u::Mailbox::get_async>` on each mailbox.
244 Then, use :cpp:func:`Comm::wait_any() <simgrid::s4u::Comm::wait_any>`
245 to get the first message on any of the mailboxes you are subscribed to.
247 The mailboxes are not located on the network, and you can access
248 them without any latency. The network delays are only related to the
249 location of the sender and receiver once the match between them is
250 done on the mailbox. This is just like the phone number that you
251 can use locally, and the geographical distance only comes into play
252 once you start the communication by dialing this number.
254 =====================
255 How to use Mailboxes?
256 =====================
258 You can retrieve any existing mailbox from its name (which is a
259 unique string, just like a Twitter tag). This results in a
260 versatile tool that can be used to build many different
263 To model classical socket communications, use "hostname:port" as
264 mailbox names, and make sure that only one actor reads into a given
265 mailbox. This does not make it easy to build a perfectly realistic
266 model of the TCP sockets, but in most cases, this system is too
267 cumbersome for your simulations anyway. You probably want something
268 simpler, that turns out to be easy to build with the mailboxes.
270 Many SimGrid examples use a sort of yellow page system where the
271 mailbox names are the name of the service (such as "worker",
272 "master", or "reducer"). That way, you don't have to know where your
273 peer is located to contact it. You don't even need its name. Its
274 function is enough for that. This also gives you some sort of load
275 balancing for free if more than one actor pulls from the mailbox:
276 the first actor that can deal with the request will handle it.
278 =========================================
279 How are put() and get() requests matched?
280 =========================================
282 The matching algorithm simple: first come, first serve. When a new
283 send arrives, it matches the oldest enqueued receive. If no receive is
284 currently enqueued, then the incoming send is enqueued. As you can
285 see, the mailbox cannot contain both send and receive requests: all
286 enqueued requests must be of the same sort.
288 .. _s4u_receiving_actor:
290 ===========================
291 Declaring a Receiving Actor
292 ===========================
294 The last twist is that by default in the simulator, the data starts
295 to be exchanged only when both the sender and the receiver are
296 announced (it waits until both :cpp:func:`put() <simgrid::s4u::Mailbox::put()>`
297 and :cpp:func:`get() <simgrid::s4u::Mailbox::get()>` are posted).
298 In TCP, since you establish connections beforehand, the data starts to
299 flow as soon as the sender posts it, even if the receiver did not post
300 its :cpp:func:`put() <simgrid::s4u::Mailbox::put()>` yet.
302 To model this in SimGrid, you can declare a specific receiver to a
303 given mailbox (with the function
304 :cpp:func:`set_receiver() <simgrid::s4u::Mailbox::set_receiver()>`).
305 That way, any :cpp:func:`put() <simgrid::s4u::Mailbox::put()>`
306 posted to that mailbox will start as soon as possible, and the data
307 will already be there on the receiver host when the receiver actor
308 posts its :cpp:func:`get() <simgrid::s4u::Mailbox::get()>`
310 Note that being permanent receivers of a mailbox prevents actors to be
311 garbage-collected. If your simulation creates many short-lived actors
312 that are marked as permanent receiver, you should call
313 ``mailbox->set_receiver(nullptr)`` by the end of the actors so that their
314 memory gets properly reclaimed. This call should be at the end of the
315 actor's function, not in an on_exit callback.
317 ===============================
318 Communicating without Mailboxes
319 ===============================
321 Sometimes you don't want to simulate communications between actors as
322 allowed by mailboxes, but you want to create a direct communication
323 between two arbitrary hosts. This can arise when you write a
324 high-level model of a centralized scheduler, or when you model direct
325 communications such as one-sided communications in MPI or remote
326 memory direct access in PGAS.
328 For that, :cpp:func:`Comm::sendto() <simgrid::s4u::Comm::sendto()>`
329 simulates a direct communication between the two specified hosts. No
330 mailbox is used, and there is no rendezvous between actors. You can
331 freely mix such direct communications and rendezvous-based
332 communications. Alternatively, :cpp:func:`Comm::sendto_init()
333 <simgrid::s4u::Comm::sendto_init()>` and
334 :cpp:func:`Comm::sendto_async() <simgrid::s4u::Comm::sendto_async()>`
335 create asynchronous direct communications.
342 For sake of simplicity, we use `RAII
343 <https://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization>`_
344 for many classes in S4U. This is an idiom where resources are automatically
345 managed through the context. Provided that you never manipulate
346 objects of type Foo directly but always FooPtr references (which are
347 defined as `boost::intrusive_ptr
348 <http://www.boost.org/doc/libs/1_61_0/libs/smart_ptr/intrusive_ptr.html>`_
349 <Foo>), you will never have to explicitly release the resource that
350 you use nor to free the memory of unused objects.
351 Here is a little example:
357 simgrid::s4u::MutexPtr mutex = simgrid::s4u::Mutex::create(); // Too bad we cannot use `new`
359 mutex->lock(); // use the mutex as a simple reference
363 } // The mutex gets automatically freed because the only existing reference gets out of scope
365 Note that Mailboxes, Hosts, and Links are not handled through smart
366 pointers (yet?). This means that it is currently impossible to destroy a
367 mailbox or a link. You can still destroy a host (but probably
368 shouldn't), using :cpp:func:`simgrid::s4u::Host::destroy`.
373 .. _API_s4u_simulation_object:
389 .. doxygenclass:: simgrid::s4u::Actor
391 .. doxygentypedef:: aid_t
394 .. group-tab:: Python
396 .. autoclass:: simgrid.Actor
407 #include <simgrid/s4u/Actor.hpp>
409 .. doxygentypedef:: ActorPtr
411 .. group-tab:: Python
415 from simgrid import Actor
421 #include <simgrid/actor.h>
423 .. doxygentypedef:: sg_actor_t
424 .. doxygentypedef:: const_sg_actor_t
425 .. doxygenfunction:: sg_actor_ref
426 .. doxygenfunction:: sg_actor_unref
432 See also :ref:`the relevant example <s4u_ex_actors_create>`.
438 .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, const std::function< void()> &code)
439 .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, F code)
440 .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, F code, Args... args)
441 .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, const std::string &function, std::vector< std::string > args)
443 .. doxygenfunction:: simgrid::s4u::Actor::init(const std::string &name, s4u::Host *host)
444 .. doxygenfunction:: simgrid::s4u::Actor::start(const std::function< void()> &code)
445 .. doxygenfunction:: simgrid::s4u::Actor::set_stacksize
447 .. group-tab:: Python
449 .. automethod:: simgrid.Actor.create
453 .. doxygenfunction:: sg_actor_create(const char *name, sg_host_t host, xbt_main_func_t code, int argc, char *const *argv)
454 .. doxygenfunction:: sg_actor_init(const char *name, sg_host_t host)
455 .. doxygenfunction:: sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char *const *argv)
456 .. doxygenfunction:: sg_actor_set_stacksize
458 .. doxygenfunction:: sg_actor_attach(const char *name, void *data, sg_host_t host, xbt_dict_t properties)
459 .. doxygenfunction:: sg_actor_detach()
468 .. doxygenfunction:: simgrid::s4u::Actor::by_pid(aid_t pid)
469 .. doxygenfunction:: simgrid::s4u::Actor::self()
471 .. group-tab:: Python
473 .. automethod:: simgrid.Actor.by_pid
474 .. automethod:: simgrid.Actor.self
478 .. doxygenfunction:: sg_actor_by_pid(aid_t pid)
479 .. doxygenfunction:: sg_actor_self()
480 .. doxygenfunction:: sg_actor_list()
489 .. doxygenfunction:: simgrid::s4u::Actor::get_cname
490 .. doxygenfunction:: simgrid::s4u::Actor::get_name
491 .. doxygenfunction:: simgrid::s4u::Actor::get_pid
492 .. doxygenfunction:: simgrid::s4u::Actor::get_ppid
493 .. doxygenfunction:: simgrid::s4u::Actor::get_properties() const
494 .. doxygenfunction:: simgrid::s4u::Actor::get_property(const std::string &key) const
495 .. doxygenfunction:: simgrid::s4u::Actor::set_property(const std::string &key, const std::string &value)
497 .. doxygenfunction:: simgrid::s4u::Actor::get_host
498 .. doxygenfunction:: simgrid::s4u::Actor::set_host
500 .. doxygenfunction:: simgrid::s4u::Actor::get_refcount
501 .. doxygenfunction:: simgrid::s4u::Actor::get_impl
503 .. group-tab:: Python
505 .. autoattribute:: simgrid.Actor.name
506 .. autoattribute:: simgrid.Actor.host
507 .. autoattribute:: simgrid.Actor.pid
508 .. autoattribute:: simgrid.Actor.ppid
512 .. doxygenfunction:: sg_actor_get_name(const_sg_actor_t actor)
513 .. doxygenfunction:: sg_actor_get_pid(const_sg_actor_t actor)
514 .. doxygenfunction:: sg_actor_get_ppid(const_sg_actor_t actor)
515 .. doxygenfunction:: sg_actor_get_properties(const_sg_actor_t actor)
516 .. doxygenfunction:: sg_actor_get_property_value(const_sg_actor_t actor, const char *name)
518 .. doxygenfunction:: sg_actor_get_host(const_sg_actor_t actor)
519 .. doxygenfunction:: sg_actor_set_host(sg_actor_t actor, sg_host_t host)
521 .. doxygenfunction:: sg_actor_get_data(const_sg_actor_t actor)
522 .. doxygenfunction:: sg_actor_set_data(sg_actor_t actor, void *userdata)
524 Suspending and resuming actors
525 ------------------------------
531 .. doxygenfunction:: simgrid::s4u::Actor::suspend()
532 .. doxygenfunction:: simgrid::s4u::Actor::resume()
533 .. doxygenfunction:: simgrid::s4u::Actor::is_suspended
535 .. group-tab:: Python
537 .. automethod:: simgrid.Actor.resume
538 .. automethod:: simgrid.Actor.suspend
539 .. automethod:: simgrid.Actor.is_suspended
543 .. doxygenfunction:: sg_actor_suspend(sg_actor_t actor)
544 .. doxygenfunction:: sg_actor_resume(sg_actor_t actor)
545 .. doxygenfunction:: sg_actor_is_suspended(const_sg_actor_t actor)
547 Specifying when actors should terminate
548 ---------------------------------------
554 .. doxygenfunction:: simgrid::s4u::Actor::kill()
555 .. doxygenfunction:: simgrid::s4u::Actor::kill_all()
556 .. doxygenfunction:: simgrid::s4u::Actor::set_kill_time(double time)
557 .. doxygenfunction:: simgrid::s4u::Actor::get_kill_time
559 .. doxygenfunction:: simgrid::s4u::Actor::restart()
560 .. doxygenfunction:: simgrid::s4u::Actor::daemonize()
561 .. doxygenfunction:: simgrid::s4u::Actor::is_daemon
563 .. group-tab:: Python
565 .. automethod:: simgrid.Actor.kill
566 .. automethod:: simgrid.Actor.kill_all
568 .. automethod:: simgrid.Actor.daemonize
569 .. automethod:: simgrid.Actor.is_daemon
573 .. doxygenfunction:: sg_actor_kill(sg_actor_t actor)
574 .. doxygenfunction:: sg_actor_kill_all()
575 .. doxygenfunction:: sg_actor_set_kill_time(sg_actor_t actor, double kill_time)
577 .. doxygenfunction:: sg_actor_restart(sg_actor_t actor)
578 .. doxygenfunction:: sg_actor_daemonize(sg_actor_t actor)
579 .. doxygenfunction:: sg_actor_is_daemon
581 .. _API_s4u_Actor_end:
583 Reacting to the end of actors
584 -----------------------------
590 .. doxygenfunction:: simgrid::s4u::Actor::on_exit
591 .. doxygenfunction:: simgrid::s4u::Actor::join() const
592 .. doxygenfunction:: simgrid::s4u::Actor::join(double timeout) const
593 .. doxygenfunction:: simgrid::s4u::Actor::set_auto_restart(bool autorestart)
594 .. doxygenfunction:: simgrid::s4u::Actor::get_restart_count
596 .. group-tab:: Python
598 .. automethod:: simgrid.Actor.join
602 .. doxygenfunction:: sg_actor_on_exit
603 .. doxygenfunction:: sg_actor_join(const_sg_actor_t actor, double timeout)
604 .. doxygenfunction:: sg_actor_set_auto_restart(sg_actor_t actor, int auto_restart)
613 .. doxygenfunction:: simgrid::s4u::Actor::on_creation_cb
614 .. doxygenfunction:: simgrid::s4u::Actor::on_suspend_cb
615 .. doxygenfunction:: simgrid::s4u::Actor::on_this_suspend_cb
616 .. doxygenfunction:: simgrid::s4u::Actor::on_host_change_cb
617 .. doxygenfunction:: simgrid::s4u::Actor::on_this_host_change_cb
618 .. doxygenfunction:: simgrid::s4u::Actor::on_resume_cb
619 .. doxygenfunction:: simgrid::s4u::Actor::on_this_resume_cb
620 .. doxygenfunction:: simgrid::s4u::Actor::on_sleep_cb
621 .. doxygenfunction:: simgrid::s4u::Actor::on_this_sleep_cb
622 .. doxygenfunction:: simgrid::s4u::Actor::on_wake_up_cb
623 .. doxygenfunction:: simgrid::s4u::Actor::on_this_wake_up_cb
624 .. doxygenfunction:: simgrid::s4u::Actor::on_termination_cb
625 .. doxygenfunction:: simgrid::s4u::Actor::on_this_termination_cb
626 .. doxygenfunction:: simgrid::s4u::Actor::on_destruction_cb
627 .. doxygenfunction:: simgrid::s4u::Actor::on_this_destruction_cb
629 .. _API_s4u_this_actor:
635 These functions can be used in your user code to interact with the actor
636 currently running (the one retrieved with :cpp:func:`simgrid::s4u::Actor::self`).
637 Using these functions can greatly improve the code readability.
646 .. doxygenfunction:: simgrid::s4u::this_actor::get_cname()
647 .. doxygenfunction:: simgrid::s4u::this_actor::get_name()
648 .. doxygenfunction:: simgrid::s4u::this_actor::get_pid()
649 .. doxygenfunction:: simgrid::s4u::this_actor::get_ppid()
650 .. doxygenfunction:: simgrid::s4u::this_actor::is_maestro()
652 .. doxygenfunction:: simgrid::s4u::this_actor::get_host()
653 .. doxygenfunction:: simgrid::s4u::this_actor::set_host(Host *new_host)
655 .. group-tab:: Python
657 .. autofunction:: simgrid.this_actor.get_host
658 .. autofunction:: simgrid.this_actor.set_host
660 .. autofunction:: simgrid.this_actor.get_pid
661 .. autofunction:: simgrid.this_actor.get_ppid
665 .. doxygenfunction:: sg_actor_self_get_data()
666 .. doxygenfunction:: sg_actor_self_set_data(void *data)
667 .. doxygenfunction:: sg_actor_self_get_name()
668 .. doxygenfunction:: sg_actor_self_get_pid()
669 .. doxygenfunction:: sg_actor_self_get_ppid()
670 .. doxygenfunction:: sg_host_self()
671 .. doxygenfunction:: sg_host_self_get_name()
673 Suspending and resuming
674 -----------------------
680 .. doxygenfunction:: simgrid::s4u::this_actor::suspend()
681 .. doxygenfunction:: simgrid::s4u::this_actor::yield()
683 .. group-tab:: Python
685 .. autofunction:: simgrid.this_actor.suspend
686 .. autofunction:: simgrid.this_actor.yield_
690 .. doxygenfunction:: sg_actor_yield()
699 Please refer to :ref:`the relevant documentation <logging_prog>`.
701 .. group-tab:: Python
703 .. autofunction:: simgrid.this_actor.debug
704 .. autofunction:: simgrid.this_actor.info
705 .. autofunction:: simgrid.this_actor.warning
706 .. autofunction:: simgrid.this_actor.error
715 .. doxygenfunction:: simgrid::s4u::this_actor::sleep_for(double duration)
716 .. doxygenfunction:: simgrid::s4u::this_actor::sleep_for(std::chrono::duration< Rep, Period > duration)
717 .. doxygenfunction:: simgrid::s4u::this_actor::sleep_until(const SimulationTimePoint< Duration > &wakeup_time)
718 .. doxygenfunction:: simgrid::s4u::this_actor::sleep_until(double wakeup_time)
720 .. group-tab:: Python
722 .. autofunction:: simgrid.this_actor.sleep_for
723 .. autofunction:: simgrid.this_actor.sleep_until
727 .. doxygenfunction:: sg_actor_sleep_for(double duration)
729 Simulating executions
730 ---------------------
732 Simulate the execution of some code on this actor. You can either simulate
733 parallel or sequential code and you can either block upon the termination of
734 the execution, or start an asynchronous activity.
740 .. doxygenfunction:: simgrid::s4u::this_actor::exec_async
741 .. doxygenfunction:: simgrid::s4u::this_actor::exec_init(const std::vector< s4u::Host * > &hosts, const std::vector< double > &flops_amounts, const std::vector< double > &bytes_amounts)
742 .. doxygenfunction:: simgrid::s4u::this_actor::exec_init(double flops_amounts)
743 .. doxygenfunction:: simgrid::s4u::this_actor::execute(double flop)
744 .. doxygenfunction:: simgrid::s4u::this_actor::execute(double flop, double priority)
745 .. doxygenfunction:: simgrid::s4u::this_actor::parallel_execute(const std::vector< s4u::Host * > &hosts, const std::vector< double > &flops_amounts, const std::vector< double > &bytes_amounts)
746 .. doxygenfunction:: simgrid::s4u::this_actor::thread_execute
748 .. group-tab:: Python
750 .. autofunction:: simgrid.this_actor.exec_async
751 .. autofunction:: simgrid.this_actor.exec_init
752 .. autofunction:: simgrid.this_actor.execute
756 .. doxygenfunction:: sg_actor_execute(double flops)
757 .. doxygenfunction:: sg_actor_execute_with_priority(double flops, double priority)
758 .. doxygenfunction:: sg_actor_exec_init(double computation_amount)
759 .. doxygenfunction:: sg_actor_exec_async(double computation_amount)
760 .. doxygenfunction:: sg_actor_parallel_exec_init(int host_nb, const sg_host_t* host_list, double* flops_amount, double* bytes_amount);
769 .. doxygenfunction:: simgrid::s4u::this_actor::exit()
770 .. doxygenfunction:: simgrid::s4u::this_actor::on_exit(const std::function< void(bool)> &fun)
772 .. group-tab:: Python
774 .. autofunction:: simgrid.this_actor.exit
775 .. autofunction:: simgrid.this_actor.on_exit
779 See also :cpp:func:`sg_actor_on_exit`.
781 .. doxygenfunction:: sg_actor_exit
793 .. doxygenclass:: simgrid::s4u::Engine
795 .. group-tab:: Python
797 .. autoclass:: simgrid.Engine
806 .. doxygenfunction:: simgrid::s4u::Engine::Engine(int *argc, char **argv)
807 .. doxygenfunction:: simgrid::s4u::Engine::is_initialized()
808 .. doxygenfunction:: simgrid::s4u::Engine::shutdown()
809 .. doxygenfunction:: simgrid::s4u::Engine::get_instance()
811 .. group-tab:: Python
813 .. automethod:: simgrid.Engine.__init__
814 .. autoattribute:: simgrid.Engine.instance
818 .. doxygenfunction:: simgrid_init
827 .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &str)
828 .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, bool value)
829 .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, double value)
830 .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, int value)
831 .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, const std::string &value)
833 .. doxygenfunction:: simgrid::s4u::Engine::load_deployment
834 .. doxygenfunction:: simgrid::s4u::Engine::load_platform
835 .. doxygenfunction:: simgrid::s4u::Engine::flatify_platform
836 .. doxygenfunction:: simgrid::s4u::Engine::register_actor(const std::string &name)
837 .. doxygenfunction:: simgrid::s4u::Engine::register_actor(const std::string &name, F code)
838 .. doxygenfunction:: simgrid::s4u::Engine::register_default(const std::function< void(int, char **)> &code)
839 .. doxygenfunction:: simgrid::s4u::Engine::register_default(const kernel::actor::ActorCodeFactory &factory)
841 .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const std::function< void(int, char **)> &code)
842 .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const std::function< void(std::vector< std::string >)> &code)
843 .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const kernel::actor::ActorCodeFactory &factory)
845 .. group-tab:: Python
847 .. automethod:: simgrid.Engine.load_deployment
848 .. automethod:: simgrid.Engine.load_platform
849 .. automethod:: simgrid.Engine.register_actor
853 .. doxygenfunction:: simgrid_load_deployment
854 .. doxygenfunction:: simgrid_load_platform
855 .. doxygenfunction:: simgrid_register_default
856 .. doxygenfunction:: simgrid_register_function
866 .. doxygenfunction:: simgrid::s4u::Engine::get_clock()
867 .. doxygenfunction:: simgrid::s4u::Engine::run
868 .. doxygenfunction:: simgrid::s4u::Engine::run_until
870 .. group-tab:: Python
872 .. autoattribute:: simgrid.Engine.clock
873 .. automethod:: simgrid.Engine.run
874 .. automethod:: simgrid.Engine.run_until
878 .. doxygenfunction:: simgrid_get_clock
879 .. doxygenfunction:: simgrid_run
880 .. doxygenfunction:: simgrid_run_until
889 .. doxygenfunction:: simgrid::s4u::Engine::get_actor_count
890 .. doxygenfunction:: simgrid::s4u::Engine::get_all_actors
891 .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_actors
895 .. doxygenfunction:: sg_actor_count()
904 .. doxygenfunction:: simgrid::s4u::Engine::get_all_hosts
905 .. doxygenfunction:: simgrid::s4u::Engine::get_host_count
906 .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_hosts
907 .. doxygenfunction:: simgrid::s4u::Engine::host_by_name
908 .. doxygenfunction:: simgrid::s4u::Engine::host_by_name_or_null
910 .. group-tab:: Python
912 .. autoattribute:: simgrid.Engine.all_hosts
913 .. automethod:: simgrid.Engine.host_by_name
917 See also :cpp:func:`sg_host_list` and :cpp:func:`sg_host_count`.
926 .. doxygenfunction:: simgrid::s4u::Engine::get_all_links
927 .. doxygenfunction:: simgrid::s4u::Engine::get_link_count
928 .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_links
929 .. doxygenfunction:: simgrid::s4u::Engine::link_by_name
930 .. doxygenfunction:: simgrid::s4u::Engine::link_by_name_or_null
932 .. group-tab:: Python
934 .. autoattribute:: simgrid.Engine.all_links
936 Interacting with the routing
937 ----------------------------
943 .. doxygenfunction:: simgrid::s4u::Engine::get_all_netpoints
944 .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_netzones
945 .. doxygenfunction:: simgrid::s4u::Engine::get_netzone_root
946 .. doxygenfunction:: simgrid::s4u::Engine::netpoint_by_name_or_null
947 .. doxygenfunction:: simgrid::s4u::Engine::netzone_by_name_or_null
949 .. group-tab:: Python
951 .. autoattribute:: simgrid.Engine.all_netpoints
952 .. autoattribute:: simgrid.Engine.netzone_root
953 .. automethod:: simgrid.Engine.netpoint_by_name
954 .. automethod:: simgrid.Engine.netzone_by_name
963 .. doxygenfunction:: simgrid::s4u::Engine::on_deadlock_cb
964 .. doxygenfunction:: simgrid::s4u::Engine::on_platform_created_cb
965 .. doxygenfunction:: simgrid::s4u::Engine::on_platform_creation_cb
966 .. doxygenfunction:: simgrid::s4u::Engine::on_simulation_start_cb
967 .. doxygenfunction:: simgrid::s4u::Engine::on_simulation_end_cb
968 .. doxygenfunction:: simgrid::s4u::Engine::on_time_advance_cb
980 .. doxygenclass:: simgrid::s4u::Mailbox
982 .. group-tab:: Python
984 .. autoclass:: simgrid.Mailbox
986 Please also refer to the :ref:`full doc on s4u::Mailbox <s4u_mailbox>`.
997 #include <simgrid/s4u/Mailbox.hpp>
999 Note that there is no MailboxPtr type and that you cannot use the RAII
1000 idiom on mailboxes because they are internal objects to the simulation
1001 engine. Once created, there is no way to destroy a mailbox before the end
1004 .. doxygenfunction:: simgrid::s4u::Mailbox::by_name(const std::string &name)
1006 .. group-tab:: Python
1010 #include <simgrid/mailbox.h>
1012 .. automethod:: simgrid.Mailbox.by_name
1018 #include <simgrid/s4u/mailbox.h>
1020 .. doxygentypedef:: sg_mailbox_t
1021 .. doxygentypedef:: const_sg_mailbox_t
1023 .. doxygenfunction:: sg_mailbox_by_name(const char *alias)
1032 .. doxygenfunction:: simgrid::s4u::Mailbox::get_cname
1033 .. doxygenfunction:: simgrid::s4u::Mailbox::get_name
1035 .. group-tab:: Python
1037 .. autoattribute:: simgrid.Mailbox.name
1046 .. doxygenfunction:: simgrid::s4u::Mailbox::put(void *payload, uint64_t simulated_size_in_bytes)
1047 .. doxygenfunction:: simgrid::s4u::Mailbox::put(void *payload, uint64_t simulated_size_in_bytes, double timeout)
1048 .. doxygenfunction:: simgrid::s4u::Mailbox::put_async(void *data, uint64_t simulated_size_in_bytes)
1049 .. doxygenfunction:: simgrid::s4u::Mailbox::put_init()
1050 .. doxygenfunction:: simgrid::s4u::Mailbox::put_init(void *data, uint64_t simulated_size_in_bytes)
1052 .. group-tab:: Python
1054 .. automethod:: simgrid.Mailbox.put
1055 .. automethod:: simgrid.Mailbox.put_async
1056 .. automethod:: simgrid.Mailbox.put_init
1060 .. doxygenfunction:: sg_mailbox_put(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1061 .. doxygenfunction:: sg_mailbox_put_init(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1062 .. doxygenfunction:: sg_mailbox_put_async(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1072 .. doxygenfunction:: simgrid::s4u::Mailbox::empty
1073 .. doxygenfunction:: simgrid::s4u::Mailbox::front
1074 .. doxygenfunction:: simgrid::s4u::Mailbox::get()
1075 .. doxygenfunction:: simgrid::s4u::Mailbox::get(double timeout)
1076 .. doxygenfunction:: simgrid::s4u::Mailbox::get_async(T **data)
1077 .. doxygenfunction:: simgrid::s4u::Mailbox::get_init()
1078 .. doxygenfunction:: simgrid::s4u::Mailbox::iprobe(int type, const std::function<bool(void *, void *, kernel::activity::CommImpl *)>& match_fun, void *data)
1079 .. doxygenfunction:: simgrid::s4u::Mailbox::listen
1080 .. doxygenfunction:: simgrid::s4u::Mailbox::ready
1082 .. group-tab:: Python
1084 .. automethod:: simgrid.Mailbox.get
1085 .. automethod:: simgrid.Mailbox.get_async
1086 .. autoattribute:: simgrid.Mailbox.ready
1090 .. doxygenfunction:: sg_mailbox_get(sg_mailbox_t mailbox)
1091 .. doxygenfunction:: sg_mailbox_get_async(sg_mailbox_t mailbox, void **data)
1092 .. doxygenfunction:: sg_mailbox_get_name(const_sg_mailbox_t mailbox)
1093 .. doxygenfunction:: sg_mailbox_listen(const char *alias)
1098 See :ref:`s4u_receiving_actor`.
1104 .. doxygenfunction:: simgrid::s4u::Mailbox::get_receiver
1105 .. doxygenfunction:: simgrid::s4u::Mailbox::set_receiver(ActorPtr actor)
1109 .. doxygenfunction:: sg_mailbox_set_receiver(const char *alias)
1111 .. _API_s4u_Resource:
1127 .. doxygenclass:: simgrid::s4u::Disk
1129 .. group-tab:: Python
1131 .. autoclass:: simgrid.Disk
1135 .. doxygentypedef:: sg_disk_t
1136 .. doxygentypedef:: const_sg_disk_t
1147 #include <simgrid/s4u/Disk.hpp>
1149 Note that there is no DiskPtr type and that you cannot use the RAII
1150 idiom on disks because SimGrid does not allow (yet) to create nor
1151 destroy resources once the simulation is started.
1153 .. doxygenfunction:: simgrid::s4u::Disk::seal()
1155 .. group-tab:: Python
1159 from simgrid import Disk
1161 .. automethod:: simgrid.Disk.seal
1171 .. doxygenfunction:: simgrid::s4u::Disk::get_cname() const
1172 .. doxygenfunction:: simgrid::s4u::Disk::get_host() const
1173 .. doxygenfunction:: simgrid::s4u::Disk::get_name() const
1174 .. doxygenfunction:: simgrid::s4u::Disk::get_properties() const
1175 .. doxygenfunction:: simgrid::s4u::Disk::get_property(const std::string &key) const
1176 .. doxygenfunction:: simgrid::s4u::Disk::get_read_bandwidth() const
1177 .. doxygenfunction:: simgrid::s4u::Disk::get_write_bandwidth() const
1178 .. doxygenfunction:: simgrid::s4u::Disk::set_property(const std::string &, const std::string &value)
1179 .. doxygenfunction:: simgrid::s4u::Disk::set_sharing_policy
1181 .. group-tab:: Python
1183 .. autoattribute:: simgrid.Disk.name
1184 .. automethod:: simgrid.Disk.set_sharing_policy
1193 .. doxygenfunction:: simgrid::s4u::Disk::io_init(sg_size_t size, s4u::Io::OpType type) const
1194 .. doxygenfunction:: simgrid::s4u::Disk::read(sg_size_t size) const
1195 .. doxygenfunction:: simgrid::s4u::Disk::read_async(sg_size_t size) const
1196 .. doxygenfunction:: simgrid::s4u::Disk::write(sg_size_t size) const
1197 .. doxygenfunction:: simgrid::s4u::Disk::write_async(sg_size_t size) const
1199 .. group-tab:: Python
1201 .. automethod:: simgrid.Disk.read
1202 .. automethod:: simgrid.Disk.read_async
1203 .. automethod:: simgrid.Disk.write
1204 .. automethod:: simgrid.Disk.write_async
1213 .. doxygenfunction:: simgrid::s4u::Disk::on_creation_cb
1214 .. doxygenfunction:: simgrid::s4u::Disk::on_destruction_cb
1215 .. doxygenfunction:: simgrid::s4u::Disk::on_this_destruction_cb
1216 .. doxygenfunction:: simgrid::s4u::Disk::on_state_change_cb
1217 .. doxygenfunction:: simgrid::s4u::Disk::on_this_state_change_cb
1230 .. doxygenclass:: simgrid::s4u::Host
1232 .. group-tab:: Python
1234 .. autoclass:: simgrid.Host
1245 #include <simgrid/s4u/Host.hpp>
1247 Note that there is no HostPtr type, and that you cannot use the RAII
1248 idiom on hosts because SimGrid does not allow (yet) to create nor
1249 destroy resources once the simulation is started.
1251 .. doxygenfunction:: simgrid::s4u::Host::destroy()
1252 .. doxygenfunction:: simgrid::s4u::Host::seal()
1254 .. group-tab:: Python
1258 from simgrid import Host
1260 .. automethod:: simgrid.Host.seal
1266 #include <simgrid/host.h>
1268 .. doxygentypedef:: sg_host_t
1269 .. cpp:type:: const s4u_Host* const_sg_host_t
1271 Pointer to a constant host object.
1280 See also :cpp:func:`simgrid::s4u::Engine::get_all_hosts`.
1282 .. doxygenfunction:: simgrid::s4u::Host::by_name(const std::string &name)
1283 .. doxygenfunction:: simgrid::s4u::Host::by_name_or_null(const std::string &name)
1284 .. doxygenfunction:: simgrid::s4u::Host::current()
1286 .. group-tab:: Python
1288 See also :py:attr:`simgrid.Engine.all_hosts`.
1290 .. automethod:: simgrid.Host.by_name
1291 .. automethod:: simgrid.Host.current
1295 .. doxygenfunction:: sg_host_by_name(const char *name)
1296 .. doxygenfunction:: sg_host_count()
1297 .. doxygenfunction:: sg_host_list()
1299 Modifying characteristics
1300 -------------------------
1306 .. doxygenfunction:: simgrid::s4u::Host::set_core_count(int core_count)
1307 .. doxygenfunction:: simgrid::s4u::Host::set_coordinates(const std::string& coords)
1308 .. doxygenfunction:: simgrid::s4u::Host::set_sharing_policy
1310 .. group-tab:: Python
1312 .. autoattribute:: simgrid.Host.core_count
1314 .. automethod:: simgrid.Host.set_coordinates
1315 .. automethod:: simgrid.Host.set_sharing_policy
1324 .. doxygenfunction:: simgrid::s4u::Host::get_cname() const
1325 .. doxygenfunction:: simgrid::s4u::Host::get_core_count() const
1326 .. doxygenfunction:: simgrid::s4u::Host::get_name() const
1327 .. doxygenfunction:: simgrid::s4u::Host::get_available_speed() const
1328 .. doxygenfunction:: simgrid::s4u::Host::get_load() const
1329 .. doxygenfunction:: simgrid::s4u::Host::get_speed() const
1331 .. group-tab:: Python
1333 .. autoattribute:: simgrid.Host.name
1334 .. autoattribute:: simgrid.Host.core_count
1335 .. autoattribute:: simgrid.Host.load
1336 .. autoattribute:: simgrid.Host.speed
1337 .. autoattribute:: simgrid.Host.available_speed
1341 .. doxygenfunction:: sg_host_core_count(const_sg_host_t host)
1342 .. doxygenfunction:: sg_host_get_name(const_sg_host_t host)
1343 .. doxygenfunction:: sg_host_get_load(const_sg_host_t host)
1344 .. doxygenfunction:: sg_host_get_speed(const_sg_host_t host)
1346 User data and properties
1347 ------------------------
1353 .. doxygenfunction:: simgrid::s4u::Host::get_properties() const
1354 .. doxygenfunction:: simgrid::s4u::Host::get_property(const std::string &key) const
1355 .. doxygenfunction:: simgrid::s4u::Host::set_properties(const std::unordered_map< std::string, std::string > &properties)
1356 .. doxygenfunction:: simgrid::s4u::Host::set_property(const std::string &key, const std::string &value)
1360 .. doxygenfunction:: sg_host_set_property_value(sg_host_t host, const char *name, const char *value)
1361 .. doxygenfunction:: sg_host_get_properties(const_sg_host_t host)
1362 .. doxygenfunction:: sg_host_get_property_value(const_sg_host_t host, const char *name)
1363 .. doxygenfunction:: sg_host_extension_create(void(*deleter)(void *))
1364 .. doxygenfunction:: sg_host_extension_get(const_sg_host_t host, size_t rank)
1366 Retrieving components
1367 ---------------------
1373 .. doxygenfunction:: simgrid::s4u::Host::add_disk(const Disk *disk)
1374 .. doxygenfunction:: simgrid::s4u::Host::get_actor_count() const
1375 .. doxygenfunction:: simgrid::s4u::Host::get_all_actors() const
1376 .. doxygenfunction:: simgrid::s4u::Host::get_disks() const
1377 .. doxygenfunction:: simgrid::s4u::Host::remove_disk(const std::string &disk_name)
1379 .. group-tab:: Python
1381 .. automethod:: simgrid.Host.get_disks
1385 .. doxygenfunction:: sg_host_get_actor_list(const_sg_host_t host, xbt_dynar_t whereto)
1394 .. doxygenfunction:: simgrid::s4u::Host::is_on() const
1395 .. doxygenfunction:: simgrid::s4u::Host::turn_off()
1396 .. doxygenfunction:: simgrid::s4u::Host::turn_on()
1400 .. doxygenfunction:: sg_host_is_on(const_sg_host_t host)
1401 .. doxygenfunction:: sg_host_turn_off(sg_host_t host)
1402 .. doxygenfunction:: sg_host_turn_on(sg_host_t host)
1404 .. _API_s4u_Host_dvfs:
1409 See also the :ref:`relevant examples <s4u_ex_dvfs>`.
1415 .. doxygenfunction:: simgrid::s4u::Host::get_pstate() const
1416 .. doxygenfunction:: simgrid::s4u::Host::get_pstate_count() const
1417 .. doxygenfunction:: simgrid::s4u::Host::get_pstate_speed(unsigned long pstate_index) const
1418 .. doxygenfunction:: simgrid::s4u::Host::set_pstate(unsigned long pstate_index)
1420 .. group-tab:: Python
1422 .. autoattribute:: simgrid.Host.pstate
1423 .. autoattribute:: simgrid.Host.pstate_count
1424 .. automethod:: simgrid.Host.pstate_speed
1428 .. doxygenfunction:: sg_host_get_available_speed(const_sg_host_t host)
1429 .. doxygenfunction:: sg_host_get_nb_pstates(const_sg_host_t host)
1430 .. doxygenfunction:: sg_host_get_pstate(const_sg_host_t host)
1431 .. doxygenfunction:: sg_host_get_pstate_speed(const_sg_host_t host, unsigned long pstate_index)
1432 .. doxygenfunction:: sg_host_set_pstate(sg_host_t host, unsigned long pstate)
1441 .. doxygenfunction:: simgrid::s4u::Host::set_speed_profile(kernel::profile::Profile *p)
1442 .. doxygenfunction:: simgrid::s4u::Host::set_state_profile(kernel::profile::Profile *p)
1444 .. group-tab:: Python
1446 .. automethod:: simgrid.Host.set_speed_profile
1447 .. automethod:: simgrid.Host.set_state_profile
1456 .. doxygenfunction:: simgrid::s4u::Host::exec_async
1457 .. doxygenfunction:: simgrid::s4u::Host::execute(double flops) const
1458 .. doxygenfunction:: simgrid::s4u::Host::execute(double flops, double priority) const
1460 Platform and routing
1461 --------------------
1463 You can also start direct communications between two arbitrary hosts
1464 using :cpp:func:`Comm::sendto() <simgrid::s4u::Comm::sendto()>`.
1470 .. doxygenfunction:: simgrid::s4u::Host::get_englobing_zone() const
1471 .. doxygenfunction:: simgrid::s4u::Host::get_netpoint() const
1472 .. doxygenfunction:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< Link * > &links, double *latency) const
1473 .. doxygenfunction:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< kernel::resource::StandardLinkImpl * > &links, double *latency) const
1474 .. doxygenfunction:: simgrid::s4u::Host::create_disk(const std::string& name, double read_bandwidth, double write_bandwidth)
1475 .. doxygenfunction:: simgrid::s4u::Host::create_disk(const std::string& name, const std::string& read_bandwidth, const std::string& write_bandwidth)
1477 .. group-tab:: Python
1479 .. autoattribute:: simgrid.Host.netpoint
1480 .. automethod:: simgrid.Host.create_disk
1482 .. automethod:: simgrid.Host.route_to
1486 .. doxygenfunction:: sg_host_get_route(const_sg_host_t from, const_sg_host_t to, xbt_dynar_t links)
1487 .. doxygenfunction:: sg_host_get_route_bandwidth(const_sg_host_t from, const_sg_host_t to)
1488 .. doxygenfunction:: sg_host_get_route_latency(const_sg_host_t from, const_sg_host_t to)
1489 .. doxygenfunction:: sg_host_sendto(sg_host_t from, sg_host_t to, double byte_amount)
1498 .. doxygenfunction:: simgrid::s4u::Host::on_creation_cb
1499 .. doxygenfunction:: simgrid::s4u::Host::on_destruction_cb
1500 .. doxygenfunction:: simgrid::s4u::Host::on_this_destruction_cb
1501 .. doxygenfunction:: simgrid::s4u::Host::on_speed_change_cb
1502 .. doxygenfunction:: simgrid::s4u::Host::on_this_speed_change_cb
1503 .. doxygenfunction:: simgrid::s4u::Host::on_state_change_cb
1504 .. doxygenfunction:: simgrid::s4u::Host::on_this_state_change_cb
1516 .. doxygenclass:: simgrid::s4u::Link
1517 .. doxygenclass:: simgrid::s4u::SplitDuplexLink
1518 .. doxygenclass:: simgrid::s4u::LinkInRoute
1521 .. group-tab:: Python
1523 .. autoclass:: simgrid.Link
1534 #include <simgrid/s4u/Link.hpp>
1536 Note that there is no LinkPtr type and that you cannot use the RAII
1537 idiom on hosts because SimGrid does not allow (yet) to create nor
1538 destroy resources once the simulation is started.
1540 .. doxygenfunction:: simgrid::s4u::Link::seal()
1542 .. group-tab:: Python
1546 from simgrid import Link
1548 .. automethod:: simgrid.Link.seal
1554 #include <simgrid/link.h>
1556 .. doxygentypedef:: sg_link_t
1557 .. cpp:type:: const s4u_Link* const_sg_link_t
1559 Pointer to a constant link object.
1568 See also :cpp:func:`simgrid::s4u::Engine::get_all_links`.
1570 .. doxygenfunction:: simgrid::s4u::Link::by_name(const std::string &name)
1571 .. doxygenfunction:: simgrid::s4u::Link::by_name_or_null(const std::string &name)
1573 .. group-tab:: Python
1575 See also :py:attr:`simgrid.Engine.all_links`.
1577 .. automethod:: simgrid.Link.by_name
1578 .. autoattribute:: simgrid.Link.name
1582 .. doxygenfunction:: sg_link_by_name(const char *name)
1583 .. doxygenfunction:: sg_link_count()
1584 .. doxygenfunction:: sg_link_list()
1593 .. doxygenfunction:: simgrid::s4u::Link::get_bandwidth() const
1594 .. doxygenfunction:: simgrid::s4u::Link::get_cname() const
1595 .. doxygenfunction:: simgrid::s4u::Link::get_latency() const
1596 .. doxygenfunction:: simgrid::s4u::Link::get_name() const
1597 .. doxygenfunction:: simgrid::s4u::Link::get_sharing_policy() const
1598 .. doxygenfunction:: simgrid::s4u::Link::get_concurrency_limit() const
1599 .. doxygenfunction:: simgrid::s4u::Link::get_usage() const
1600 .. doxygenfunction:: simgrid::s4u::Link::is_used() const
1602 .. group-tab:: Python
1604 .. autoattribute:: simgrid.Link.bandwidth
1605 .. autoattribute:: simgrid.Link.latency
1609 .. doxygenfunction:: sg_link_get_bandwidth(const_sg_link_t link)
1610 .. doxygenfunction:: sg_link_get_latency(const_sg_link_t link)
1611 .. doxygenfunction:: sg_link_get_name(const_sg_link_t link)
1612 .. doxygenfunction:: sg_link_is_shared(const_sg_link_t link)
1614 Modifying characteristics
1615 -------------------------
1621 .. doxygenfunction:: simgrid::s4u::Link::set_bandwidth(double value)
1622 .. doxygenfunction:: simgrid::s4u::Link::set_latency(double value)
1623 .. doxygenfunction:: simgrid::s4u::Link::set_latency(const std::string& value)
1624 .. doxygenfunction:: simgrid::s4u::Link::set_concurrency_limit(int limit)
1625 .. doxygenfunction:: simgrid::s4u::Link::set_sharing_policy
1627 .. group-tab:: Python
1629 .. automethod:: simgrid.Link.set_bandwidth
1630 .. automethod:: simgrid.Link.set_latency
1631 .. automethod:: simgrid.Link.set_concurrency_limit
1632 .. automethod:: simgrid.Link.set_sharing_policy
1636 .. doxygenfunction:: sg_link_set_bandwidth(sg_link_t link, double value)
1637 .. doxygenfunction:: sg_link_set_latency(sg_link_t link, double value)
1639 User data and properties
1640 ------------------------
1646 .. doxygenfunction:: simgrid::s4u::Link::get_property(const std::string &key) const
1647 .. doxygenfunction:: simgrid::s4u::Link::set_property(const std::string &key, const std::string &value)
1651 .. doxygenfunction:: sg_link_get_data(const_sg_link_t link)
1652 .. doxygenfunction:: sg_link_set_data(sg_link_t link, void *data)
1661 See also :cpp:func:`simgrid::s4u::Link::set_state_profile`.
1663 .. doxygenfunction:: simgrid::s4u::Link::is_on() const
1664 .. doxygenfunction:: simgrid::s4u::Link::turn_off()
1665 .. doxygenfunction:: simgrid::s4u::Link::turn_on()
1667 .. group-tab:: Python
1669 See also :py:func:`simgrid.Link.set_state_profile`.
1671 .. automethod:: simgrid.Link.is_on
1672 .. automethod:: simgrid.Link.turn_off
1673 .. automethod:: simgrid.Link.turn_on
1678 See :ref:`howto_churn` for more details.
1684 .. doxygenfunction:: simgrid::s4u::Link::set_bandwidth_profile(kernel::profile::Profile *profile)
1685 .. doxygenfunction:: simgrid::s4u::Link::set_latency_profile(kernel::profile::Profile *profile)
1686 .. doxygenfunction:: simgrid::s4u::Link::set_state_profile(kernel::profile::Profile *profile)
1688 .. group-tab:: Python
1690 .. automethod:: simgrid.Link.set_bandwidth_profile
1691 .. automethod:: simgrid.Link.set_latency_profile
1692 .. automethod:: simgrid.Link.set_state_profile
1701 .. doxygenfunction:: simgrid::s4u::Link::set_host_wifi_rate
1703 .. group-tab:: Python
1705 .. automethod:: simgrid.Link.set_host_wifi_rate
1714 .. doxygenfunction:: simgrid::s4u::Link::on_bandwidth_change_cb
1715 .. doxygenfunction:: simgrid::s4u::Link::on_communication_state_change_cb
1716 .. doxygenfunction:: simgrid::s4u::Link::on_creation_cb
1717 .. doxygenfunction:: simgrid::s4u::Link::on_destruction_cb
1718 .. doxygenfunction:: simgrid::s4u::Link::on_state_change_cb
1720 .. _API_s4u_NetZone:
1730 .. doxygenclass:: simgrid::s4u::NetZone
1732 .. group-tab:: Python
1734 .. autoclass:: simgrid.NetZone
1745 #include <simgrid/s4u/NetZone.hpp>
1747 Note that there is no NetZonePtr type and that you cannot use the RAII
1748 idiom on network zones because SimGrid does not allow (yet) to create nor
1749 destroy resources once the simulation is started.
1751 .. doxygenfunction:: simgrid::s4u::NetZone::seal
1753 .. group-tab:: Python
1757 from simgrid import NetZone
1759 .. automethod:: simgrid.NetZone.seal
1765 #include <simgrid/zone.h>
1767 .. doxygentypedef:: sg_netzone_t
1768 .. cpp:type:: const s4u_NetZone* const_sg_netzone_t
1770 Pointer to a constant network zone object.
1779 See :cpp:func:`simgrid::s4u::Engine::get_netzone_root`,
1780 :cpp:func:`simgrid::s4u::Engine::netzone_by_name_or_null` and
1781 :cpp:func:`simgrid::s4u::Engine::get_filtered_netzones`.
1785 .. doxygenfunction:: sg_zone_get_by_name(const char *name)
1786 .. doxygenfunction:: sg_zone_get_root()
1795 .. doxygenfunction:: simgrid::s4u::NetZone::get_cname() const
1796 .. doxygenfunction:: simgrid::s4u::NetZone::get_name() const
1797 .. doxygenfunction:: simgrid::s4u::NetZone::get_netpoint()
1799 .. group-tab:: Python
1801 .. autoattribute:: simgrid.NetZone.name
1802 .. autoattribute:: simgrid.NetZone.netpoint
1806 .. doxygenfunction:: sg_zone_get_name(const_sg_netzone_t zone)
1808 User data and properties
1809 ------------------------
1815 .. doxygenfunction:: simgrid::s4u::NetZone::get_properties() const
1816 .. doxygenfunction:: simgrid::s4u::NetZone::get_property(const std::string &key) const
1817 .. doxygenfunction:: simgrid::s4u::NetZone::set_property(const std::string &key, const std::string &value)
1819 .. group-tab:: Python
1821 .. automethod:: simgrid.NetZone.set_property
1825 .. doxygenfunction:: sg_zone_get_property_value(const_sg_netzone_t as, const char *name)
1826 .. doxygenfunction:: sg_zone_set_property_value(sg_netzone_t netzone, const char *name, const char *value)
1828 Retrieving components
1829 ---------------------
1835 .. doxygenfunction:: simgrid::s4u::NetZone::get_all_hosts() const
1836 .. doxygenfunction:: simgrid::s4u::NetZone::get_host_count() const
1840 .. doxygenfunction:: sg_zone_get_hosts(const_sg_netzone_t zone, xbt_dynar_t whereto)
1849 .. doxygenfunction:: simgrid::s4u::NetZone::add_component(kernel::routing::NetPoint *elm)
1850 .. doxygenfunction:: simgrid::s4u::NetZone::add_route
1851 .. doxygenfunction:: simgrid::s4u::NetZone::add_bypass_route
1852 .. doxygenfunction:: simgrid::s4u::NetZone::get_children() const
1853 .. doxygenfunction:: simgrid::s4u::NetZone::get_parent() const
1854 .. doxygenfunction:: simgrid::s4u::NetZone::set_parent(const NetZone* parent)
1856 .. group-tab:: Python
1858 .. automethod:: simgrid.NetZone.add_route
1859 .. automethod:: simgrid.NetZone.set_parent
1863 .. doxygenfunction:: sg_zone_get_sons(const_sg_netzone_t zone, xbt_dict_t whereto)
1872 .. doxygenfunction:: simgrid::s4u::NetZone::on_creation_cb
1873 .. doxygenfunction:: simgrid::s4u::NetZone::on_seal_cb
1884 .. doxygenfunction:: simgrid::s4u::create_full_zone
1885 .. doxygenfunction:: simgrid::s4u::create_empty_zone
1886 .. doxygenfunction:: simgrid::s4u::create_star_zone
1887 .. doxygenfunction:: simgrid::s4u::create_dijkstra_zone
1888 .. doxygenfunction:: simgrid::s4u::create_floyd_zone
1889 .. doxygenfunction:: simgrid::s4u::create_vivaldi_zone
1890 .. doxygenfunction:: simgrid::s4u::create_wifi_zone
1891 .. doxygenfunction:: simgrid::s4u::create_torus_zone
1892 .. doxygenfunction:: simgrid::s4u::create_fatTree_zone
1893 .. doxygenfunction:: simgrid::s4u::create_dragonfly_zone
1895 .. group-tab:: Python
1897 .. automethod:: simgrid.NetZone.create_full_zone
1898 .. automethod:: simgrid.NetZone.create_empty_zone
1899 .. automethod:: simgrid.NetZone.create_star_zone
1900 .. automethod:: simgrid.NetZone.create_dijkstra_zone
1901 .. automethod:: simgrid.NetZone.create_floyd_zone
1902 .. automethod:: simgrid.NetZone.create_vivaldi_zone
1903 .. automethod:: simgrid.NetZone.create_wifi_zone
1904 .. automethod:: simgrid.NetZone.create_torus_zone
1905 .. automethod:: simgrid.NetZone.create_fatTree_zone
1906 .. automethod:: simgrid.NetZone.create_dragonfly_zone
1915 .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::vector<double>& speed_per_pstate)
1916 .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, double speed)
1917 .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::vector<std::string>& speed_per_pstate)
1918 .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::string& speed)
1920 .. group-tab:: Python
1922 .. automethod:: simgrid.NetZone.create_host
1931 .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::vector<double>& bandwidths)
1932 .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, double bandwidth)
1933 .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::vector<std::string>& bandwidthds)
1934 .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::string& bandwidth)
1935 .. doxygenfunction:: simgrid::s4u::NetZone::create_split_duplex_link(const std::string& name, const std::string& bandwidth)
1936 .. doxygenfunction:: simgrid::s4u::NetZone::create_split_duplex_link(const std::string& name, double bandwidth)
1938 .. group-tab:: Python
1940 .. automethod:: simgrid.NetZone.create_link
1941 .. automethod:: simgrid.NetZone.create_split_duplex_link
1950 .. doxygenfunction:: simgrid::s4u::NetZone::create_router(const std::string& name)
1952 .. group-tab:: Python
1954 .. automethod:: simgrid.NetZone.create_router
1956 .. _API_s4u_VirtualMachine:
1958 =======================
1959 class VirtualMachine
1960 =======================
1963 .. doxygenclass:: simgrid::s4u::VirtualMachine
1973 #include <simgrid/s4u/VirtualMachine.hpp>
1975 Note that there is no VirtualMachinePtr type, and that you cannot use the RAII
1976 idiom on virtual machines. There is no good reason for that and should change in the future.
1982 #include <simgrid/vm.h>
1984 .. doxygentypedef:: sg_vm_t
1985 .. cpp:type:: const s4u_VirtualMachine* const_sg_vm_t
1987 Pointer to a constant virtual machine object.
1996 .. doxygenfunction:: simgrid::s4u::Host::create_vm(const std::string &name, int core_amount)
1997 .. doxygenfunction:: simgrid::s4u::Host::create_vm(const std::string &name, int core_amount, size_t ramsize)
1998 .. doxygenfunction:: simgrid::s4u::VirtualMachine::destroy
2002 .. doxygenfunction:: sg_vm_create_core
2003 .. doxygenfunction:: sg_vm_create_multicore
2004 .. doxygenfunction:: sg_vm_destroy
2013 .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_pm() const
2014 .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_ramsize() const
2015 .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_state() const
2017 .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_bound(double bound)
2018 .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_pm(Host *pm)
2019 .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_ramsize(size_t ramsize)
2023 .. doxygenfunction:: sg_vm_get_ramsize(const_sg_vm_t vm)
2024 .. doxygenfunction:: sg_vm_set_bound(sg_vm_t vm, double bound)
2025 .. doxygenfunction:: sg_vm_set_ramsize(sg_vm_t vm, size_t size)
2027 .. doxygenfunction:: sg_vm_get_name
2028 .. doxygenfunction:: sg_vm_get_pm
2029 .. doxygenfunction:: sg_vm_is_created
2030 .. doxygenfunction:: sg_vm_is_running
2031 .. doxygenfunction:: sg_vm_is_suspended
2040 .. doxygenfunction:: simgrid::s4u::VirtualMachine::resume()
2041 .. doxygenfunction:: simgrid::s4u::VirtualMachine::shutdown()
2042 .. doxygenfunction:: simgrid::s4u::VirtualMachine::start()
2043 .. doxygenfunction:: simgrid::s4u::VirtualMachine::suspend()
2047 .. doxygenfunction:: sg_vm_start
2048 .. doxygenfunction:: sg_vm_suspend
2049 .. doxygenfunction:: sg_vm_resume
2050 .. doxygenfunction:: sg_vm_shutdown
2059 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_creation_cb
2060 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_destruction_cb
2061 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_end_cb
2062 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_start_cb
2063 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_resume_cb
2064 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_shutdown_cb
2065 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_start_cb
2066 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_started_cb
2067 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_suspend_cb
2069 .. _API_s4u_Activity:
2079 .. doxygenclass:: simgrid::s4u::Activity
2081 **Known subclasses:**
2082 :ref:`Communications <API_s4u_Comm>` (started on Mailboxes and consuming links),
2083 :ref:`Executions <API_s4u_Exec>` (started on Host and consuming CPU resources)
2084 :ref:`I/O <API_s4u_Io>` (started on and consuming disks).
2085 See also the :ref:`section on activities <s4u_Activities>` above.
2096 #include <simgrid/s4u/Activity.hpp>
2098 .. doxygentypedef:: ActivityPtr
2107 .. doxygenfunction:: simgrid::s4u::Activity::get_cname
2108 .. doxygenfunction:: simgrid::s4u::Activity::get_name
2109 .. doxygenfunction:: simgrid::s4u::Activity::get_remaining() const
2110 .. doxygenfunction:: simgrid::s4u::Activity::get_state() const
2111 .. doxygenfunction:: simgrid::s4u::Activity::set_remaining(double remains)
2112 .. doxygenfunction:: simgrid::s4u::Activity::set_state(Activity::State state)
2115 Activities life cycle
2116 ---------------------
2122 .. doxygenfunction:: simgrid::s4u::Activity::start
2123 .. doxygenfunction:: simgrid::s4u::Activity::cancel
2124 .. doxygenfunction:: simgrid::s4u::Activity::test
2125 .. doxygenfunction:: simgrid::s4u::Activity::wait
2126 .. doxygenfunction:: simgrid::s4u::Activity::wait_for
2127 .. doxygenfunction:: simgrid::s4u::Activity::wait_until(double time_limit)
2128 .. doxygenfunction:: simgrid::s4u::Activity::vetoable_start()
2130 Suspending and resuming an activity
2131 -----------------------------------
2137 .. doxygenfunction:: simgrid::s4u::Activity::suspend
2138 .. doxygenfunction:: simgrid::s4u::Activity::resume
2139 .. doxygenfunction:: simgrid::s4u::Activity::is_suspended
2148 .. doxygenfunction:: simgrid::s4u::Activity::on_completion_cb
2149 .. doxygenfunction:: simgrid::s4u::Activity::on_suspended_cb
2150 .. doxygenfunction:: simgrid::s4u::Activity::on_resumed_cb
2162 .. doxygenclass:: simgrid::s4u::Comm
2164 .. group-tab:: Python
2166 .. autoclass:: simgrid.Comm
2177 #include <simgrid/s4u/Comm.hpp>
2179 .. doxygentypedef:: CommPtr
2181 .. group-tab:: Python
2185 from simgrid import Comm
2191 #include <simgrid/comm.h>
2193 .. doxygentypedef:: sg_comm_t
2202 .. doxygenfunction:: simgrid::s4u::Comm::get_dst_data_size() const
2203 .. doxygenfunction:: simgrid::s4u::Comm::get_mailbox() const
2204 .. doxygenfunction:: simgrid::s4u::Comm::get_sender() const
2205 .. doxygenfunction:: simgrid::s4u::Comm::set_dst_data(void **buff)
2206 .. doxygenfunction:: simgrid::s4u::Comm::set_dst_data(void **buff, size_t size)
2207 .. doxygenfunction:: simgrid::s4u::Comm::detach()
2208 .. doxygenfunction:: simgrid::s4u::Comm::detach(const std::function<void(void*)>& clean_function)
2209 .. doxygenfunction:: simgrid::s4u::Comm::set_payload_size(uint64_t bytes)
2210 .. doxygenfunction:: simgrid::s4u::Comm::set_rate(double rate)
2211 .. doxygenfunction:: simgrid::s4u::Comm::set_src_data(void *buff)
2212 .. doxygenfunction:: simgrid::s4u::Comm::set_src_data(void *buff, size_t size)
2213 .. doxygenfunction:: simgrid::s4u::Comm::set_src_data_size(size_t size)
2215 .. group-tab:: Python
2217 .. autoattribute:: simgrid.Comm.dst_data_size
2218 .. autoattribute:: simgrid.Comm.mailbox
2219 .. autoattribute:: simgrid.Comm.sender
2220 .. autoattribute:: simgrid.Comm.state_str
2221 .. automethod:: simgrid.Comm.detach
2222 .. automethod:: simgrid.Comm.set_payload_size
2223 .. automethod:: simgrid.Comm.set_rate
2225 Direct host-to-host communication
2226 ---------------------------------
2228 Most communications are created using :ref:`s4u_mailbox`, but you can
2229 also start direct communications as shown below. See also the
2230 :ref:`relevant examples <s4u_ex_comm_host2host>`.
2236 .. doxygenfunction:: simgrid::s4u::Comm::sendto
2237 .. doxygenfunction:: simgrid::s4u::Comm::sendto_init()
2238 .. doxygenfunction:: simgrid::s4u::Comm::sendto_init(Host *from, Host *to)
2239 .. doxygenfunction:: simgrid::s4u::Comm::sendto_async
2241 .. group-tab:: Python
2243 .. automethod:: simgrid.Comm.sendto
2244 .. automethod:: simgrid.Comm.sendto_init
2245 .. automethod:: simgrid.Comm.sendto_async
2254 .. doxygenfunction:: simgrid::s4u::Comm::cancel
2255 .. doxygenfunction:: simgrid::s4u::Comm::start
2256 .. doxygenfunction:: simgrid::s4u::Comm::test
2257 .. doxygenfunction:: simgrid::s4u::Comm::test_any(const std::vector< CommPtr >& comms)
2258 .. doxygenfunction:: simgrid::s4u::Comm::wait
2259 .. doxygenfunction:: simgrid::s4u::Comm::wait_all(const std::vector< CommPtr >& comms)
2260 .. doxygenfunction:: simgrid::s4u::Comm::wait_all_for(const std::vector< CommPtr >& comms, double timeout)
2261 .. doxygenfunction:: simgrid::s4u::Comm::wait_any(const std::vector< CommPtr >& comms)
2262 .. doxygenfunction:: simgrid::s4u::Comm::wait_any_for(const std::vector< CommPtr >& comms, double timeout)
2263 .. doxygenfunction:: simgrid::s4u::Comm::wait_for
2264 .. doxygenfunction:: simgrid::s4u::Comm::wait_until
2266 .. group-tab:: Python
2268 .. automethod:: simgrid.Comm.cancel
2269 .. automethod:: simgrid.Comm.start
2270 .. automethod:: simgrid.Comm.test
2271 .. automethod:: simgrid.Comm.test_any
2272 .. automethod:: simgrid.Comm.wait
2273 .. automethod:: simgrid.Comm.wait_for
2274 .. automethod:: simgrid.Comm.wait_all
2275 .. automethod:: simgrid.Comm.wait_all_for
2276 .. automethod:: simgrid.Comm.wait_any
2277 .. automethod:: simgrid.Comm.wait_any_for
2278 .. automethod:: simgrid.Comm.wait_until
2282 .. doxygenfunction:: sg_comm_test
2283 .. doxygenfunction:: sg_comm_wait
2284 .. doxygenfunction:: sg_comm_wait_all
2285 .. doxygenfunction:: sg_comm_wait_any
2287 Suspending and resuming a communication
2288 ---------------------------------------
2294 .. doxygenfunction:: simgrid::s4u::Comm::suspend
2295 .. doxygenfunction:: simgrid::s4u::Comm::resume
2296 .. doxygenfunction:: simgrid::s4u::Comm::is_suspended
2298 .. group-tab:: Python
2300 .. automethod:: simgrid.Comm.suspend
2301 .. automethod:: simgrid.Comm.resume
2302 .. autoattribute:: simgrid.Comm.is_suspended
2311 .. doxygenfunction:: simgrid::s4u::Comm::on_start_cb
2312 .. doxygenfunction:: simgrid::s4u::Comm::on_completion_cb
2313 .. doxygenfunction:: simgrid::s4u::Comm::on_recv_cb
2314 .. doxygenfunction:: simgrid::s4u::Comm::on_send_cb
2326 .. doxygenclass:: simgrid::s4u::Exec
2328 .. group-tab:: Python
2330 .. autoclass:: simgrid.Exec
2341 #include <simgrid/s4u/Exec.hpp>
2343 .. doxygentypedef:: ExecPtr
2345 .. group-tab:: Python
2349 from simgrid import Exec
2355 #include <simgrid/exec.h>
2357 .. doxygentypedef:: sg_exec_t
2358 .. doxygentypedef:: const_sg_exec_t
2367 .. doxygenfunction:: simgrid::s4u::Exec::get_cost() const
2368 .. doxygenfunction:: simgrid::s4u::Exec::get_finish_time() const
2369 .. doxygenfunction:: simgrid::s4u::Exec::get_host() const
2370 .. doxygenfunction:: simgrid::s4u::Exec::get_host_number() const
2371 .. doxygenfunction:: simgrid::s4u::Exec::get_remaining
2372 .. doxygenfunction:: simgrid::s4u::Exec::get_remaining_ratio
2373 .. doxygenfunction:: simgrid::s4u::Exec::get_start_time() const
2374 .. doxygenfunction:: simgrid::s4u::Exec::set_bound(double bound)
2375 .. doxygenfunction:: simgrid::s4u::Exec::set_host
2376 .. doxygenfunction:: simgrid::s4u::Exec::set_priority(double priority)
2378 .. group-tab:: Python
2380 .. autoattribute:: simgrid.Exec.host
2381 .. autoattribute:: simgrid.Exec.remaining
2382 .. autoattribute:: simgrid.Exec.remaining_ratio
2386 .. doxygenfunction:: sg_exec_set_bound(sg_exec_t exec, double bound)
2387 .. doxygenfunction:: sg_exec_get_name(const_sg_exec_t exec)
2388 .. doxygenfunction:: sg_exec_set_name(sg_exec_t exec, const char* name)
2389 .. doxygenfunction:: sg_exec_set_host(sg_exec_t exec, sg_host_t new_host)
2390 .. doxygenfunction:: sg_exec_get_remaining(const_sg_exec_t exec)
2391 .. doxygenfunction:: sg_exec_get_remaining_ratio(const_sg_exec_t exec)
2400 .. doxygenfunction:: simgrid::s4u::Exec::cancel
2401 .. doxygenfunction:: simgrid::s4u::Exec::start
2402 .. doxygenfunction:: simgrid::s4u::Exec::test
2403 .. doxygenfunction:: simgrid::s4u::Exec::wait
2404 .. doxygenfunction:: simgrid::s4u::Exec::wait_any(const std::vector< ExecPtr >& execs)
2405 .. doxygenfunction:: simgrid::s4u::Exec::wait_any_for(const std::vector< ExecPtr >& execs, double timeout)
2406 .. doxygenfunction:: simgrid::s4u::Exec::wait_for
2408 .. group-tab:: Python
2410 .. automethod:: simgrid.Exec.cancel
2411 .. automethod:: simgrid.Exec.start
2412 .. automethod:: simgrid.Exec.test
2413 .. automethod:: simgrid.Exec.wait
2417 .. doxygenfunction:: sg_exec_start(sg_exec_t exec)
2418 .. doxygenfunction:: sg_exec_cancel(sg_exec_t exec);
2419 .. doxygenfunction:: sg_exec_test(sg_exec_t exec);
2420 .. doxygenfunction:: sg_exec_wait(sg_exec_t exec);
2421 .. doxygenfunction:: sg_exec_wait_for(sg_exec_t exec, double timeout);
2422 .. doxygenfunction:: sg_exec_wait_any_for(sg_exec_t* execs, size_t count, double timeout);
2423 .. doxygenfunction:: sg_exec_wait_any(sg_exec_t* execs, size_t count);
2425 Suspending and resuming an execution
2426 ------------------------------------
2432 .. doxygenfunction:: simgrid::s4u::Exec::suspend
2433 .. doxygenfunction:: simgrid::s4u::Exec::resume
2434 .. doxygenfunction:: simgrid::s4u::Exec::is_suspended
2436 .. group-tab:: Python
2438 .. automethod:: simgrid.Exec.suspend
2439 .. automethod:: simgrid.Exec.resume
2440 .. autoattribute:: simgrid.Exec.is_suspended
2449 .. doxygenfunction:: simgrid::s4u::Exec::on_start_cb
2450 .. doxygenfunction:: simgrid::s4u::Exec::on_completion_cb
2462 .. doxygenclass:: simgrid::s4u::Io
2464 .. group-tab:: Python
2466 .. autoclass:: simgrid.Io
2477 #include <simgrid/s4u/Io.hpp>
2479 .. doxygentypedef:: IoPtr
2488 .. doxygenfunction:: simgrid::s4u::Io::get_performed_ioops() const
2489 .. doxygenfunction:: simgrid::s4u::Io::get_remaining
2498 .. doxygenfunction:: simgrid::s4u::Io::cancel
2499 .. doxygenfunction:: simgrid::s4u::Io::start
2500 .. doxygenfunction:: simgrid::s4u::Io::test
2501 .. doxygenfunction:: simgrid::s4u::Io::wait
2502 .. doxygenfunction:: simgrid::s4u::Io::wait_for
2503 .. doxygenfunction:: simgrid::s4u::Io::wait_any(const std::vector<IoPtr> &ios)
2504 .. doxygenfunction:: simgrid::s4u::Io::wait_any_for(const std::vector<IoPtr> &ios, double timeout)
2506 .. group-tab:: Python
2508 .. automethod:: simgrid.Io.test
2509 .. automethod:: simgrid.Io.wait
2510 .. automethod:: simgrid.Io.wait_any_for
2511 .. automethod:: simgrid.Io.wait_any
2520 .. doxygenfunction:: simgrid::s4u::Io::on_start_cb
2521 .. doxygenfunction:: simgrid::s4u::Io::on_completion_cb
2523 .. _API_s4u_Synchronizations:
2525 =======================
2526 Synchronization Objects
2527 =======================
2539 .. doxygenclass:: simgrid::s4u::Mutex
2541 .. group-tab:: Python
2543 .. autoclass:: simgrid.Mutex
2554 #include <simgrid/s4u/Mutex.hpp>
2556 .. doxygentypedef:: MutexPtr
2558 .. doxygenfunction:: simgrid::s4u::Mutex::create()
2560 .. group-tab:: Python
2562 .. code-block:: Python
2564 from simgrid import Mutex
2567 # Use a context manager to acquire and automatically release the mutex
2568 # when leaving the scope.
2570 # Access shared resource ...
2573 .. automethod:: simgrid.Mutex.__init__
2579 #include <simgrid/mutex.h>
2581 .. doxygentypedef:: sg_mutex_t
2582 .. cpp:type:: const s4u_Mutex* const_sg_mutex_t
2584 Pointer to a constant mutex object.
2586 .. doxygenfunction:: sg_mutex_init()
2587 .. doxygenfunction:: sg_mutex_destroy(const_sg_mutex_t mutex)
2596 .. doxygenfunction:: simgrid::s4u::Mutex::lock()
2597 .. doxygenfunction:: simgrid::s4u::Mutex::try_lock()
2598 .. doxygenfunction:: simgrid::s4u::Mutex::unlock()
2600 .. group-tab:: Python
2602 .. automethod:: simgrid.Mutex.lock
2603 .. automethod:: simgrid.Mutex.try_lock
2604 .. automethod:: simgrid.Mutex.unlock
2608 .. doxygenfunction:: sg_mutex_lock(sg_mutex_t mutex)
2609 .. doxygenfunction:: sg_mutex_try_lock(sg_mutex_t mutex)
2610 .. doxygenfunction:: sg_mutex_unlock(sg_mutex_t mutex)
2612 .. _API_s4u_Barrier:
2622 .. doxygenclass:: simgrid::s4u::Barrier
2624 .. group-tab:: Python
2626 .. autoclass:: simgrid.Barrier
2634 #include <simgrid/s4u/Barrier.hpp>
2636 .. doxygentypedef:: BarrierPtr
2638 .. doxygenfunction:: simgrid::s4u::Barrier::create(unsigned int expected_actors)
2639 .. doxygenfunction:: simgrid::s4u::Barrier::wait()
2641 .. group-tab:: Python
2643 .. code-block:: Python
2645 from simgrid import Barrier
2646 barrier = Barrier(2)
2648 .. automethod:: simgrid.Barrier.__init__
2649 .. automethod:: simgrid.Barrier.wait
2655 #include <simgrid/barrier.hpp>
2657 .. doxygentypedef:: sg_bar_t
2659 .. doxygenfunction:: sg_barrier_init(unsigned int count)
2660 .. doxygenfunction:: sg_barrier_destroy(sg_bar_t bar)
2661 .. doxygenfunction:: sg_barrier_wait(sg_bar_t bar)
2664 .. _API_s4u_ConditionVariable:
2666 ==========================
2667 Condition variable
2668 ==========================
2670 .. doxygenclass:: simgrid::s4u::ConditionVariable
2681 #include <simgrid/s4u/ConditionVariable.hpp>
2683 .. doxygentypedef:: ConditionVariablePtr
2685 .. doxygenfunction:: simgrid::s4u::ConditionVariable::create()
2691 #include <simgrid/cond.h>
2693 .. doxygentypedef:: sg_cond_t
2694 .. doxygentypedef:: const_sg_cond_t
2695 .. doxygenfunction:: sg_cond_init
2696 .. doxygenfunction:: sg_cond_destroy
2698 Waiting and notifying
2699 ---------------------
2705 .. doxygenfunction:: simgrid::s4u::ConditionVariable::notify_all()
2706 .. doxygenfunction:: simgrid::s4u::ConditionVariable::notify_one()
2707 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(s4u::MutexPtr lock)
2708 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(const std::unique_lock< s4u::Mutex > &lock)
2709 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(const std::unique_lock< Mutex > &lock, P pred)
2710 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, double duration)
2711 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, double duration, P pred)
2712 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, std::chrono::duration< Rep, Period > duration)
2713 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, std::chrono::duration< Rep, Period > duration, P pred)
2714 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, const SimulationTimePoint< Duration > &timeout_time)
2715 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, const SimulationTimePoint< Duration > &timeout_time, P pred)
2716 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, double timeout_time)
2717 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, double timeout_time, P pred)
2721 .. doxygenfunction:: sg_cond_notify_all
2722 .. doxygenfunction:: sg_cond_notify_one
2723 .. doxygenfunction:: sg_cond_wait
2724 .. doxygenfunction:: sg_cond_wait_for
2726 .. _API_s4u_Semaphore:
2736 .. doxygenclass:: simgrid::s4u::Semaphore
2738 .. group-tab:: Python
2740 .. autoclass:: simgrid.Semaphore
2751 #include <simgrid/s4u/Semaphore.hpp>
2753 .. doxygentypedef:: SemaphorePtr
2754 .. doxygenfunction:: simgrid::s4u::Semaphore::create(unsigned int initial_capacity)
2756 .. group-tab:: Python
2758 .. code-block:: Python
2760 from simgrid import Semaphore
2761 semaphore = Semaphore(1)
2762 # Automatically acquire the semaphore, and release it after leaving the scope.
2764 # Do something with the shared resource
2767 .. automethod:: simgrid.Semaphore.__init__
2773 #include <simgrid/semaphore.h>
2775 .. doxygentypedef:: sg_sem_t
2776 .. cpp:type:: const s4u_Semaphore* const_sg_sem_t
2778 Pointer to a constant semaphore object.
2780 .. doxygenfunction:: sg_sem_init(int initial_value)
2781 .. doxygenfunction:: sg_sem_destroy(const_sg_sem_t sem)
2790 .. doxygenfunction:: simgrid::s4u::Semaphore::acquire()
2791 .. doxygenfunction:: simgrid::s4u::Semaphore::acquire_timeout(double timeout)
2792 .. doxygenfunction:: simgrid::s4u::Semaphore::get_capacity() const
2793 .. doxygenfunction:: simgrid::s4u::Semaphore::release()
2794 .. doxygenfunction:: simgrid::s4u::Semaphore::would_block() const
2796 .. group-tab:: Python
2798 .. automethod:: simgrid.Semaphore.acquire
2799 .. automethod:: simgrid.Semaphore.acquire_timeout
2800 .. autoattribute:: simgrid.Semaphore.capacity
2801 .. automethod:: simgrid.Semaphore.release
2802 .. autoattribute:: simgrid.Semaphore.would_block
2806 .. doxygenfunction:: sg_sem_acquire(sg_sem_t sem)
2807 .. doxygenfunction:: sg_sem_acquire_timeout(sg_sem_t sem, double timeout)
2808 .. doxygenfunction:: sg_sem_get_capacity(const_sg_sem_t sem)
2809 .. doxygenfunction:: sg_sem_release(sg_sem_t sem)
2810 .. doxygenfunction:: sg_sem_would_block(const_sg_sem_t sem)
2820 .. doxygenclass:: simgrid::Exception
2822 The following exceptions denote a problem in the simulated platform, and it is often useful to catch them.
2824 .. doxygenclass:: simgrid::CancelException
2825 .. doxygenclass:: simgrid::HostFailureException
2826 .. doxygenclass:: simgrid::NetworkFailureException
2827 .. doxygenclass:: simgrid::StorageFailureException
2828 .. doxygenclass:: simgrid::TimeoutException
2829 .. doxygenclass:: simgrid::VmFailureException
2831 The following errors denote a problem in the SimGrid tool itself. Most of the time, you should let these
2832 exception go, so that the simulation stops. But you may want to catch them, for example when you launch
2833 simgrid from a python notebook and want to handle the problem accordingly.
2835 .. doxygenclass:: simgrid::AssertionError
2836 .. doxygenclass:: simgrid::ParseError
2837 .. doxygenclass:: simgrid::TracingError
2839 .. group-tab:: Python
2841 The following exceptions denote a problem in the simulated platform, and it is often useful to catch them.
2843 .. autoclass:: simgrid.CancelException
2844 .. autoclass:: simgrid.HostFailureException
2845 .. autoclass:: simgrid.NetworkFailureException
2846 .. autoclass:: simgrid.StorageFailureException
2847 .. autoclass:: simgrid.TimeoutException
2848 .. autoclass:: simgrid.VmFailureException
2850 The following errors denote a problem in the SimGrid tool itself. Most of the time, you should let these
2851 exception go, so that the simulation stops. But you may want to catch them, for example when you launch
2852 simgrid from a python notebook and want to handle the problem accordingly.
2854 .. autoclass:: simgrid.AssertionError
2858 .. doxygenenum:: sg_error_t