NEST main@caf0ae8
 
Loading...
Searching...
No Matches
nest::RecordingBackendSIONlib Class Reference

#include <recording_backend_sionlib.h>

Inheritance diagram for nest::RecordingBackendSIONlib:
[legend]
Collaboration diagram for nest::RecordingBackendSIONlib:
[legend]

Classes

struct  DeviceEntry
 
struct  DeviceInfo
 
struct  FileEntry
 
struct  Parameters_
 
class  SIONBuffer
 

Public Member Functions

 RecordingBackendSIONlib ()
 
 ~RecordingBackendSIONlib () throw ()
 
void initialize () override
 
void finalize () override
 
void enroll (const RecordingDevice &device, const Dictionary &params) override
 Enroll a RecordingDevice with the RecordingBackend.
 
void disenroll (const RecordingDevice &device) override
 Disenroll a RecordingDevice from the RecordingBackend.
 
void set_value_names (const RecordingDevice &device, const std::vector< std::string > &double_value_names, const std::vector< std::string > &long_value_names) override
 To make the names of recorded quantities known to the RecordingBackend, the vectors double_value_names and long_value_names can be set appropriately.
 
void prepare () override
 Prepare the backend at begin of the NEST Simulate function.
 
void cleanup () override
 Clean up the backend at the end of a user level call to the NEST Simulate function.
 
void write (const RecordingDevice &device, const Event &event, const std::vector< double > &double_values, const std::vector< long > &long_values) override
 Write the data from the event to the backend specific channel together with the values given.
 
void set_status (const Dictionary &) override
 Set the status of the recording backend using the key-value pairs contained in the params dictionary.
 
void get_status (Dictionary &) const override
 Return the status of the recording backend by writing it to the given params dictionary.
 
void pre_run_hook () override
 Initialize global backend-specific data structures.
 
void post_run_hook () override
 Clean up the backend at the end of a Run.
 
void post_step_hook () override
 Do work required at the end of each simulation step.
 
void check_device_status (const Dictionary &) const override
 Check if the given per-device properties are valid and usable by the backend.
 
void get_device_defaults (Dictionary &) const override
 Return the per-device defaults by writing it to the given params dictionary.
 
void get_device_status (const RecordingDevice &device, Dictionary &params_dictionary) const override
 Return the per-device status of the given recording device by writing it to the given params dictionary.
 
- Public Member Functions inherited from nest::RecordingBackend
 RecordingBackend ()
 
virtual ~RecordingBackend () throw ()
 

Static Public Attributes

static const unsigned int SIONLIB_REC_BACKEND_VERSION = 2
 
static const unsigned int DEV_NAME_BUFFERSIZE = 32
 
static const unsigned int DEV_LABEL_BUFFERSIZE = 32
 
static const unsigned int VALUE_NAME_BUFFERSIZE = 16
 
static const unsigned int NEST_VERSION_BUFFERSIZE = 128
 
- Static Public Attributes inherited from nest::RecordingBackend
static const std::vector< std::string > NO_DOUBLE_VALUE_NAMES
 
static const std::vector< std::string > NO_LONG_VALUE_NAMES
 
static const std::vector< double > NO_DOUBLE_VALUES
 
static const std::vector< long > NO_LONG_VALUES
 

Private Types

typedef std::vector< std::map< size_t, DeviceEntry > > device_map
 
typedef std::map< size_t, FileEntry > file_map
 

Private Member Functions

void open_files_ ()
 
void close_files_ ()
 
const std::string build_filename_ () const
 

Private Attributes

bool files_opened_
 
size_t num_enrolled_devices_
 
device_map devices_
 
file_map files_
 
std::string filename_
 
MPI_Comm local_comm_
 
double t_start_
 
Parameters_ P_
 

Member Typedef Documentation

◆ device_map

typedef std::vector< std::map< size_t, DeviceEntry > > nest::RecordingBackendSIONlib::device_map
private

◆ file_map

typedef std::map< size_t, FileEntry > nest::RecordingBackendSIONlib::file_map
private

Constructor & Destructor Documentation

◆ RecordingBackendSIONlib()

nest::RecordingBackendSIONlib::RecordingBackendSIONlib ( )

◆ ~RecordingBackendSIONlib()

nest::RecordingBackendSIONlib::~RecordingBackendSIONlib ( )
throw (
)

References cleanup().

