SimGrid: Create a new API

SimGrid 3.10 Versatile Simulation of Distributed Systems

- Home page
- Online documentation
- Dev's Corner

All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Variables
Create a new API
SURF

How to build a new API on top of SURF. More...

## Variables
xbt_lib_t | host_lib
| A library containing all known workstations.
xbt_lib_t | link_lib
| A library containing all known links.

## Detailed Description

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 surf_workstation_resource->common_public and 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 host_lib and link_lib. Some functions in 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 surf_workstation_resource->extension_public->execute() to schedule a computation task on a workstation, or surf_workstation_resource->extension_public->communicate() to schedule a communication task between two workstations. You can also create parallel task with 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 execute(), communicate() or 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 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 MSG and 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.