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`.
372 .. include:: ../../examples/README.rst
377 .. _API_s4u_simulation_object:
393 .. doxygenclass:: simgrid::s4u::Actor
395 .. doxygentypedef:: aid_t
398 .. group-tab:: Python
400 .. autoclass:: simgrid.Actor
411 #include <simgrid/s4u/Actor.hpp>
413 .. doxygentypedef:: ActorPtr
415 .. group-tab:: Python
419 from simgrid import Actor
425 #include <simgrid/actor.h>
427 .. doxygentypedef:: sg_actor_t
428 .. doxygentypedef:: const_sg_actor_t
429 .. doxygenfunction:: sg_actor_ref
430 .. doxygenfunction:: sg_actor_unref
436 See also :ref:`the relevant example <s4u_ex_actors_create>`.
442 .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, const std::function< void()> &code)
443 .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, F code)
444 .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, F code, Args... args)
445 .. doxygenfunction:: simgrid::s4u::Actor::create(const std::string &name, s4u::Host *host, const std::string &function, std::vector< std::string > args)
447 .. doxygenfunction:: simgrid::s4u::Actor::init(const std::string &name, s4u::Host *host)
448 .. doxygenfunction:: simgrid::s4u::Actor::start(const std::function< void()> &code)
449 .. doxygenfunction:: simgrid::s4u::Actor::set_stacksize
451 .. group-tab:: Python
453 .. automethod:: simgrid.Actor.create
457 .. doxygenfunction:: sg_actor_create(const char *name, sg_host_t host, xbt_main_func_t code, int argc, char *const *argv)
458 .. doxygenfunction:: sg_actor_init(const char *name, sg_host_t host)
459 .. doxygenfunction:: sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char *const *argv)
460 .. doxygenfunction:: sg_actor_set_stacksize
462 .. doxygenfunction:: sg_actor_attach(const char *name, void *data, sg_host_t host, xbt_dict_t properties)
463 .. doxygenfunction:: sg_actor_detach()
472 .. doxygenfunction:: simgrid::s4u::Actor::by_pid(aid_t pid)
473 .. doxygenfunction:: simgrid::s4u::Actor::self()
475 .. group-tab:: Python
477 .. automethod:: simgrid.Actor.by_pid
478 .. automethod:: simgrid.Actor.self
482 .. doxygenfunction:: sg_actor_by_pid(aid_t pid)
483 .. doxygenfunction:: sg_actor_self()
484 .. doxygenfunction:: sg_actor_list()
493 .. doxygenfunction:: simgrid::s4u::Actor::get_cname
494 .. doxygenfunction:: simgrid::s4u::Actor::get_name
495 .. doxygenfunction:: simgrid::s4u::Actor::get_pid
496 .. doxygenfunction:: simgrid::s4u::Actor::get_ppid
497 .. doxygenfunction:: simgrid::s4u::Actor::get_properties() const
498 .. doxygenfunction:: simgrid::s4u::Actor::get_property(const std::string &key) const
499 .. doxygenfunction:: simgrid::s4u::Actor::set_property(const std::string &key, const std::string &value)
501 .. doxygenfunction:: simgrid::s4u::Actor::get_host
502 .. doxygenfunction:: simgrid::s4u::Actor::set_host
504 .. doxygenfunction:: simgrid::s4u::Actor::get_refcount
505 .. doxygenfunction:: simgrid::s4u::Actor::get_impl
507 .. group-tab:: Python
509 .. autoattribute:: simgrid.Actor.name
510 .. autoattribute:: simgrid.Actor.host
511 .. autoattribute:: simgrid.Actor.pid
512 .. autoattribute:: simgrid.Actor.ppid
516 .. doxygenfunction:: sg_actor_get_name(const_sg_actor_t actor)
517 .. doxygenfunction:: sg_actor_get_pid(const_sg_actor_t actor)
518 .. doxygenfunction:: sg_actor_get_ppid(const_sg_actor_t actor)
519 .. doxygenfunction:: sg_actor_get_properties(const_sg_actor_t actor)
520 .. doxygenfunction:: sg_actor_get_property_value(const_sg_actor_t actor, const char *name)
522 .. doxygenfunction:: sg_actor_get_host(const_sg_actor_t actor)
523 .. doxygenfunction:: sg_actor_set_host(sg_actor_t actor, sg_host_t host)
525 .. doxygenfunction:: sg_actor_get_data(const_sg_actor_t actor)
526 .. doxygenfunction:: sg_actor_set_data(sg_actor_t actor, void *userdata)
528 Suspending and resuming actors
529 ------------------------------
535 .. doxygenfunction:: simgrid::s4u::Actor::suspend()
536 .. doxygenfunction:: simgrid::s4u::Actor::resume()
537 .. doxygenfunction:: simgrid::s4u::Actor::is_suspended
539 .. group-tab:: Python
541 .. automethod:: simgrid.Actor.resume
542 .. automethod:: simgrid.Actor.suspend
543 .. automethod:: simgrid.Actor.is_suspended
547 .. doxygenfunction:: sg_actor_suspend(sg_actor_t actor)
548 .. doxygenfunction:: sg_actor_resume(sg_actor_t actor)
549 .. doxygenfunction:: sg_actor_is_suspended(const_sg_actor_t actor)
551 Specifying when actors should terminate
552 ---------------------------------------
558 .. doxygenfunction:: simgrid::s4u::Actor::kill()
559 .. doxygenfunction:: simgrid::s4u::Actor::kill_all()
560 .. doxygenfunction:: simgrid::s4u::Actor::set_kill_time(double time)
561 .. doxygenfunction:: simgrid::s4u::Actor::get_kill_time
563 .. doxygenfunction:: simgrid::s4u::Actor::restart()
564 .. doxygenfunction:: simgrid::s4u::Actor::daemonize()
565 .. doxygenfunction:: simgrid::s4u::Actor::is_daemon
567 .. group-tab:: Python
569 .. automethod:: simgrid.Actor.kill
570 .. automethod:: simgrid.Actor.kill_all
572 .. automethod:: simgrid.Actor.daemonize
573 .. automethod:: simgrid.Actor.is_daemon
577 .. doxygenfunction:: sg_actor_kill(sg_actor_t actor)
578 .. doxygenfunction:: sg_actor_kill_all()
579 .. doxygenfunction:: sg_actor_set_kill_time(sg_actor_t actor, double kill_time)
581 .. doxygenfunction:: sg_actor_restart(sg_actor_t actor)
582 .. doxygenfunction:: sg_actor_daemonize(sg_actor_t actor)
583 .. doxygenfunction:: sg_actor_is_daemon
585 .. _API_s4u_Actor_end:
587 Reacting to the end of actors
588 -----------------------------
594 .. doxygenfunction:: simgrid::s4u::Actor::on_exit
595 .. doxygenfunction:: simgrid::s4u::Actor::join() const
596 .. doxygenfunction:: simgrid::s4u::Actor::join(double timeout) const
597 .. doxygenfunction:: simgrid::s4u::Actor::set_auto_restart(bool autorestart)
598 .. doxygenfunction:: simgrid::s4u::Actor::get_restart_count
600 .. group-tab:: Python
602 .. automethod:: simgrid.Actor.join
606 .. doxygenfunction:: sg_actor_on_exit
607 .. doxygenfunction:: sg_actor_join(const_sg_actor_t actor, double timeout)
608 .. doxygenfunction:: sg_actor_set_auto_restart(sg_actor_t actor, int auto_restart)
617 .. doxygenfunction:: simgrid::s4u::Actor::on_creation_cb
618 .. doxygenfunction:: simgrid::s4u::Actor::on_suspend_cb
619 .. doxygenfunction:: simgrid::s4u::Actor::on_host_change_cb
620 .. doxygenfunction:: simgrid::s4u::Actor::on_resume_cb
621 .. doxygenfunction:: simgrid::s4u::Actor::on_sleep_cb
622 .. doxygenfunction:: simgrid::s4u::Actor::on_wake_up_cb
623 .. doxygenfunction:: simgrid::s4u::Actor::on_termination_cb
624 .. doxygenfunction:: simgrid::s4u::Actor::on_destruction_cb
626 .. _API_s4u_this_actor:
632 These functions can be used in your user code to interact with the actor
633 currently running (the one retrieved with :cpp:func:`simgrid::s4u::Actor::self`).
634 Using these functions can greatly improve the code readability.
643 .. doxygenfunction:: simgrid::s4u::this_actor::get_cname()
644 .. doxygenfunction:: simgrid::s4u::this_actor::get_name()
645 .. doxygenfunction:: simgrid::s4u::this_actor::get_pid()
646 .. doxygenfunction:: simgrid::s4u::this_actor::get_ppid()
647 .. doxygenfunction:: simgrid::s4u::this_actor::is_maestro()
649 .. doxygenfunction:: simgrid::s4u::this_actor::get_host()
650 .. doxygenfunction:: simgrid::s4u::this_actor::set_host(Host *new_host)
652 .. group-tab:: Python
654 .. autofunction:: simgrid.this_actor.get_host
655 .. autofunction:: simgrid.this_actor.set_host
657 .. autofunction:: simgrid.this_actor.get_pid
658 .. autofunction:: simgrid.this_actor.get_ppid
662 .. doxygenfunction:: sg_actor_self_get_data()
663 .. doxygenfunction:: sg_actor_self_set_data(void *data)
664 .. doxygenfunction:: sg_actor_self_get_name()
665 .. doxygenfunction:: sg_actor_self_get_pid()
666 .. doxygenfunction:: sg_actor_self_get_ppid()
667 .. doxygenfunction:: sg_host_self()
668 .. doxygenfunction:: sg_host_self_get_name()
670 Suspending and resuming
671 -----------------------
677 .. doxygenfunction:: simgrid::s4u::this_actor::suspend()
678 .. doxygenfunction:: simgrid::s4u::this_actor::yield()
680 .. group-tab:: Python
682 .. autofunction:: simgrid.this_actor.suspend
683 .. autofunction:: simgrid.this_actor.yield_
687 .. doxygenfunction:: sg_actor_yield()
696 Please refer to :ref:`the relevant documentation <logging_prog>`.
698 .. group-tab:: Python
700 .. autofunction:: simgrid.this_actor.debug
701 .. autofunction:: simgrid.this_actor.info
702 .. autofunction:: simgrid.this_actor.warning
703 .. autofunction:: simgrid.this_actor.error
712 .. doxygenfunction:: simgrid::s4u::this_actor::sleep_for(double duration)
713 .. doxygenfunction:: simgrid::s4u::this_actor::sleep_for(std::chrono::duration< Rep, Period > duration)
714 .. doxygenfunction:: simgrid::s4u::this_actor::sleep_until(const SimulationTimePoint< Duration > &wakeup_time)
715 .. doxygenfunction:: simgrid::s4u::this_actor::sleep_until(double wakeup_time)
717 .. group-tab:: Python
719 .. autofunction:: simgrid.this_actor.sleep_for
720 .. autofunction:: simgrid.this_actor.sleep_until
724 .. doxygenfunction:: sg_actor_sleep_for(double duration)
726 Simulating executions
727 ---------------------
729 Simulate the execution of some code on this actor. You can either simulate
730 parallel or sequential code and you can either block upon the termination of
731 the execution, or start an asynchronous activity.
737 .. doxygenfunction:: simgrid::s4u::this_actor::exec_async
738 .. 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)
739 .. doxygenfunction:: simgrid::s4u::this_actor::exec_init(double flops_amounts)
740 .. doxygenfunction:: simgrid::s4u::this_actor::execute(double flop)
741 .. doxygenfunction:: simgrid::s4u::this_actor::execute(double flop, double priority)
742 .. 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)
743 .. doxygenfunction:: simgrid::s4u::this_actor::thread_execute
745 .. group-tab:: Python
747 .. autofunction:: simgrid.this_actor.exec_async
748 .. autofunction:: simgrid.this_actor.exec_init
749 .. autofunction:: simgrid.this_actor.execute
753 .. doxygenfunction:: sg_actor_execute(double flops)
754 .. doxygenfunction:: sg_actor_execute_with_priority(double flops, double priority)
755 .. doxygenfunction:: sg_actor_exec_init(double computation_amount)
756 .. doxygenfunction:: sg_actor_exec_async(double computation_amount)
757 .. doxygenfunction:: sg_actor_parallel_exec_init(int host_nb, const sg_host_t* host_list, double* flops_amount, double* bytes_amount);
766 .. doxygenfunction:: simgrid::s4u::this_actor::exit()
767 .. doxygenfunction:: simgrid::s4u::this_actor::on_exit(const std::function< void(bool)> &fun)
769 .. group-tab:: Python
771 .. autofunction:: simgrid.this_actor.exit
772 .. autofunction:: simgrid.this_actor.on_exit
776 See also :cpp:func:`sg_actor_on_exit`.
778 .. doxygenfunction:: sg_actor_exit
790 .. doxygenclass:: simgrid::s4u::Engine
792 .. group-tab:: Python
794 .. autoclass:: simgrid.Engine
803 .. doxygenfunction:: simgrid::s4u::Engine::Engine(int *argc, char **argv)
804 .. doxygenfunction:: simgrid::s4u::Engine::is_initialized()
805 .. doxygenfunction:: simgrid::s4u::Engine::shutdown()
806 .. doxygenfunction:: simgrid::s4u::Engine::get_instance()
808 .. group-tab:: Python
810 .. automethod:: simgrid.Engine.__init__
811 .. autoattribute:: simgrid.Engine.instance
815 .. doxygenfunction:: simgrid_init
824 .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &str)
825 .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, bool value)
826 .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, double value)
827 .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, int value)
828 .. doxygenfunction:: simgrid::s4u::Engine::set_config(const std::string &name, const std::string &value)
830 .. doxygenfunction:: simgrid::s4u::Engine::load_deployment
831 .. doxygenfunction:: simgrid::s4u::Engine::load_platform
832 .. doxygenfunction:: simgrid::s4u::Engine::register_actor(const std::string &name)
833 .. doxygenfunction:: simgrid::s4u::Engine::register_actor(const std::string &name, F code)
834 .. doxygenfunction:: simgrid::s4u::Engine::register_default(const std::function< void(int, char **)> &code)
835 .. doxygenfunction:: simgrid::s4u::Engine::register_default(const kernel::actor::ActorCodeFactory &factory)
837 .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const std::function< void(int, char **)> &code)
838 .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const std::function< void(std::vector< std::string >)> &code)
839 .. doxygenfunction:: simgrid::s4u::Engine::register_function(const std::string &name, const kernel::actor::ActorCodeFactory &factory)
841 .. group-tab:: Python
843 .. automethod:: simgrid.Engine.load_deployment
844 .. automethod:: simgrid.Engine.load_platform
845 .. automethod:: simgrid.Engine.register_actor
849 .. doxygenfunction:: simgrid_load_deployment
850 .. doxygenfunction:: simgrid_load_platform
851 .. doxygenfunction:: simgrid_register_default
852 .. doxygenfunction:: simgrid_register_function
862 .. doxygenfunction:: simgrid::s4u::Engine::get_clock()
863 .. doxygenfunction:: simgrid::s4u::Engine::run
864 .. doxygenfunction:: simgrid::s4u::Engine::run_until
866 .. group-tab:: Python
868 .. autoattribute:: simgrid.Engine.clock
869 .. automethod:: simgrid.Engine.run
870 .. automethod:: simgrid.Engine.run_until
874 .. doxygenfunction:: simgrid_get_clock
875 .. doxygenfunction:: simgrid_run
876 .. doxygenfunction:: simgrid_run_until
885 .. doxygenfunction:: simgrid::s4u::Engine::get_actor_count
886 .. doxygenfunction:: simgrid::s4u::Engine::get_all_actors
887 .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_actors
891 .. doxygenfunction:: sg_actor_count()
900 .. doxygenfunction:: simgrid::s4u::Engine::get_all_hosts
901 .. doxygenfunction:: simgrid::s4u::Engine::get_host_count
902 .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_hosts
903 .. doxygenfunction:: simgrid::s4u::Engine::host_by_name
904 .. doxygenfunction:: simgrid::s4u::Engine::host_by_name_or_null
906 .. group-tab:: Python
908 .. autoattribute:: simgrid.Engine.all_hosts
909 .. automethod:: simgrid.Engine.host_by_name
913 See also :cpp:func:`sg_host_list` and :cpp:func:`sg_host_count`.
922 .. doxygenfunction:: simgrid::s4u::Engine::get_all_links
923 .. doxygenfunction:: simgrid::s4u::Engine::get_link_count
924 .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_links
925 .. doxygenfunction:: simgrid::s4u::Engine::link_by_name
926 .. doxygenfunction:: simgrid::s4u::Engine::link_by_name_or_null
928 .. group-tab:: Python
930 .. autoattribute:: simgrid.Engine.all_links
932 Interacting with the routing
933 ----------------------------
939 .. doxygenfunction:: simgrid::s4u::Engine::get_all_netpoints
940 .. doxygenfunction:: simgrid::s4u::Engine::get_filtered_netzones
941 .. doxygenfunction:: simgrid::s4u::Engine::get_netzone_root
942 .. doxygenfunction:: simgrid::s4u::Engine::netpoint_by_name_or_null
943 .. doxygenfunction:: simgrid::s4u::Engine::netzone_by_name_or_null
945 .. group-tab:: Python
947 .. autoattribute:: simgrid.Engine.all_netpoints
948 .. autoattribute:: simgrid.Engine.netzone_root
949 .. automethod:: simgrid.Engine.netpoint_by_name
950 .. automethod:: simgrid.Engine.netzone_by_name
959 .. doxygenfunction:: simgrid::s4u::Engine::on_deadlock_cb
960 .. doxygenfunction:: simgrid::s4u::Engine::on_platform_created_cb
961 .. doxygenfunction:: simgrid::s4u::Engine::on_platform_creation_cb
962 .. doxygenfunction:: simgrid::s4u::Engine::on_simulation_start_cb
963 .. doxygenfunction:: simgrid::s4u::Engine::on_simulation_end_cb
964 .. doxygenfunction:: simgrid::s4u::Engine::on_time_advance_cb
976 .. doxygenclass:: simgrid::s4u::Mailbox
978 .. group-tab:: Python
980 .. autoclass:: simgrid.Mailbox
982 Please also refer to the :ref:`full doc on s4u::Mailbox <s4u_mailbox>`.
993 #include <simgrid/s4u/Mailbox.hpp>
995 Note that there is no MailboxPtr type and that you cannot use the RAII
996 idiom on mailboxes because they are internal objects to the simulation
997 engine. Once created, there is no way to destroy a mailbox before the end
1000 .. doxygenfunction:: simgrid::s4u::Mailbox::by_name(const std::string &name)
1002 .. group-tab:: Python
1006 #include <simgrid/mailbox.h>
1008 .. automethod:: simgrid.Mailbox.by_name
1014 #include <simgrid/s4u/mailbox.h>
1016 .. doxygentypedef:: sg_mailbox_t
1017 .. doxygentypedef:: const_sg_mailbox_t
1019 .. doxygenfunction:: sg_mailbox_by_name(const char *alias)
1028 .. doxygenfunction:: simgrid::s4u::Mailbox::get_cname
1029 .. doxygenfunction:: simgrid::s4u::Mailbox::get_name
1031 .. group-tab:: Python
1033 .. autoattribute:: simgrid.Mailbox.name
1042 .. doxygenfunction:: simgrid::s4u::Mailbox::put(void *payload, uint64_t simulated_size_in_bytes)
1043 .. doxygenfunction:: simgrid::s4u::Mailbox::put(void *payload, uint64_t simulated_size_in_bytes, double timeout)
1044 .. doxygenfunction:: simgrid::s4u::Mailbox::put_async(void *data, uint64_t simulated_size_in_bytes)
1045 .. doxygenfunction:: simgrid::s4u::Mailbox::put_init()
1046 .. doxygenfunction:: simgrid::s4u::Mailbox::put_init(void *data, uint64_t simulated_size_in_bytes)
1048 .. group-tab:: Python
1050 .. automethod:: simgrid.Mailbox.put
1051 .. automethod:: simgrid.Mailbox.put_async
1052 .. automethod:: simgrid.Mailbox.put_init
1056 .. doxygenfunction:: sg_mailbox_put(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1057 .. doxygenfunction:: sg_mailbox_put_init(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1058 .. doxygenfunction:: sg_mailbox_put_async(sg_mailbox_t mailbox, void *payload, long simulated_size_in_bytes)
1068 .. doxygenfunction:: simgrid::s4u::Mailbox::empty
1069 .. doxygenfunction:: simgrid::s4u::Mailbox::front
1070 .. doxygenfunction:: simgrid::s4u::Mailbox::get()
1071 .. doxygenfunction:: simgrid::s4u::Mailbox::get(double timeout)
1072 .. doxygenfunction:: simgrid::s4u::Mailbox::get_async(T **data)
1073 .. doxygenfunction:: simgrid::s4u::Mailbox::get_init()
1074 .. doxygenfunction:: simgrid::s4u::Mailbox::iprobe(int type, const std::function<bool(void *, void *, kernel::activity::CommImpl *)>& match_fun, void *data)
1075 .. doxygenfunction:: simgrid::s4u::Mailbox::listen
1076 .. doxygenfunction:: simgrid::s4u::Mailbox::ready
1078 .. group-tab:: Python
1080 .. automethod:: simgrid.Mailbox.get
1081 .. automethod:: simgrid.Mailbox.get_async
1082 .. autoattribute:: simgrid.Mailbox.ready
1086 .. doxygenfunction:: sg_mailbox_get(sg_mailbox_t mailbox)
1087 .. doxygenfunction:: sg_mailbox_get_async(sg_mailbox_t mailbox, void **data)
1088 .. doxygenfunction:: sg_mailbox_get_name(const_sg_mailbox_t mailbox)
1089 .. doxygenfunction:: sg_mailbox_listen(const char *alias)
1094 See :ref:`s4u_receiving_actor`.
1100 .. doxygenfunction:: simgrid::s4u::Mailbox::get_receiver
1101 .. doxygenfunction:: simgrid::s4u::Mailbox::set_receiver(ActorPtr actor)
1105 .. doxygenfunction:: sg_mailbox_set_receiver(const char *alias)
1107 .. _API_s4u_Resource:
1123 .. doxygenclass:: simgrid::s4u::Disk
1125 .. group-tab:: Python
1127 .. autoclass:: simgrid.Disk
1131 .. doxygentypedef:: sg_disk_t
1132 .. doxygentypedef:: const_sg_disk_t
1143 #include <simgrid/s4u/Disk.hpp>
1145 Note that there is no DiskPtr type and that you cannot use the RAII
1146 idiom on disks because SimGrid does not allow (yet) to create nor
1147 destroy resources once the simulation is started.
1149 .. doxygenfunction:: simgrid::s4u::Disk::seal()
1151 .. group-tab:: Python
1155 from simgrid import Disk
1157 .. automethod:: simgrid.Disk.seal
1167 .. doxygenfunction:: simgrid::s4u::Disk::get_cname() const
1168 .. doxygenfunction:: simgrid::s4u::Disk::get_host() const
1169 .. doxygenfunction:: simgrid::s4u::Disk::get_name() const
1170 .. doxygenfunction:: simgrid::s4u::Disk::get_properties() const
1171 .. doxygenfunction:: simgrid::s4u::Disk::get_property(const std::string &key) const
1172 .. doxygenfunction:: simgrid::s4u::Disk::get_read_bandwidth() const
1173 .. doxygenfunction:: simgrid::s4u::Disk::get_write_bandwidth() const
1174 .. doxygenfunction:: simgrid::s4u::Disk::set_property(const std::string &, const std::string &value)
1175 .. doxygenfunction:: simgrid::s4u::Disk::set_sharing_policy
1177 .. group-tab:: Python
1179 .. autoattribute:: simgrid.Disk.name
1180 .. automethod:: simgrid.Disk.set_sharing_policy
1189 .. doxygenfunction:: simgrid::s4u::Disk::io_init(sg_size_t size, s4u::Io::OpType type) const
1190 .. doxygenfunction:: simgrid::s4u::Disk::read(sg_size_t size) const
1191 .. doxygenfunction:: simgrid::s4u::Disk::read_async(sg_size_t size) const
1192 .. doxygenfunction:: simgrid::s4u::Disk::write(sg_size_t size) const
1193 .. doxygenfunction:: simgrid::s4u::Disk::write_async(sg_size_t size) const
1195 .. group-tab:: Python
1197 .. automethod:: simgrid.Disk.read
1198 .. automethod:: simgrid.Disk.read_async
1199 .. automethod:: simgrid.Disk.write
1200 .. automethod:: simgrid.Disk.write_async
1209 .. doxygenfunction:: simgrid::s4u::Disk::on_creation_cb
1210 .. doxygenfunction:: simgrid::s4u::Disk::on_destruction_cb
1211 .. doxygenfunction:: simgrid::s4u::Disk::on_state_change_cb
1224 .. doxygenclass:: simgrid::s4u::Host
1226 .. group-tab:: Python
1228 .. autoclass:: simgrid.Host
1239 #include <simgrid/s4u/Host.hpp>
1241 Note that there is no HostPtr type, and that you cannot use the RAII
1242 idiom on hosts because SimGrid does not allow (yet) to create nor
1243 destroy resources once the simulation is started.
1245 .. doxygenfunction:: simgrid::s4u::Host::destroy()
1246 .. doxygenfunction:: simgrid::s4u::Host::seal()
1248 .. group-tab:: Python
1252 from simgrid import Host
1254 .. automethod:: simgrid.Host.seal
1260 #include <simgrid/host.h>
1262 .. doxygentypedef:: sg_host_t
1263 .. cpp:type:: const s4u_Host* const_sg_host_t
1265 Pointer to a constant host object.
1274 See also :cpp:func:`simgrid::s4u::Engine::get_all_hosts`.
1276 .. doxygenfunction:: simgrid::s4u::Host::by_name(const std::string &name)
1277 .. doxygenfunction:: simgrid::s4u::Host::by_name_or_null(const std::string &name)
1278 .. doxygenfunction:: simgrid::s4u::Host::current()
1280 .. group-tab:: Python
1282 See also :py:attr:`simgrid.Engine.all_hosts`.
1284 .. automethod:: simgrid.Host.by_name
1285 .. automethod:: simgrid.Host.current
1289 .. doxygenfunction:: sg_host_by_name(const char *name)
1290 .. doxygenfunction:: sg_host_count()
1291 .. doxygenfunction:: sg_host_list()
1293 Modifying characteristics
1294 -------------------------
1300 .. doxygenfunction:: simgrid::s4u::Host::set_core_count(int core_count)
1301 .. doxygenfunction:: simgrid::s4u::Host::set_coordinates(const std::string& coords)
1302 .. doxygenfunction:: simgrid::s4u::Host::set_sharing_policy
1304 .. group-tab:: Python
1306 .. autoattribute:: simgrid.Host.core_count
1308 .. automethod:: simgrid.Host.set_coordinates
1309 .. automethod:: simgrid.Host.set_sharing_policy
1318 .. doxygenfunction:: simgrid::s4u::Host::get_cname() const
1319 .. doxygenfunction:: simgrid::s4u::Host::get_core_count() const
1320 .. doxygenfunction:: simgrid::s4u::Host::get_name() const
1321 .. doxygenfunction:: simgrid::s4u::Host::get_available_speed() const
1322 .. doxygenfunction:: simgrid::s4u::Host::get_load() const
1323 .. doxygenfunction:: simgrid::s4u::Host::get_speed() const
1325 .. group-tab:: Python
1327 .. autoattribute:: simgrid.Host.name
1328 .. autoattribute:: simgrid.Host.core_count
1329 .. autoattribute:: simgrid.Host.load
1330 .. autoattribute:: simgrid.Host.speed
1331 .. autoattribute:: simgrid.Host.available_speed
1335 .. doxygenfunction:: sg_host_core_count(const_sg_host_t host)
1336 .. doxygenfunction:: sg_host_get_name(const_sg_host_t host)
1337 .. doxygenfunction:: sg_host_get_load(const_sg_host_t host)
1338 .. doxygenfunction:: sg_host_get_speed(const_sg_host_t host)
1340 User data and properties
1341 ------------------------
1347 .. doxygenfunction:: simgrid::s4u::Host::get_properties() const
1348 .. doxygenfunction:: simgrid::s4u::Host::get_property(const std::string &key) const
1349 .. doxygenfunction:: simgrid::s4u::Host::set_properties(const std::unordered_map< std::string, std::string > &properties)
1350 .. doxygenfunction:: simgrid::s4u::Host::set_property(const std::string &key, const std::string &value)
1354 .. doxygenfunction:: sg_host_set_property_value(sg_host_t host, const char *name, const char *value)
1355 .. doxygenfunction:: sg_host_get_properties(const_sg_host_t host)
1356 .. doxygenfunction:: sg_host_get_property_value(const_sg_host_t host, const char *name)
1357 .. doxygenfunction:: sg_host_extension_create(void(*deleter)(void *))
1358 .. doxygenfunction:: sg_host_extension_get(const_sg_host_t host, size_t rank)
1360 Retrieving components
1361 ---------------------
1367 .. doxygenfunction:: simgrid::s4u::Host::add_disk(const Disk *disk)
1368 .. doxygenfunction:: simgrid::s4u::Host::get_actor_count() const
1369 .. doxygenfunction:: simgrid::s4u::Host::get_all_actors() const
1370 .. doxygenfunction:: simgrid::s4u::Host::get_disks() const
1371 .. doxygenfunction:: simgrid::s4u::Host::remove_disk(const std::string &disk_name)
1373 .. group-tab:: Python
1375 .. automethod:: simgrid.Host.get_disks
1379 .. doxygenfunction:: sg_host_get_actor_list(const_sg_host_t host, xbt_dynar_t whereto)
1388 .. doxygenfunction:: simgrid::s4u::Host::is_on() const
1389 .. doxygenfunction:: simgrid::s4u::Host::turn_off()
1390 .. doxygenfunction:: simgrid::s4u::Host::turn_on()
1394 .. doxygenfunction:: sg_host_is_on(const_sg_host_t host)
1395 .. doxygenfunction:: sg_host_turn_off(sg_host_t host)
1396 .. doxygenfunction:: sg_host_turn_on(sg_host_t host)
1405 .. doxygenfunction:: simgrid::s4u::Host::get_pstate() const
1406 .. doxygenfunction:: simgrid::s4u::Host::get_pstate_count() const
1407 .. doxygenfunction:: simgrid::s4u::Host::get_pstate_speed(unsigned long pstate_index) const
1408 .. doxygenfunction:: simgrid::s4u::Host::set_pstate(unsigned long pstate_index)
1410 .. group-tab:: Python
1412 .. autoattribute:: simgrid.Host.pstate
1413 .. autoattribute:: simgrid.Host.pstate_count
1414 .. automethod:: simgrid.Host.pstate_speed
1418 .. doxygenfunction:: sg_host_get_available_speed(const_sg_host_t host)
1419 .. doxygenfunction:: sg_host_get_nb_pstates(const_sg_host_t host)
1420 .. doxygenfunction:: sg_host_get_pstate(const_sg_host_t host)
1421 .. doxygenfunction:: sg_host_get_pstate_speed(const_sg_host_t host, unsigned long pstate_index)
1422 .. doxygenfunction:: sg_host_set_pstate(sg_host_t host, unsigned long pstate)
1431 .. doxygenfunction:: simgrid::s4u::Host::set_speed_profile(kernel::profile::Profile *p)
1432 .. doxygenfunction:: simgrid::s4u::Host::set_state_profile(kernel::profile::Profile *p)
1434 .. group-tab:: Python
1436 .. automethod:: simgrid.Host.set_speed_profile
1437 .. automethod:: simgrid.Host.set_state_profile
1446 .. doxygenfunction:: simgrid::s4u::Host::exec_async
1447 .. doxygenfunction:: simgrid::s4u::Host::execute(double flops) const
1448 .. doxygenfunction:: simgrid::s4u::Host::execute(double flops, double priority) const
1450 Platform and routing
1451 --------------------
1453 You can also start direct communications between two arbitrary hosts
1454 using :cpp:func:`Comm::sendto() <simgrid::s4u::Comm::sendto()>`.
1460 .. doxygenfunction:: simgrid::s4u::Host::get_englobing_zone() const
1461 .. doxygenfunction:: simgrid::s4u::Host::get_netpoint() const
1462 .. doxygenfunction:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< Link * > &links, double *latency) const
1463 .. doxygenfunction:: simgrid::s4u::Host::route_to(const Host *dest, std::vector< kernel::resource::StandardLinkImpl * > &links, double *latency) const
1464 .. doxygenfunction:: simgrid::s4u::Host::create_disk(const std::string& name, double read_bandwidth, double write_bandwidth)
1465 .. doxygenfunction:: simgrid::s4u::Host::create_disk(const std::string& name, const std::string& read_bandwidth, const std::string& write_bandwidth)
1467 .. group-tab:: Python
1469 .. autoattribute:: simgrid.Host.netpoint
1470 .. automethod:: simgrid.Host.create_disk
1472 .. automethod:: simgrid.Host.route_to
1476 .. doxygenfunction:: sg_host_get_route(const_sg_host_t from, const_sg_host_t to, xbt_dynar_t links)
1477 .. doxygenfunction:: sg_host_get_route_bandwidth(const_sg_host_t from, const_sg_host_t to)
1478 .. doxygenfunction:: sg_host_get_route_latency(const_sg_host_t from, const_sg_host_t to)
1479 .. doxygenfunction:: sg_host_sendto(sg_host_t from, sg_host_t to, double byte_amount)
1488 .. doxygenfunction:: simgrid::s4u::Host::on_creation_cb
1489 .. doxygenfunction:: simgrid::s4u::Host::on_destruction_cb
1490 .. doxygenfunction:: simgrid::s4u::Host::on_speed_change_cb
1491 .. doxygenfunction:: simgrid::s4u::Host::on_state_change_cb
1503 .. doxygenclass:: simgrid::s4u::Link
1504 .. doxygenclass:: simgrid::s4u::SplitDuplexLink
1505 .. doxygenclass:: simgrid::s4u::LinkInRoute
1508 .. group-tab:: Python
1510 .. autoclass:: simgrid.Link
1521 #include <simgrid/s4u/Link.hpp>
1523 Note that there is no LinkPtr type and that you cannot use the RAII
1524 idiom on hosts because SimGrid does not allow (yet) to create nor
1525 destroy resources once the simulation is started.
1527 .. doxygenfunction:: simgrid::s4u::Link::seal()
1529 .. group-tab:: Python
1533 from simgrid import Link
1535 .. automethod:: simgrid.Link.seal
1541 #include <simgrid/link.h>
1543 .. doxygentypedef:: sg_link_t
1544 .. cpp:type:: const s4u_Link* const_sg_link_t
1546 Pointer to a constant link object.
1555 See also :cpp:func:`simgrid::s4u::Engine::get_all_links`.
1557 .. doxygenfunction:: simgrid::s4u::Link::by_name(const std::string &name)
1558 .. doxygenfunction:: simgrid::s4u::Link::by_name_or_null(const std::string &name)
1560 .. group-tab:: Python
1562 See also :py:attr:`simgrid.Engine.all_links`.
1564 .. automethod:: simgrid.Link.by_name
1565 .. autoattribute:: simgrid.Link.name
1569 .. doxygenfunction:: sg_link_by_name(const char *name)
1570 .. doxygenfunction:: sg_link_count()
1571 .. doxygenfunction:: sg_link_list()
1580 .. doxygenfunction:: simgrid::s4u::Link::get_bandwidth() const
1581 .. doxygenfunction:: simgrid::s4u::Link::get_cname() const
1582 .. doxygenfunction:: simgrid::s4u::Link::get_latency() const
1583 .. doxygenfunction:: simgrid::s4u::Link::get_name() const
1584 .. doxygenfunction:: simgrid::s4u::Link::get_sharing_policy() const
1585 .. doxygenfunction:: simgrid::s4u::Link::get_usage() const
1586 .. doxygenfunction:: simgrid::s4u::Link::is_used() const
1588 .. group-tab:: Python
1590 .. autoattribute:: simgrid.Link.bandwidth
1591 .. autoattribute:: simgrid.Link.latency
1595 .. doxygenfunction:: sg_link_get_bandwidth(const_sg_link_t link)
1596 .. doxygenfunction:: sg_link_get_latency(const_sg_link_t link)
1597 .. doxygenfunction:: sg_link_get_name(const_sg_link_t link)
1598 .. doxygenfunction:: sg_link_is_shared(const_sg_link_t link)
1600 Modifying characteristics
1601 -------------------------
1607 .. doxygenfunction:: simgrid::s4u::Link::set_bandwidth(double value)
1608 .. doxygenfunction:: simgrid::s4u::Link::set_latency(double value)
1609 .. doxygenfunction:: simgrid::s4u::Link::set_latency(const std::string& value)
1610 .. doxygenfunction:: simgrid::s4u::Link::set_concurrency_limit(int limit)
1611 .. doxygenfunction:: simgrid::s4u::Link::set_sharing_policy
1613 .. group-tab:: Python
1615 .. automethod:: simgrid.Link.set_bandwidth
1616 .. automethod:: simgrid.Link.set_latency
1617 .. automethod:: simgrid.Link.set_concurrency_limit
1618 .. automethod:: simgrid.Link.set_sharing_policy
1622 .. doxygenfunction:: sg_link_set_bandwidth(sg_link_t link, double value)
1623 .. doxygenfunction:: sg_link_set_latency(sg_link_t link, double value)
1625 User data and properties
1626 ------------------------
1632 .. doxygenfunction:: simgrid::s4u::Link::get_property(const std::string &key) const
1633 .. doxygenfunction:: simgrid::s4u::Link::set_property(const std::string &key, const std::string &value)
1637 .. doxygenfunction:: sg_link_get_data(const_sg_link_t link)
1638 .. doxygenfunction:: sg_link_set_data(sg_link_t link, void *data)
1647 See also :cpp:func:`simgrid::s4u::Link::set_state_profile`.
1649 .. doxygenfunction:: simgrid::s4u::Link::is_on() const
1650 .. doxygenfunction:: simgrid::s4u::Link::turn_off()
1651 .. doxygenfunction:: simgrid::s4u::Link::turn_on()
1653 .. group-tab:: Python
1655 See also :py:func:`simgrid.Link.set_state_profile`.
1657 .. automethod:: simgrid.Link.is_on
1658 .. automethod:: simgrid.Link.turn_off
1659 .. automethod:: simgrid.Link.turn_on
1664 See :ref:`howto_churn` for more details.
1670 .. doxygenfunction:: simgrid::s4u::Link::set_bandwidth_profile(kernel::profile::Profile *profile)
1671 .. doxygenfunction:: simgrid::s4u::Link::set_latency_profile(kernel::profile::Profile *profile)
1672 .. doxygenfunction:: simgrid::s4u::Link::set_state_profile(kernel::profile::Profile *profile)
1674 .. group-tab:: Python
1676 .. automethod:: simgrid.Link.set_bandwidth_profile
1677 .. automethod:: simgrid.Link.set_latency_profile
1678 .. automethod:: simgrid.Link.set_state_profile
1687 .. doxygenfunction:: simgrid::s4u::Link::set_host_wifi_rate
1689 .. group-tab:: Python
1691 .. automethod:: simgrid.Link.set_host_wifi_rate
1700 .. doxygenfunction:: simgrid::s4u::Link::on_bandwidth_change_cb
1701 .. doxygenfunction:: simgrid::s4u::Link::on_communication_state_change_cb
1702 .. doxygenfunction:: simgrid::s4u::Link::on_creation_cb
1703 .. doxygenfunction:: simgrid::s4u::Link::on_destruction_cb
1704 .. doxygenfunction:: simgrid::s4u::Link::on_state_change_cb
1706 .. _API_s4u_NetZone:
1716 .. doxygenclass:: simgrid::s4u::NetZone
1718 .. group-tab:: Python
1720 .. autoclass:: simgrid.NetZone
1731 #include <simgrid/s4u/NetZone.hpp>
1733 Note that there is no NetZonePtr type and that you cannot use the RAII
1734 idiom on network zones because SimGrid does not allow (yet) to create nor
1735 destroy resources once the simulation is started.
1737 .. doxygenfunction:: simgrid::s4u::NetZone::seal
1739 .. group-tab:: Python
1743 from simgrid import NetZone
1745 .. automethod:: simgrid.NetZone.seal
1751 #include <simgrid/zone.h>
1753 .. doxygentypedef:: sg_netzone_t
1754 .. cpp:type:: const s4u_NetZone* const_sg_netzone_t
1756 Pointer to a constant network zone object.
1765 See :cpp:func:`simgrid::s4u::Engine::get_netzone_root`,
1766 :cpp:func:`simgrid::s4u::Engine::netzone_by_name_or_null` and
1767 :cpp:func:`simgrid::s4u::Engine::get_filtered_netzones`.
1771 .. doxygenfunction:: sg_zone_get_by_name(const char *name)
1772 .. doxygenfunction:: sg_zone_get_root()
1781 .. doxygenfunction:: simgrid::s4u::NetZone::get_cname() const
1782 .. doxygenfunction:: simgrid::s4u::NetZone::get_name() const
1783 .. doxygenfunction:: simgrid::s4u::NetZone::get_netpoint()
1785 .. group-tab:: Python
1787 .. autoattribute:: simgrid.NetZone.name
1788 .. autoattribute:: simgrid.NetZone.netpoint
1792 .. doxygenfunction:: sg_zone_get_name(const_sg_netzone_t zone)
1794 User data and properties
1795 ------------------------
1801 .. doxygenfunction:: simgrid::s4u::NetZone::get_properties() const
1802 .. doxygenfunction:: simgrid::s4u::NetZone::get_property(const std::string &key) const
1803 .. doxygenfunction:: simgrid::s4u::NetZone::set_property(const std::string &key, const std::string &value)
1805 .. group-tab:: Python
1807 .. automethod:: simgrid.NetZone.set_property
1811 .. doxygenfunction:: sg_zone_get_property_value(const_sg_netzone_t as, const char *name)
1812 .. doxygenfunction:: sg_zone_set_property_value(sg_netzone_t netzone, const char *name, const char *value)
1814 Retrieving components
1815 ---------------------
1821 .. doxygenfunction:: simgrid::s4u::NetZone::get_all_hosts() const
1822 .. doxygenfunction:: simgrid::s4u::NetZone::get_host_count() const
1826 .. doxygenfunction:: sg_zone_get_hosts(const_sg_netzone_t zone, xbt_dynar_t whereto)
1835 .. doxygenfunction:: simgrid::s4u::NetZone::add_component(kernel::routing::NetPoint *elm)
1836 .. doxygenfunction:: simgrid::s4u::NetZone::add_route
1837 .. doxygenfunction:: simgrid::s4u::NetZone::add_bypass_route
1838 .. doxygenfunction:: simgrid::s4u::NetZone::get_children() const
1839 .. doxygenfunction:: simgrid::s4u::NetZone::get_parent() const
1840 .. doxygenfunction:: simgrid::s4u::NetZone::set_parent(const NetZone* parent)
1842 .. group-tab:: Python
1844 .. automethod:: simgrid.NetZone.add_route
1845 .. automethod:: simgrid.NetZone.set_parent
1849 .. doxygenfunction:: sg_zone_get_sons(const_sg_netzone_t zone, xbt_dict_t whereto)
1858 .. doxygenfunction:: simgrid::s4u::NetZone::on_creation_cb
1859 .. doxygenfunction:: simgrid::s4u::NetZone::on_seal_cb
1870 .. doxygenfunction:: simgrid::s4u::create_full_zone
1871 .. doxygenfunction:: simgrid::s4u::create_empty_zone
1872 .. doxygenfunction:: simgrid::s4u::create_star_zone
1873 .. doxygenfunction:: simgrid::s4u::create_dijkstra_zone
1874 .. doxygenfunction:: simgrid::s4u::create_floyd_zone
1875 .. doxygenfunction:: simgrid::s4u::create_vivaldi_zone
1876 .. doxygenfunction:: simgrid::s4u::create_wifi_zone
1877 .. doxygenfunction:: simgrid::s4u::create_torus_zone
1878 .. doxygenfunction:: simgrid::s4u::create_fatTree_zone
1879 .. doxygenfunction:: simgrid::s4u::create_dragonfly_zone
1881 .. group-tab:: Python
1883 .. automethod:: simgrid.NetZone.create_full_zone
1884 .. automethod:: simgrid.NetZone.create_empty_zone
1885 .. automethod:: simgrid.NetZone.create_star_zone
1886 .. automethod:: simgrid.NetZone.create_dijkstra_zone
1887 .. automethod:: simgrid.NetZone.create_floyd_zone
1888 .. automethod:: simgrid.NetZone.create_vivaldi_zone
1889 .. automethod:: simgrid.NetZone.create_wifi_zone
1890 .. automethod:: simgrid.NetZone.create_torus_zone
1891 .. automethod:: simgrid.NetZone.create_fatTree_zone
1892 .. automethod:: simgrid.NetZone.create_dragonfly_zone
1901 .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::vector<double>& speed_per_pstate)
1902 .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, double speed)
1903 .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::vector<std::string>& speed_per_pstate)
1904 .. doxygenfunction:: simgrid::s4u::NetZone::create_host(const std::string& name, const std::string& speed)
1906 .. group-tab:: Python
1908 .. automethod:: simgrid.NetZone.create_host
1917 .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::vector<double>& bandwidths)
1918 .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, double bandwidth)
1919 .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::vector<std::string>& bandwidthds)
1920 .. doxygenfunction:: simgrid::s4u::NetZone::create_link(const std::string& name, const std::string& bandwidth)
1921 .. doxygenfunction:: simgrid::s4u::NetZone::create_split_duplex_link(const std::string& name, const std::string& bandwidth)
1922 .. doxygenfunction:: simgrid::s4u::NetZone::create_split_duplex_link(const std::string& name, double bandwidth)
1924 .. group-tab:: Python
1926 .. automethod:: simgrid.NetZone.create_link
1927 .. automethod:: simgrid.NetZone.create_split_duplex_link
1936 .. doxygenfunction:: simgrid::s4u::NetZone::create_router(const std::string& name)
1938 .. group-tab:: Python
1940 .. automethod:: simgrid.NetZone.create_router
1942 .. _API_s4u_VirtualMachine:
1944 =======================
1945 class VirtualMachine
1946 =======================
1949 .. doxygenclass:: simgrid::s4u::VirtualMachine
1959 #include <simgrid/s4u/VirtualMachine.hpp>
1961 Note that there is no VirtualMachinePtr type, and that you cannot use the RAII
1962 idiom on virtual machines. There is no good reason for that and should change in the future.
1968 #include <simgrid/vm.h>
1970 .. doxygentypedef:: sg_vm_t
1971 .. cpp:type:: const s4u_VirtualMachine* const_sg_vm_t
1973 Pointer to a constant virtual machine object.
1982 .. doxygenfunction:: simgrid::s4u::Host::create_vm(const std::string &name, int core_amount)
1983 .. doxygenfunction:: simgrid::s4u::Host::create_vm(const std::string &name, int core_amount, size_t ramsize)
1984 .. doxygenfunction:: simgrid::s4u::VirtualMachine::destroy
1988 .. doxygenfunction:: sg_vm_create_core
1989 .. doxygenfunction:: sg_vm_create_multicore
1990 .. doxygenfunction:: sg_vm_destroy
1999 .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_pm() const
2000 .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_ramsize() const
2001 .. doxygenfunction:: simgrid::s4u::VirtualMachine::get_state() const
2003 .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_bound(double bound)
2004 .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_pm(Host *pm)
2005 .. doxygenfunction:: simgrid::s4u::VirtualMachine::set_ramsize(size_t ramsize)
2009 .. doxygenfunction:: sg_vm_get_ramsize(const_sg_vm_t vm)
2010 .. doxygenfunction:: sg_vm_set_bound(sg_vm_t vm, double bound)
2011 .. doxygenfunction:: sg_vm_set_ramsize(sg_vm_t vm, size_t size)
2013 .. doxygenfunction:: sg_vm_get_name
2014 .. doxygenfunction:: sg_vm_get_pm
2015 .. doxygenfunction:: sg_vm_is_created
2016 .. doxygenfunction:: sg_vm_is_running
2017 .. doxygenfunction:: sg_vm_is_suspended
2026 .. doxygenfunction:: simgrid::s4u::VirtualMachine::resume()
2027 .. doxygenfunction:: simgrid::s4u::VirtualMachine::shutdown()
2028 .. doxygenfunction:: simgrid::s4u::VirtualMachine::start()
2029 .. doxygenfunction:: simgrid::s4u::VirtualMachine::suspend()
2033 .. doxygenfunction:: sg_vm_start
2034 .. doxygenfunction:: sg_vm_suspend
2035 .. doxygenfunction:: sg_vm_resume
2036 .. doxygenfunction:: sg_vm_shutdown
2045 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_creation_cb
2046 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_destruction_cb
2047 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_end_cb
2048 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_migration_start_cb
2049 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_resume_cb
2050 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_shutdown_cb
2051 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_start_cb
2052 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_started_cb
2053 .. doxygenfunction:: simgrid::s4u::VirtualMachine::on_suspend_cb
2055 .. _API_s4u_Activity:
2065 .. doxygenclass:: simgrid::s4u::Activity
2067 **Known subclasses:**
2068 :ref:`Communications <API_s4u_Comm>` (started on Mailboxes and consuming links),
2069 :ref:`Executions <API_s4u_Exec>` (started on Host and consuming CPU resources)
2070 :ref:`I/O <API_s4u_Io>` (started on and consuming disks).
2071 See also the :ref:`section on activities <s4u_Activities>` above.
2082 #include <simgrid/s4u/Activity.hpp>
2084 .. doxygentypedef:: ActivityPtr
2093 .. doxygenfunction:: simgrid::s4u::Activity::get_cname
2094 .. doxygenfunction:: simgrid::s4u::Activity::get_name
2095 .. doxygenfunction:: simgrid::s4u::Activity::get_remaining() const
2096 .. doxygenfunction:: simgrid::s4u::Activity::get_state() const
2097 .. doxygenfunction:: simgrid::s4u::Activity::set_remaining(double remains)
2098 .. doxygenfunction:: simgrid::s4u::Activity::set_state(Activity::State state)
2101 Activities life cycle
2102 ---------------------
2108 .. doxygenfunction:: simgrid::s4u::Activity::start
2109 .. doxygenfunction:: simgrid::s4u::Activity::cancel
2110 .. doxygenfunction:: simgrid::s4u::Activity::test
2111 .. doxygenfunction:: simgrid::s4u::Activity::wait
2112 .. doxygenfunction:: simgrid::s4u::Activity::wait_for
2113 .. doxygenfunction:: simgrid::s4u::Activity::wait_until(double time_limit)
2114 .. doxygenfunction:: simgrid::s4u::Activity::vetoable_start()
2116 Suspending and resuming an activity
2117 -----------------------------------
2123 .. doxygenfunction:: simgrid::s4u::Activity::suspend
2124 .. doxygenfunction:: simgrid::s4u::Activity::resume
2125 .. doxygenfunction:: simgrid::s4u::Activity::is_suspended
2134 .. doxygenfunction:: simgrid::s4u::Activity::on_completion_cb
2135 .. doxygenfunction:: simgrid::s4u::Activity::on_suspended_cb
2136 .. doxygenfunction:: simgrid::s4u::Activity::on_resumed_cb
2148 .. doxygenclass:: simgrid::s4u::Comm
2150 .. group-tab:: Python
2152 .. autoclass:: simgrid.Comm
2163 #include <simgrid/s4u/Comm.hpp>
2165 .. doxygentypedef:: CommPtr
2167 .. group-tab:: Python
2171 from simgrid import Comm
2177 #include <simgrid/comm.h>
2179 .. doxygentypedef:: sg_comm_t
2188 .. doxygenfunction:: simgrid::s4u::Comm::get_dst_data_size() const
2189 .. doxygenfunction:: simgrid::s4u::Comm::get_mailbox() const
2190 .. doxygenfunction:: simgrid::s4u::Comm::get_sender() const
2191 .. doxygenfunction:: simgrid::s4u::Comm::set_dst_data(void **buff)
2192 .. doxygenfunction:: simgrid::s4u::Comm::set_dst_data(void **buff, size_t size)
2193 .. doxygenfunction:: simgrid::s4u::Comm::detach()
2194 .. doxygenfunction:: simgrid::s4u::Comm::detach(const std::function<void(void*)>& clean_function)
2195 .. doxygenfunction:: simgrid::s4u::Comm::set_payload_size(uint64_t bytes)
2196 .. doxygenfunction:: simgrid::s4u::Comm::set_rate(double rate)
2197 .. doxygenfunction:: simgrid::s4u::Comm::set_src_data(void *buff)
2198 .. doxygenfunction:: simgrid::s4u::Comm::set_src_data(void *buff, size_t size)
2199 .. doxygenfunction:: simgrid::s4u::Comm::set_src_data_size(size_t size)
2201 .. group-tab:: Python
2203 .. autoattribute:: simgrid.Comm.dst_data_size
2204 .. autoattribute:: simgrid.Comm.mailbox
2205 .. autoattribute:: simgrid.Comm.sender
2206 .. autoattribute:: simgrid.Comm.state_str
2207 .. automethod:: simgrid.Comm.detach
2208 .. automethod:: simgrid.Comm.set_payload_size
2209 .. automethod:: simgrid.Comm.set_rate
2214 Most communications are created using :ref:`s4u_mailbox`, but you can
2215 also start direct communications as shown below.
2221 .. doxygenfunction:: simgrid::s4u::Comm::sendto
2222 .. doxygenfunction:: simgrid::s4u::Comm::sendto_init()
2223 .. doxygenfunction:: simgrid::s4u::Comm::sendto_init(Host *from, Host *to)
2224 .. doxygenfunction:: simgrid::s4u::Comm::sendto_async
2226 .. doxygenfunction:: simgrid::s4u::Comm::cancel
2227 .. doxygenfunction:: simgrid::s4u::Comm::start
2228 .. doxygenfunction:: simgrid::s4u::Comm::test
2229 .. doxygenfunction:: simgrid::s4u::Comm::test_any(const std::vector< CommPtr >& comms)
2230 .. doxygenfunction:: simgrid::s4u::Comm::wait
2231 .. doxygenfunction:: simgrid::s4u::Comm::wait_all(const std::vector< CommPtr >& comms)
2232 .. doxygenfunction:: simgrid::s4u::Comm::wait_all_for(const std::vector< CommPtr >& comms, double timeout)
2233 .. doxygenfunction:: simgrid::s4u::Comm::wait_any(const std::vector< CommPtr >& comms)
2234 .. doxygenfunction:: simgrid::s4u::Comm::wait_any_for(const std::vector< CommPtr >& comms, double timeout)
2235 .. doxygenfunction:: simgrid::s4u::Comm::wait_for
2236 .. doxygenfunction:: simgrid::s4u::Comm::wait_until
2238 .. group-tab:: Python
2240 .. automethod:: simgrid.Comm.sendto
2241 .. automethod:: simgrid.Comm.sendto_init
2242 .. automethod:: simgrid.Comm.sendto_async
2244 .. automethod:: simgrid.Comm.cancel
2245 .. automethod:: simgrid.Comm.start
2246 .. automethod:: simgrid.Comm.test
2247 .. automethod:: simgrid.Comm.test_any
2248 .. automethod:: simgrid.Comm.wait
2249 .. automethod:: simgrid.Comm.wait_for
2250 .. automethod:: simgrid.Comm.wait_all
2251 .. automethod:: simgrid.Comm.wait_all_for
2252 .. automethod:: simgrid.Comm.wait_any
2253 .. automethod:: simgrid.Comm.wait_any_for
2254 .. automethod:: simgrid.Comm.wait_until
2258 .. doxygenfunction:: sg_comm_test
2259 .. doxygenfunction:: sg_comm_wait
2260 .. doxygenfunction:: sg_comm_wait_all
2261 .. doxygenfunction:: sg_comm_wait_any
2270 .. doxygenfunction:: simgrid::s4u::Comm::on_start_cb
2271 .. doxygenfunction:: simgrid::s4u::Comm::on_completion_cb
2272 .. doxygenfunction:: simgrid::s4u::Comm::on_recv_cb
2273 .. doxygenfunction:: simgrid::s4u::Comm::on_send_cb
2285 .. doxygenclass:: simgrid::s4u::Exec
2287 .. group-tab:: Python
2289 .. autoclass:: simgrid.Exec
2300 #include <simgrid/s4u/Exec.hpp>
2302 .. doxygentypedef:: ExecPtr
2304 .. group-tab:: Python
2308 from simgrid import Exec
2314 #include <simgrid/exec.h>
2316 .. doxygentypedef:: sg_exec_t
2317 .. doxygentypedef:: const_sg_exec_t
2326 .. doxygenfunction:: simgrid::s4u::Exec::get_cost() const
2327 .. doxygenfunction:: simgrid::s4u::Exec::get_finish_time() const
2328 .. doxygenfunction:: simgrid::s4u::Exec::get_host() const
2329 .. doxygenfunction:: simgrid::s4u::Exec::get_host_number() const
2330 .. doxygenfunction:: simgrid::s4u::Exec::get_remaining
2331 .. doxygenfunction:: simgrid::s4u::Exec::get_remaining_ratio
2332 .. doxygenfunction:: simgrid::s4u::Exec::get_start_time() const
2333 .. doxygenfunction:: simgrid::s4u::Exec::set_bound(double bound)
2334 .. doxygenfunction:: simgrid::s4u::Exec::set_host
2335 .. doxygenfunction:: simgrid::s4u::Exec::set_priority(double priority)
2337 .. group-tab:: Python
2339 .. autoattribute:: simgrid.Exec.host
2340 .. autoattribute:: simgrid.Exec.remaining
2341 .. autoattribute:: simgrid.Exec.remaining_ratio
2345 .. doxygenfunction:: sg_exec_set_bound(sg_exec_t exec, double bound)
2346 .. doxygenfunction:: sg_exec_get_name(const_sg_exec_t exec)
2347 .. doxygenfunction:: sg_exec_set_name(sg_exec_t exec, const char* name)
2348 .. doxygenfunction:: sg_exec_set_host(sg_exec_t exec, sg_host_t new_host)
2349 .. doxygenfunction:: sg_exec_get_remaining(const_sg_exec_t exec)
2350 .. doxygenfunction:: sg_exec_get_remaining_ratio(const_sg_exec_t exec)
2359 .. doxygenfunction:: simgrid::s4u::Exec::cancel
2360 .. doxygenfunction:: simgrid::s4u::Exec::start
2361 .. doxygenfunction:: simgrid::s4u::Exec::test
2362 .. doxygenfunction:: simgrid::s4u::Exec::wait
2363 .. doxygenfunction:: simgrid::s4u::Exec::wait_any(const std::vector< ExecPtr >& execs)
2364 .. doxygenfunction:: simgrid::s4u::Exec::wait_any_for(const std::vector< ExecPtr >& execs, double timeout)
2365 .. doxygenfunction:: simgrid::s4u::Exec::wait_for
2367 .. group-tab:: Python
2369 .. automethod:: simgrid.Exec.cancel
2370 .. automethod:: simgrid.Exec.start
2371 .. automethod:: simgrid.Exec.test
2372 .. automethod:: simgrid.Exec.wait
2376 .. doxygenfunction:: sg_exec_start(sg_exec_t exec)
2377 .. doxygenfunction:: sg_exec_cancel(sg_exec_t exec);
2378 .. doxygenfunction:: sg_exec_test(sg_exec_t exec);
2379 .. doxygenfunction:: sg_exec_wait(sg_exec_t exec);
2380 .. doxygenfunction:: sg_exec_wait_for(sg_exec_t exec, double timeout);
2381 .. doxygenfunction:: sg_exec_wait_any_for(sg_exec_t* execs, size_t count, double timeout);
2382 .. doxygenfunction:: sg_exec_wait_any(sg_exec_t* execs, size_t count);
2391 .. doxygenfunction:: simgrid::s4u::Exec::on_start_cb
2392 .. doxygenfunction:: simgrid::s4u::Exec::on_completion_cb
2404 .. doxygenclass:: simgrid::s4u::Io
2406 .. group-tab:: Python
2408 .. autoclass:: simgrid.Io
2419 #include <simgrid/s4u/Io.hpp>
2421 .. doxygentypedef:: IoPtr
2430 .. doxygenfunction:: simgrid::s4u::Io::get_performed_ioops() const
2431 .. doxygenfunction:: simgrid::s4u::Io::get_remaining
2440 .. doxygenfunction:: simgrid::s4u::Io::cancel
2441 .. doxygenfunction:: simgrid::s4u::Io::start
2442 .. doxygenfunction:: simgrid::s4u::Io::test
2443 .. doxygenfunction:: simgrid::s4u::Io::wait
2444 .. doxygenfunction:: simgrid::s4u::Io::wait_for
2445 .. doxygenfunction:: simgrid::s4u::Io::wait_any(const std::vector<IoPtr> &ios)
2446 .. doxygenfunction:: simgrid::s4u::Io::wait_any_for(const std::vector<IoPtr> &ios, double timeout)
2448 .. group-tab:: Python
2450 .. automethod:: simgrid.Io.test
2451 .. automethod:: simgrid.Io.wait
2452 .. automethod:: simgrid.Io.wait_any_for
2453 .. automethod:: simgrid.Io.wait_any
2462 .. doxygenfunction:: simgrid::s4u::Io::on_start_cb
2463 .. doxygenfunction:: simgrid::s4u::Io::on_completion_cb
2465 .. _API_s4u_Synchronizations:
2467 =======================
2468 Synchronization Objects
2469 =======================
2481 .. doxygenclass:: simgrid::s4u::Mutex
2483 .. group-tab:: Python
2485 .. autoclass:: simgrid.Mutex
2496 #include <simgrid/s4u/Mutex.hpp>
2498 .. doxygentypedef:: MutexPtr
2500 .. doxygenfunction:: simgrid::s4u::Mutex::create()
2502 .. group-tab:: Python
2504 .. code-block:: Python
2506 from simgrid import Mutex
2509 # Use a context manager to acquire and automatically release the mutex
2510 # when leaving the scope.
2512 # Access shared resource ...
2515 .. automethod:: simgrid.Mutex.__init__
2521 #include <simgrid/mutex.h>
2523 .. doxygentypedef:: sg_mutex_t
2524 .. cpp:type:: const s4u_Mutex* const_sg_mutex_t
2526 Pointer to a constant mutex object.
2528 .. doxygenfunction:: sg_mutex_init()
2529 .. doxygenfunction:: sg_mutex_destroy(const_sg_mutex_t mutex)
2538 .. doxygenfunction:: simgrid::s4u::Mutex::lock()
2539 .. doxygenfunction:: simgrid::s4u::Mutex::try_lock()
2540 .. doxygenfunction:: simgrid::s4u::Mutex::unlock()
2542 .. group-tab:: Python
2544 .. automethod:: simgrid.Mutex.lock
2545 .. automethod:: simgrid.Mutex.try_lock
2546 .. automethod:: simgrid.Mutex.unlock
2550 .. doxygenfunction:: sg_mutex_lock(sg_mutex_t mutex)
2551 .. doxygenfunction:: sg_mutex_try_lock(sg_mutex_t mutex)
2552 .. doxygenfunction:: sg_mutex_unlock(sg_mutex_t mutex)
2554 .. _API_s4u_Barrier:
2564 .. doxygenclass:: simgrid::s4u::Barrier
2566 .. group-tab:: Python
2568 .. autoclass:: simgrid.Barrier
2576 #include <simgrid/s4u/Barrier.hpp>
2578 .. doxygentypedef:: BarrierPtr
2580 .. doxygenfunction:: simgrid::s4u::Barrier::create(unsigned int expected_actors)
2581 .. doxygenfunction:: simgrid::s4u::Barrier::wait()
2583 .. group-tab:: Python
2585 .. code-block:: Python
2587 from simgrid import Barrier
2588 barrier = Barrier(2)
2590 .. automethod:: simgrid.Barrier.__init__
2591 .. automethod:: simgrid.Barrier.wait
2597 #include <simgrid/barrier.hpp>
2599 .. doxygentypedef:: sg_bar_t
2601 .. doxygenfunction:: sg_barrier_init(unsigned int count)
2602 .. doxygenfunction:: sg_barrier_destroy(sg_bar_t bar)
2603 .. doxygenfunction:: sg_barrier_wait(sg_bar_t bar)
2606 .. _API_s4u_ConditionVariable:
2608 ==========================
2609 Condition variable
2610 ==========================
2612 .. doxygenclass:: simgrid::s4u::ConditionVariable
2623 #include <simgrid/s4u/ConditionVariable.hpp>
2625 .. doxygentypedef:: ConditionVariablePtr
2627 .. doxygenfunction:: simgrid::s4u::ConditionVariable::create()
2633 #include <simgrid/cond.h>
2635 .. doxygentypedef:: sg_cond_t
2636 .. doxygentypedef:: const_sg_cond_t
2637 .. doxygenfunction:: sg_cond_init
2638 .. doxygenfunction:: sg_cond_destroy
2640 Waiting and notifying
2641 ---------------------
2647 .. doxygenfunction:: simgrid::s4u::ConditionVariable::notify_all()
2648 .. doxygenfunction:: simgrid::s4u::ConditionVariable::notify_one()
2649 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(s4u::MutexPtr lock)
2650 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(const std::unique_lock< s4u::Mutex > &lock)
2651 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait(const std::unique_lock< Mutex > &lock, P pred)
2652 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, double duration)
2653 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, double duration, P pred)
2654 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, std::chrono::duration< Rep, Period > duration)
2655 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_for(const std::unique_lock< s4u::Mutex > &lock, std::chrono::duration< Rep, Period > duration, P pred)
2656 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, const SimulationTimePoint< Duration > &timeout_time)
2657 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, const SimulationTimePoint< Duration > &timeout_time, P pred)
2658 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, double timeout_time)
2659 .. doxygenfunction:: simgrid::s4u::ConditionVariable::wait_until(const std::unique_lock< s4u::Mutex > &lock, double timeout_time, P pred)
2663 .. doxygenfunction:: sg_cond_notify_all
2664 .. doxygenfunction:: sg_cond_notify_one
2665 .. doxygenfunction:: sg_cond_wait
2666 .. doxygenfunction:: sg_cond_wait_for
2668 .. _API_s4u_Semaphore:
2678 .. doxygenclass:: simgrid::s4u::Semaphore
2680 .. group-tab:: Python
2682 .. autoclass:: simgrid.Semaphore
2693 #include <simgrid/s4u/Semaphore.hpp>
2695 .. doxygentypedef:: SemaphorePtr
2696 .. doxygenfunction:: simgrid::s4u::Semaphore::create(unsigned int initial_capacity)
2698 .. group-tab:: Python
2700 .. code-block:: Python
2702 from simgrid import Semaphore
2703 semaphore = Semaphore(1)
2704 # Automatically acquire the semaphore, and release it after leaving the scope.
2706 # Do something with the shared resource
2709 .. automethod:: simgrid.Semaphore.__init__
2715 #include <simgrid/semaphore.h>
2717 .. doxygentypedef:: sg_sem_t
2718 .. cpp:type:: const s4u_Semaphore* const_sg_sem_t
2720 Pointer to a constant semaphore object.
2722 .. doxygenfunction:: sg_sem_init(int initial_value)
2723 .. doxygenfunction:: sg_sem_destroy(const_sg_sem_t sem)
2732 .. doxygenfunction:: simgrid::s4u::Semaphore::acquire()
2733 .. doxygenfunction:: simgrid::s4u::Semaphore::acquire_timeout(double timeout)
2734 .. doxygenfunction:: simgrid::s4u::Semaphore::get_capacity() const
2735 .. doxygenfunction:: simgrid::s4u::Semaphore::release()
2736 .. doxygenfunction:: simgrid::s4u::Semaphore::would_block() const
2738 .. group-tab:: Python
2740 .. automethod:: simgrid.Semaphore.acquire
2741 .. automethod:: simgrid.Semaphore.acquire_timeout
2742 .. autoattribute:: simgrid.Semaphore.capacity
2743 .. automethod:: simgrid.Semaphore.release
2744 .. autoattribute:: simgrid.Semaphore.would_block
2748 .. doxygenfunction:: sg_sem_acquire(sg_sem_t sem)
2749 .. doxygenfunction:: sg_sem_acquire_timeout(sg_sem_t sem, double timeout)
2750 .. doxygenfunction:: sg_sem_get_capacity(const_sg_sem_t sem)
2751 .. doxygenfunction:: sg_sem_release(sg_sem_t sem)
2752 .. doxygenfunction:: sg_sem_would_block(const_sg_sem_t sem)