User Tools

Site Tools


Description of Steereo


Steereo is a framework for Computational Steering. With Steereo you should be able to make your existing simulation (provided that it is written in C/C++ or Fortran 90+) steerable. Please note, that this is an FRAMEWORK, not a complete Steering Environment.


  • Is written in C++, but has a wrapper for Fortran 90+.
  • also supports the development of client application, that will steer simulations.
  • allows for human-interactive steering (a person monitors and manipulates parameters of the computation while it is running) as well as algorithmic steering (the computer makes decisions by monitoring runtime statistics and other information sources such as history files).
  • simulation and client can run on different machines (they should of course have some means to communicate with each other). Communication is per default done via POSIX sockets, but the framework is extendable, so other communication types can be implemented.
  • multiple clients can connect to a simulation, as well as one client can connect to multiple simulations.
  • the steering capabilities of a simulation are determined by commands, which can be written to accustom the needs.
  • basic support of parallel steering.

How does it work

A specific example can be found in the Howto. Here I will explain the mode of operation.
Usually we have a simulation and several clients. The simulation will be enhanced with an SimSteering instance which accepts the requests from the client, that will have an ClientSteering instance for connecting to a simulation, making requests and handling the responses.
The workflow seems simple enough - the client sends requests and the simulation side will execute them and send some response (at least the notification, that the request was handled), see figure 1 (left). However the requests aren't processed immediately in the simulation, but rather stored in a queue and executed at predefined points in the simulation (you have to determine when this queue should be processed in your code), see figure 2(right). So it is a soft real-time system, not a hard one.


Parallel Steering

At the moment parallel steering just works using only the root nodes (rank 0) of both simulation and client for communication (see figure below). Also not much support in the framework itself exists, so you have to adjust your commands in the way, that all data to be sent is collected at rank 0.
Parallel Steering 1
For parallel steering clients it is also possible to take advantage of the parallelity: every process (or small process groups) can directly steer a certain process partition of the simulation, as seen in the next figure.
Parallel Steering 2

steereo/description.txt · Last modified: 2010/11/05 12:24 by hpcdjenz