-
Notifications
You must be signed in to change notification settings - Fork 13
Google Summer of Code: 2020
To any potential mentors, please add your projects here
Potential mentors: Gabriel Wainer, Damian Vicino, Cristina Ruiz, Laouen Belloli
Cadmium Simulator started development in 2015. It provides support for low memory footprint and highly performant modern C++ simulations. The simulator clearly separates concerns between Model and Simulation, allowing choosing different ways to run same model. For example, using the parallel executor it permits to keep busy large servers, but the single-threaded one is better suited for running in embed systems when interfacing with robots. The formalisms for writing models can also be chose, for example allowing PDEVS or classic DEVS or others in future iterations. We prioritize early detection of problems by doing model validation at compile time in many cases.
Initially, the project was resolving all 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 build the 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 models of thousand of molecules or internet components. Currently, creating a new coupled model can be created by using a "couple" or a "dynamic-couple" which leaves the user the responsability of chose wisely. We need to implement a deciding mechanism and unify both approaches. The simples 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 CD++, behavioral models were defined in C++, but the coupling between them for a particular experiment was not. In Cadmium, we have only the ability to define coupled models in C++ code. However, the code for this models is not super interesting. We would like to have a tool (could be in Python) that will read YAML files with models definitions and generate the code to build the complete experiment.
In CD++, we had Eclipse plugins to visualize the structure of the model, and different tools to output video and graphic visualization of simulation outputs. The tooling around Cadmium is still small, we have a diagram tool that exports the structure. We would like to add integration to Blender and Eclipse for visualization.
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.