SST
13.1.0
Structural Simulation Toolkit
|
The most important class for is SST::Component, the base class from which all simulation components inherit. At the very least, a component writer must create a class which inherits from SST::Component and which contains a constructor. This class should be created in a dynamic library (.so or .dylib file) and should include a C-style function which returns a pointer to a newly instantiated component.
SST::Component also contains useful functions for component setup (SST::Component::Setup() and SST::Component::Init()), cleanup (SST::Component::Finish()), controlling when the simulation stops (SST::Component::registerExit() and SST::Component::unregisterExit() ), and for handling time (such as SST::Component::getCurrentSimTime()).
SST components use event handling functors to handle interactions with other components (i.e. through an SST::Event sent over an SST::Link) and recurring events (i.e. component clock ticks). The Event Handler Class, SST::EventHandler, is templated to create either type of event handler by creating a functor which invokes a given member function whenever triggered. For example:
NICeventHandler = new Event::Handler<proc> (this, &proc::handle_nic_events); ... bool proc::handle_nic_events(Event *event) { ... }
creates an event handler which calls proc::handle_nic_events()
with an argument of type Event*
- the SST::Event to be processed. Similarly,
clockHandler = new Clock::Handler<proc>(this, &proc::preTic());
creates an clock handler which invokes the function proc::preTic()
at a regular interval.
Once created, an SST::EventHandler must be registered with the simulation core. This can be done with the SST::Component::configureLink() function for events coming from another component, or by SST::Component::registerClock(), for event handlers triggered by a clock. For example, the handlers created above could be registed in this way:
configureLink("mem0", NICeventHandler) registerClock( "1Ghz", clockHandler );
Note that SST::Component::registerClock() can have its period or frequency expressed in SI units in a string. The allowed units are specified in SST::TimeLord::getTimeConverter() function.
Also note that the SST::LinkMap::LinkAdd() function does not require an event handler if the recieving component uses the "event pull" mechanism with SST::Link::Recv().
SST::Component s use SST::Link to communicate by passing events. An SST::Link is specified in the Python file use to configure the simulation. For example,
comp_A = sst.Component("cA", "simpleElementExample.simpleComponent") comp_A.addParams({ "workPerCycle" : """1000""", "commSize" : """100""", }) comp_B = sst.Component("cB", "simpleElementExample.simpleComponent") comp_B.addParams({ "workPerCycle" : """1000""", "commSize" : """100""", }) link_AB = sst.Link("link_AB") link_AB.connect( (comp_A, "Slink", "10000ps"), (comp_B, "Nlink", "10000ps") )
specifies two components, comp_A
and comp_B
. These components are connected by an SST::Link. Each link.connect
contains a pair of structures which specify the endpoint, port name, and latency of the link.
Other commonly used SST::Link functions are: