Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Initial commit for split doc (in order to let Pierre play with it). Please do not...
[simgrid.git] / doc / ref_guide / doxygen / module-surf.doc
diff --git a/doc/ref_guide/doxygen/module-surf.doc b/doc/ref_guide/doxygen/module-surf.doc
new file mode 100644 (file)
index 0000000..a756aef
--- /dev/null
@@ -0,0 +1,85 @@
+/** \addtogroup SURF_API
+
+  \section SURF_doc Surf documentation
+   - \ref SURF_simulation
+   - \ref SURF_actions
+   - \ref SURF_resources
+   - \ref SURF_build_api
+
+*/
+
+/** \defgroup SURF_simulation Simulation
+    \ingroup SURF_API
+    \brief Functions for creating the environment and launching the simulation
+
+    This section describes the functions for initialising SURF, performing
+    the simulation and exiting SURF.
+*/
+
+/** \defgroup SURF_actions SURF actions
+    \ingroup SURF_API
+    \brief This section describes the different datatypes and operations related to the actions in SURF.
+
+    \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Actions" --> \endhtmlonly
+*/
+
+/** \defgroup SURF_resources SURF resources
+    \ingroup SURF_API
+    \brief This section describes the different datatypes and operations related to the resources in SURF.
+
+    \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Resources" --> \endhtmlonly
+*/
+
+/** \defgroup SURF_build_api Create a new API
+    \ingroup SURF_API
+    \brief How to build a new API on top of SURF
+
+    SURF provides the functionnalities to simulate the platform. There are two main datatypes in SURF:
+    the actions and the resources. Several types of resources exist:
+       - the workstation resource,
+       - the network resource,
+       - the CPU resource,
+       - the timer resource.
+
+    The implentation of these resources depends on the platform model you choose. There are several
+    platform models. You can select your model by calling surf_workstation_resource_init_CLM03()
+    or surf_workstation_resource_init_KCCFLN05(). See the documentation of these functions to have
+    more details about the models. Remember that the model KCCFLN05 is an implementation of both the
+    workstation resource and the network.
+
+    Typically, your functions should call the SURF functions provided by the structures
+    \a surf_workstation_resource->common_public and \a surf_workstation_resource->extension_public.
+    See surf_resource_public and surf_workstation_resource_extension_public to know the available functions.
+
+    To initialize SURF, call surf_init(). Then call surf_timer_resource_init() and
+    surf_workstation_resource_init_CLM03() or surf_workstation_resource_init_KCCFLN05()
+    to create the platform.
+
+    Then you can access the workstations and the network links with
+    the global variables \ref host_lib
+    and \ref link_lib. Some functions in \a surf_workstation_resource->extension_public can give
+    you some information about:
+       - a workstation: get_speed(), get_available_speed();
+       - a network link: get_link_name(), get_link_latency(), get_link_bandwith();
+       - a route: get_route(), get_route_size().
+
+    During the simulation, call \a surf_workstation_resource->extension_public->execute() to schedule a
+    computation task on a workstation, or \a surf_workstation_resource->extension_public->communicate()
+    to schedule a communication task between two workstations. You can also create parallel task
+    with \a surf_workstation_resource->extension_public->execute_parallel_task(). These functions return
+    a new action that represents the task you have just created.
+
+    To execute the actions created with \a execute(), \a communicate() or \a execute_parallel_task(), call
+    surf_solve(). The function surf_solve() is where the simulation takes place. It returns the
+    time elapsed to execute the actions. You can know what actions have changed their state thanks
+    to the states sets. For example, if your want to know what actions are finished,
+    extract them from \a surf_workstation_resource->common_public->states.done_action_set.
+    Depending on these results, you can schedule other tasks and call surf_solve() again.
+
+    When the simulation is over, just call surf_exit() to clean the memory.
+
+    Have a look at the implementation of \ref MSG_API "MSG" and \ref SD_API "Simdag" to see how these module
+    interact with SURF. But if you want to create a new API on top of SURF,
+    we strongly recommand you to contact us before anyway.
+
+*/