Here is the call graph for this function:

Member Function Documentation

◆ build_filename_()

const std::string nest::RecordingBackendSIONlib::build_filename_ ( ) const
private

References nest::RecordingBackendSIONlib::Parameters_::filename_, nest::IOManager::get_data_path(), nest::IOManager::get_data_prefix(), nest::KernelManager::io_manager, nest::kernel(), and P_.

Referenced by open_files_().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_device_status()

void nest::RecordingBackendSIONlib::check_device_status ( const Dictionary &  params) const
overridevirtual

Check if the given per-device properties are valid and usable by the backend.

This function is used to validate properties when SetDefaults is called on a recording device. If the properties are found to be valid, they will be cached in the recording device and set for individual instances by means of the call to enroll from the device's set_initialized_() function. In case the properties are invalid, this function is expected to throw BadProperty.

Parameters
paramsthe parameter dictionary to validate
See also
get_device_defaults(), get_device_status()

Implements nest::RecordingBackend.

◆ cleanup()

void nest::RecordingBackendSIONlib::cleanup ( )
overridevirtual

Clean up the backend at the end of a user level call to the NEST Simulate function.

This function is called by SimulationManager::cleanup() and allows the backend to close open files or network connections or take similar action.

See also
prepare()

Implements nest::RecordingBackend.

References close_files_().

Referenced by ~RecordingBackendSIONlib().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ close_files_()

void nest::RecordingBackendSIONlib::close_files_ ( )
private

◆ disenroll()

void nest::RecordingBackendSIONlib::disenroll ( const RecordingDevice &  device)
overridevirtual

Disenroll a RecordingDevice from the RecordingBackend.

This function is considered to be the opposite of enroll() in the sense that it cancels the enrollment of a RecordingDevice from a RecordingBackend by deleting all device specific data. When setting a new recording backend for a recording device, this function is called for each backend the device is not enrolled with.

Parameters
devicethe RecordingDevice to be disenrolled
See also
enroll()

Implements nest::RecordingBackend.

References devices_, nest::Node::get_node_id(), and nest::Node::get_thread().

Here is the call graph for this function:

◆ enroll()

void nest::RecordingBackendSIONlib::enroll ( const RecordingDevice &  device,
const Dictionary &  params 
)
overridevirtual

Enroll a RecordingDevice with the RecordingBackend.

When this function is called by a RecordingDevice device, the RecordingBackend can set up per-device data structures and properties. Individual device instances can be identified using the thread and node_id of the device.

This function is called from the set_initialized_() function of the device and their set_status() function. The companion function set_value_names() is called from Node::pre_run_hook() and makes the names of values to be recorded known.

A backend needs to be able to cope with multiple calls to this function, as multiple calls to set_status() may occur on the device. For already enrolled devices this usually means that only the parameters in params have to be set, but no further actions are needed.

Each recording backend must ensure that enrollment (including all settings made by the user) is persistent over multiple calls to Prepare, while the enrollment of all devices should end with a call to finalize().

A common implementation of this function will create an entry in a thread-local map, associating the device's node ID with the device-specific backend properties and an output facility of some kind.

Parameters
devicethe RecordingDevice to be enrolled
paramsdevice-specific backend parameters
See also
set_value_names(), disenroll(), write(),

Implements nest::RecordingBackend.

References devices_, nest::RecordingDevice::get_label(), nest::Node::get_name(), nest::Node::get_node_id(), nest::Device::get_origin(), nest::Device::get_start(), nest::Time::get_steps(), nest::Device::get_stop(), nest::Node::get_thread(), nest::RecordingDevice::get_type(), nest::RecordingBackendSIONlib::DeviceEntry::info, nest::RecordingBackendSIONlib::DeviceInfo::label, nest::RecordingBackendSIONlib::DeviceInfo::name, nest::RecordingBackendSIONlib::DeviceInfo::node_id, num_enrolled_devices_, nest::RecordingBackendSIONlib::DeviceInfo::origin, nest::RecordingBackendSIONlib::DeviceInfo::t_start, nest::RecordingBackendSIONlib::DeviceInfo::t_stop, and nest::RecordingBackendSIONlib::DeviceInfo::type.

Here is the call graph for this function:

◆ finalize()

void nest::RecordingBackendSIONlib::finalize ( )
overridevirtual

◆ get_device_defaults()

void nest::RecordingBackendSIONlib::get_device_defaults ( Dictionary &  params) const
overridevirtual

Return the per-device defaults by writing it to the given params dictionary.

Parameters
paramsthe dictionary to add device-specific backend parameters to
See also
check_device_status(), get_device_status()

Implements nest::RecordingBackend.

◆ get_device_status()

void nest::RecordingBackendSIONlib::get_device_status ( const RecordingDevice &  device,
Dictionary &  params 
) const
overridevirtual

Return the per-device status of the given recording device by writing it to the given params dictionary.

Please note that a corresponding setter function does not exist. Device-specific backend parameters are given in the call to enroll.

Parameters
devicethe recording device for which the status is returned
paramsthe dictionary to add device-specific backend parameters to
See also
enroll(), check_device_status(), get_device_defaults()

Implements nest::RecordingBackend.

◆ get_status()

void nest::RecordingBackendSIONlib::get_status ( Dictionary &  params) const
overridevirtual

Return the status of the recording backend by writing it to the given params dictionary.

Parameters
paramsthe status of the recording backend
See also
set_status()

Implements nest::RecordingBackend.

References nest::names::filename(), filename_, nest::RecordingBackendSIONlib::Parameters_::get(), and P_.

Here is the call graph for this function:

◆ initialize()

void nest::RecordingBackendSIONlib::initialize ( )
overridevirtual

Implements nest::RecordingBackend.

References devices_, and nest::kernel().

Here is the call graph for this function:

◆ open_files_()

◆ post_run_hook()

void nest::RecordingBackendSIONlib::post_run_hook ( )
overridevirtual

Clean up the backend at the end of a Run.

This is called right before SimulationManager::run() terminates. It allows the backend to flush open files, write remaining data to the screen, or perform similar operations that make sure that the user has access to all data from the previous simulation run.

See also
pre_run_hook()

Implements nest::RecordingBackend.

◆ post_step_hook()

void nest::RecordingBackendSIONlib::post_step_hook ( )
overridevirtual

Do work required at the end of each simulation step.

This is called at the very end of each simulation step. It can for example be used to carry out writing to files in a synchronized way, all threads on all MPI processes performing it at the same time.

See also
pre_run_hook()

Implements nest::RecordingBackend.

References nest::RecordingBackendSIONlib::FileEntry::buffer, nest::RecordingBackendSIONlib::SIONBuffer::clear(), files_, files_opened_, nest::RecordingBackendSIONlib::SIONBuffer::get_size(), nest::VPManager::get_thread_id(), nest::kernel(), P_, nest::RecordingBackendSIONlib::SIONBuffer::read(), nest::RecordingBackendSIONlib::FileEntry::sid, nest::RecordingBackendSIONlib::Parameters_::sion_collective_, nest::VPManager::thread_to_vp(), and nest::KernelManager::vp_manager.

Here is the call graph for this function:

◆ pre_run_hook()

void nest::RecordingBackendSIONlib::pre_run_hook ( )
overridevirtual

Initialize global backend-specific data structures.

This function is called on each backend right at the very beginning of SimulationManager::run(). It can be used for initializations which have to be repeated at the beginning of every single call to run in a prepare-run-run-...-run-run-cleanup sequence.

See also
post_run_hook()

Implements nest::RecordingBackend.

◆ prepare()

void nest::RecordingBackendSIONlib::prepare ( )
overridevirtual

Prepare the backend at begin of the NEST Simulate function.

This function is called by KernelManager::prepare() and allows the backend to open files or establish network connections or take similar action.

See also
cleanup()

Implements nest::RecordingBackend.

References open_files_().

Here is the call graph for this function:

◆ set_status()

void nest::RecordingBackendSIONlib::set_status ( const Dictionary &  params)
overridevirtual

Set the status of the recording backend using the key-value pairs contained in the params dictionary.

Parameters
paramsthe status of the recording backend
See also
get_status()

Implements nest::RecordingBackend.

References P_, and nest::RecordingBackendSIONlib::Parameters_::set().

Here is the call graph for this function:

◆ set_value_names()

void nest::RecordingBackendSIONlib::set_value_names ( const RecordingDevice &  device,
const std::vector< std::string > &  double_value_names,
const std::vector< std::string > &  long_value_names 
)
overridevirtual

