Element Library Information (ELI)
Element Library Information or ELI refers to information about each SST object that the SST Core keeps track of. This information includes things like which classes are available to SST for dynamic loading, which statistics an object generates, what kinds of SubComponents can be loaded into an object and more. ELI facilitates dynamic loading of libraries, introspection of libraries via the sst-info
command-line utility, error checking input configurations, and many other operations. SST uses a series of macros to register ELI with the SST Core.
There are two primary kinds of ELI macros: (1) macros for registering a new object (e.g., a Component or SubComponent) and (2) macros to document the parameters, statistics, links, etc. that an SST object supports. Registration macros are required for SST objects while documentation macros are only required if the object has something to document. For example, a Component only needs to use the SST_ELI_DOCUMENT_PARAMETERS
macro if it takes parameters.
In addition to registration and documentation, there are also ELI macros for deletion. These allow objects that have inherited ELI from a parent class to remove it from their own. For example, if a parent class documents a port that an inheriting component does not support, the component can delete that port from its own ELI.
Registering SST Objects with SST Core
All ELI macros must reside in a public section of the registering object's class declaration.
Components
SST Components are required to use the SST_ELI_REGISTER_COMPONENT
macro. They must also use any of the documentation macros if applicable. Classes that are not themselves Components but instead are base classes for a Component can register ELI and have that ELI inherited if they use one of the following macros to register themselves:
SubComponents
Classes that define a type of SubComponent must use the SST_ELI_REGISTER_SUBCOMPONENT_API
macro to register the class API with the SST Core. SubComponents that implement an API must use the SST_ELI_REGISTER_SUBCOMPONENT
macro and identify themselves as loadable SST SubComponents and identify the API they implement in the ELI. A class may be both an API and a SubComponent and include both macros.
Another variant of the SST_ELI_REGISTER_SUBCOMPONENT_API
macro is SST_ELI_REGISTER_SUBCOMPONENT_DERIVED_API
.
Replace SST_ELI_REGISTER_SUBCOMPONENT_DERIVED
with SST_ELI_REGISTER_SUBCOMPONENT
. SST_ELI_REGISTER_MODULE_SUBCOMPONENT
was deprecated in SST 13 and removed in SST 14.
Modules
Modules must use the SST_ELI_REGISTER_MODULE
macro to register with the SST Core. Like SubComponents, Modules should implement an API that has also been registered with the SST Core. The API must use the SST_ELI_REGISTER_MODULE_API
or SST_ELI_REGISTER_MODULE_DERIVED_API
macro to register itself. Modules cannot have links, statistics, subcomponents, or parameters and so they may not use the documentation macros.
Replace SST_ELI_REGISTER_MODULE_DERIVED
with SST_ELI_REGISTER_MODULE
. SST_ELI_REGISTER_MODULE_DERIVED
was deprecated in SST 13 and removed in SST 14.
Profiling Tools
Profiling tools are utilities used by SST Core to monitor and report performance information such as event arrival, time spent in clock functions, etc. These tools must be registered using the SST_ELI_REGISTER_PROFILETOOL
macro.
Python Modules
SST Element Libraries may create their own Python modules, for example, to simplify configuration for library components. Such modules should be registered using the SST_ELI_REGISTER_PYTHON_MODULE
macro.
Documenting ELI for SST Objects
Macros are available to document the following aspects of an SST object. See each macros' documentation for the specific types of objects that can use a particular documentation macro.
- Attributes - arbitrary string tags that can be attached to an SST object to assist with locating, searching, and identifying the purpose of an object
- Parameters - parameters that the object accepts from the simulation configuration
- Ports - ports that the simulation configuration can attach an SST::Link to
- Profile points - points to which a profiler can be attached
- Statistics - statistics that the object generates
- SubComponent slots - slots into which subcomponent(s) of a specific type can be loaded
Deleting ELI for SST Objects
Sometimes it is useful for an inheriting class to not inherit all ELI from its parent. To facilitate those instances, several macros are available for deleting documented ELI from an object.