Architecture Overview

The NRP Core framework (NRP-core) allows NRP users to design and execute modular simulations where multiple modules run concurrently, e.g., in separate processes, in separate containers, on separate machines, or any combination thereof. These modules synchronize with each other at different frequencies to create a single, coherent simulation. The architecture components that run these “simulations modules” will hereafter be referred to as Engines.

A typical experiment in NRP-core, therefore, consists of multiple engine processes that synchronize with a central Simulation Loop process at predetermined frequencies defined by the user. These frequencies (expressed in simulation time) determine the engine time step, which defines the duration (also in simulation time) for which that engine carries out a simulation independently (i.e. without communication to the central process). Note that: 1) the engine time step can be different for each engine and is set in the experiment configuration; 2) that the internal time step of the simulator at the heart of a given engine is independent of the engine time step (the latter should nevertheless be a multiple of this internal time step).

For more explanations, this page contains a more detailed description of the synchronization model.

Additionally, NRP-core offers an asynchronous mode which allows to interact with external simulation modules or other processes asynchronously. This asynchronous mode is particularly useful for soft real-time applications. It is implemented by the component referred to as EventLoop, which is described in details in this page.

The inclusion of additional Engines into NRP-core experiments is managed by a system of Engine plugins, which allows for easy extensions of the set of available simulators. Users also can choose to run Engines either in separate processes, containers or machines. The spawning of Engines is controlled by Process Launchers and the actual spawning behavior ( separate processes, containers or machines) is implemented by Launch Commands.

Please also note that, while NRP-core is - quite literally - the beating heart of the NRP, the so-called NRPCoreSim is the standalone application based on NRP-core. This standalone application can execute experiments through the same lifecycle process, but without the additional functionalities of the NRP (e.g. front end, etc.). This page contains more information about NRPCoreSim.

The main elements and components participating in the NRP-core architecture are described here.

For information about the different workflows that are supported by NRP-core, please consult the following page.

Related Pages: