-
Notifications
You must be signed in to change notification settings - Fork 12
Google Summer of Code: 2020
Potential mentors: Gabriel Wainer, Damian Vicino, Cristina Ruiz, Laouen Belloli
The Cadmium Simulator started to be developed in 2015. It provides support for low memory footprint and high performance, using modern C++ constructions. The simulator separates concerns between Model and Simulation, allowing choosing different ways to run the same model. For example, using the parallel engine, it permits to run in multicore computers, and a single-threaded version is well suited for running in embedded systems. We prioritize early detection of problems by doing model validation at compile time.
Initially, the project resolved memory allocations at compile time by policy based allocations for submodels. The coupling mechanism was tied to tuples on the implementation. This provided small iteration loops for model developers where they could quickly detect inconsistencies as soon as they built a model. However, tuples and policy resolution efficiency suffers when moving to large scale models and we had to implement a pointer-based approach for implementing large models (an example of that was a thousands of molecules biological model, and models for internet components with a large number of nodes). Currently, creating a new coupled model can be created by using a "coupled" or a "dynamic-coupled" construction, which leaves the user the responsability of chose wisely which option to choos. We need to implement a decission mechanism and unify both approaches. The simplest way will be to use always the dynamic couple path of the code for execution, but partially moving the validations of the model to compile time, which requires many TMP and macros definitions.
In Cadmium, we have only the ability to define coupled models in C++ code. However, defining such code is prone to error and complex for new users. We want to build a tool that will read YAML and SVG files or XML files with model definitions and generate the code to build the complete experiment.
We have repositories with dozens of CD++ models, we will like to migrate those models to Cadmium. This project can be an exploratory work on developing equivalent version of a few models to better understand the scope, or trying to automatize the migration of some group of models with similar specifications.
We defined a synthetic Simulation benchmark. This benchmark is used to profile the performance of discrete-event simulations. It has been run as an independent model. The idea is to integrate these benchmarks and combined with automated regression testing so that every time the tool is updated, one can check performance in automated fashion and decide if the new algorithms have improved the quality of the simulator.
The simulation engine runs large models organized hierarchically. Adding a cache at intermediate levels in the hierarchy can improve performance by reducing computation of submodels at runtime. The idea is to define the cache data structures, replacement algorithms, and conduct performance analysis of the resulting implementation.
The models can be defined formally with a graphical notation which is a simple timed graph. The idea is to start from an SVG file (or other standard graphical notation) and convert the graph into an intermediate representation (in XML or JSON, for instance) which is later used to automatically generate C++ code to simulate the system.