To make the names of recorded quantities known to the RecordingBackend, the vectors double_value_names and long_value_names can be set appropriately.

If no values of a certain type (or none at all) will be recorded by device, the constants NO_DOUBLE_VALUE_NAMES and NO_LONG_VALUE_NAMES can be used. Please note that the lengths of the value names vectors must correspond to the length of the data vectors written during calls to write(), although this is not enforced by the API.

Parameters
devicethe device to set the value names for
double_value_namesthe names for double values to be recorded
long_value_namesthe names for long values to be recorded
See also
enroll(), disenroll(), write(),

Implements nest::RecordingBackend.

References devices_, nest::RecordingBackendSIONlib::DeviceInfo::double_value_names, nest::Node::get_node_id(), nest::Node::get_thread(), and nest::RecordingBackendSIONlib::DeviceInfo::long_value_names.

Here is the call graph for this function:

◆ write()

void nest::RecordingBackendSIONlib::write ( const RecordingDevice &  device,
const Event &  event,
const std::vector< double > &  double_values,
const std::vector< long > &  long_values 
)
overridevirtual

Write the data from the event to the backend specific channel together with the values given.

This function needs to respect the time_in_steps property of the device and should return as quickly as possible if the RecordingDevice device is not enrolled with the backend.

Parameters
devicethe RecordingDevice, backend-specific channel to write to
eventthe event
double_valuesvector of double valued to be written
long_valuesvector of long values to be written

Implements nest::RecordingBackend.

References nest::RecordingBackendSIONlib::FileEntry::buffer, nest::RecordingBackendSIONlib::SIONBuffer::clear(), devices_, nest::RecordingBackendSIONlib::DeviceInfo::double_value_names, nest::RecordingBackendSIONlib::SIONBuffer::ensure_space(), files_, nest::find(), nest::RecordingBackendSIONlib::SIONBuffer::get_capacity(), nest::RecordingBackendSIONlib::SIONBuffer::get_free(), nest::Node::get_node_id(), nest::RecordingBackendSIONlib::SIONBuffer::get_size(), nest::Node::get_thread(), nest::Node::get_vp(), nest::RecordingBackendSIONlib::DeviceInfo::long_value_names, nest::RecordingBackendSIONlib::DeviceInfo::n_rec, P_, nest::RecordingBackendSIONlib::SIONBuffer::read(), nest::RecordingBackendSIONlib::FileEntry::sid, and nest::RecordingBackendSIONlib::Parameters_::sion_collective_.

Referenced by nest::RecordingBackendSIONlib::SIONBuffer::operator<<().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ DEV_LABEL_BUFFERSIZE

const unsigned int nest::RecordingBackendSIONlib::DEV_LABEL_BUFFERSIZE = 32
static

◆ DEV_NAME_BUFFERSIZE

const unsigned int nest::RecordingBackendSIONlib::DEV_NAME_BUFFERSIZE = 32
static

Referenced by close_files_().

◆ devices_

device_map nest::RecordingBackendSIONlib::devices_
private

◆ filename_

std::string nest::RecordingBackendSIONlib::filename_
private

◆ files_

file_map nest::RecordingBackendSIONlib::files_
private

◆ files_opened_

bool nest::RecordingBackendSIONlib::files_opened_
private

◆ local_comm_

MPI_Comm nest::RecordingBackendSIONlib::local_comm_
private

Referenced by open_files_().

◆ NEST_VERSION_BUFFERSIZE

const unsigned int nest::RecordingBackendSIONlib::NEST_VERSION_BUFFERSIZE = 128
static

Referenced by close_files_().

◆ num_enrolled_devices_

size_t nest::RecordingBackendSIONlib::num_enrolled_devices_
private

Referenced by enroll(), and open_files_().

◆ P_

Parameters_ nest::RecordingBackendSIONlib::P_
private

◆ SIONLIB_REC_BACKEND_VERSION

const unsigned int nest::RecordingBackendSIONlib::SIONLIB_REC_BACKEND_VERSION = 2
static

Referenced by close_files_().

◆ t_start_

double nest::RecordingBackendSIONlib::t_start_
private

Referenced by close_files_(), and open_files_().

◆ VALUE_NAME_BUFFERSIZE

const unsigned int nest::RecordingBackendSIONlib::VALUE_NAME_BUFFERSIZE = 16
static

Referenced by close_files_().


The documentation for this class was generated from the following files: