ROOT-Sim core

The ROme OpTimistic Simulation Framework

View project on GitHub

The ROme OpTimistic Simulator (ROOT-Sim) 3.0.0

Build Status codecov.io doc coverage GitHub issues GitHub

Brought to you by the High Performance and Dependable Computing Systems (HPDCS) Research Group


The ROme OpTimistic Simulator is an x86-64 Open Source, distributed multithreaded parallel simulation library developed using C/POSIX technology. It transparently supports all the mechanisms associated with parallelization and distribution of workload across the nodes (e.g., mapping of simulation objects on different kernel instances) and optimistic synchronization (e.g., state recoverability).
Distributed simulations rely on MPI3. In particular, global synchronization across the different nodes relies on asynchronous MPI primitives, for increased efficiency.

The programming model supported by ROOT-Sim allows the simulation model developer to use a simple application-callback function named ProcessEvent() as the event handler, whose parameters determine which simulation object is currently taking control for processing its next event, and where the state of this object is located in memory. An object is a data structure, whose state can be scattered on dynamically allocated memory chunks, hence the memory address passed to the callback locates a top level data structure implementing the object state-layout.

ROOT-Sim’s development started as a research project late back in 1987, and is currently maintained by the High Performance and Dependable Computing Systems group, a joint research group between Sapienza, University of Rome and University of Rome “Tor Vergata”.

Getting Started

To obtain the ROOT-Sim core library, and start developing low-level simulation models, refer to the Getting Started page of this website.

ROOT-Sim History

ROOT-Sim started as a research project to study distributed synchronization back in 1987.

Since then, the project has evolved significantly and it has allowed to experiment in many research directions. In the early days, the goal was to devise innovative synchronization schemes for distributed HPC environments, specifically to reduce the cost associated with the rollback operation. At the time, the name of the project was SimCore.

In the 90’s, a lot of research has been carried out to simplify the programming API, synthesizing a very-reduced API which allows to implement any simulation model in a mostly-sequential way, without the need to take into account all the idiosyncrasies related to speculative executions. The name ROOT-Sim appeared at this time.

In the 2000’s, the research has been focused on the optimization of the checkpointing schemes, introducing transparent support to use any kind of POSIX function to manage memory, demanding from the runtime environment the burden to keep everythign synchronized. In the last years, the focus has been towards programming transparency: new features have been added which allow to implement models which are portable across some kind of heterogeneous architectures, taking into account e.g. NUMA systems and clusters composed of different machines.

The last version, in the 2020’s, strives to architect a modern simulation framework. The core has been mostly rewritten from scratch, to simplify the implementation of the algorithms, and to reduce the amount of “optional” subsystems directly implemented into the core. At the same time, a modular SDK has been developed, allowing to build on top of the core multiple specialized runtime environments, possibly altering some algorithms in the core to suit the special needs of the domain.