Describing your Application
***************************
Every SimGrid simulation entails a distributed application, that
virtually executes on the simulated platform. This application can
be either an existing MPI program (if you use the SMPI interface), or
a program specifically written to execute within SimGrid, using one of
the dedicated APIs.
.. _S4U_doc:
The S4U Interface
=================
The S4U interface (SimGrid for you) mixes the full power of SimGrid
with the full power of C++. This is the prefered interface to describe
abstract algorithms in the domains of Cloud, P2P, HPC, IoT and similar
settings.
Main Concepts
-------------
A typical SimGrid simulation is composed of several |Actors|_, that
execute user-provided functions. The actors have to explicitly use the
S4U interface to express their computation, communication, disk usage
and other |Activities|_, so that they get reflected within the
simulator. These activities take place on resources: |Hosts|_,
|Links|_, |Storages|_ and |VirtualMachines|_. SimGrid predicts the
time taken by each activity and orchestrates accordingly the actors
waiting for the completion of these activities.
Each actor executes a user-provided function on a simulated |Host|_,
with which it can interact using the :ref:`simgrid::s4u::this_actor
` namespace. **Communications**
are not directly sent to actors, but posted onto a |Mailbox|_ that
serve as rendez-vous point between communicating actors. Actors can
also interact through **classical synchronization mechanisms** such as
|Barrier|_, |Semaphore|_, |Mutex|_ and |ConditionVariable|_.
.. todo:: Add NetZone
.. |Actors| replace:: **Actors**
.. _Actors: api/classsimgrid_1_1s4u_1_1Actor.html
.. |Activities| replace:: **Activities**
.. _Activities: api/classsimgrid_1_1s4u_1_1Activity.html
.. |Hosts| replace:: **Hosts**
.. _Hosts: api/classsimgrid_1_1s4u_1_1Host.html
.. |Links| replace:: **Links**
.. _Links: api/classsimgrid_1_1s4u_1_1Link.html
.. |Storages| replace:: **Storages**
.. _Storages: api/classsimgrid_1_1s4u_1_1Storage.html
.. |VirtualMachines| replace:: **VirtualMachines**
.. _VirtualMachines: api/classsimgrid_1_1s4u_1_1VirtualMachine.html
.. |Host| replace:: **Host**
.. _Host: api/classsimgrid_1_1s4u_1_1Host.html
.. |Mailbox| replace:: **Mailbox**
.. _Mailbox: api/classsimgrid_1_1s4u_1_1Mailbox.html
.. |Barrier| replace:: **Barrier**
.. _Barrier: api/classsimgrid_1_1s4u_1_1Barrier.html
.. |ConditionVariable| replace:: **ConditionVariable**
.. _ConditionVariable: api/classsimgrid_1_1s4u_1_1ConditionVariable.html
.. |Mutex| replace:: **Mutex**
.. _Mutex: api/classsimgrid_1_1s4u_1_1Mutex.html
.. include:: app_smpi.rst
.. include:: app_legacy.rst