SST 15.0
Structural Simulation Toolkit
|
PortModules are modules that can be attached to the send and/or receive side of ports. More...
#include <portModule.h>
Public Member Functions | |
SST_ELI_DECLARE_INFO_EXTERN (ELI::ProvidesParams, ELI::ProvidesAttributes) PortModule()=default | |
virtual uintptr_t | registerLinkAttachTool (const AttachPointMetaData &mdata) override |
Function that will be called when a PortModule is registered on sends (i.e. | |
virtual void | eventSent (uintptr_t key, Event *&ev) override=0 |
Function that will be called when an event is sent on a link with registered PortModules. | |
virtual void | serializeEventAttachPointKey (SST::Core::Serialization::serializer &ser, uintptr_t &key) override |
Function that will be called to handle the key returned from registerLinkAttachTool, if the AttachPoint tool is serializable. | |
virtual uintptr_t | registerHandlerIntercept (const AttachPointMetaData &mdata) override |
Function that will be called when a handler is registered with recieves (i.e. | |
virtual void | interceptHandler (uintptr_t key, Event *&data, bool &cancel) override=0 |
Function that will be called before the event handler to let the attach point intercept the data. | |
virtual void | serializeHandlerInterceptPointKey (SST::Core::Serialization::serializer &ser, uintptr_t &key) override |
Function that will be called to handle the key returned from registerHandlerIntercept, if the AttachPoint tool is serializable. | |
virtual bool | installOnReceive () |
Called to determine if the PortModule should be installed on receives. | |
virtual bool | installOnSend () |
Called to determine if the PortModule should be installed on sends. | |
![]() | |
virtual const char * | cls_name () const =0 |
virtual uint32_t | cls_id () const =0 |
virtual std::string | serialization_name () const =0 |
Protected Member Functions | |
void | serialize_order (SST::Core::Serialization::serializer &ser) override |
UnitAlgebra | getCoreTimeBase () const |
Get the core timebase. | |
SimTime_t | getCurrentSimCycle () const |
Return the current simulation time as a cycle count. | |
int | getCurrentPriority () const |
Return the current priority. | |
UnitAlgebra | getElapsedSimTime () const |
Return the elapsed simulation time as a time. | |
Output & | getSimulationOutput () const |
Return the base simulation Output class instance. | |
SimTime_t | getCurrentSimTime (TimeConverter *tc) const |
Return the simulated time since the simulation began in units specified by the parameter. | |
SimTime_t | getCurrentSimTime (TimeConverter &tc) const |
SimTime_t | getCurrentSimTime (const std::string &base) const |
Return the simulated time since the simulation began in timebase specified. | |
SimTime_t | getCurrentSimTimeNano () const |
Utility function to return the time since the simulation began in nanoseconds. | |
SimTime_t | getCurrentSimTimeMicro () const |
Utility function to return the time since the simulation began in microseconds. | |
SimTime_t | getCurrentSimTimeMilli () const |
Utility function to return the time since the simulation began in milliseconds. | |
Friends | |
class | BaseComponent |
Additional Inherited Members | |
![]() | |
static constexpr uint32_t | NullClsId = std::numeric_limits<uint32_t>::max() |
![]() | |
static constexpr uint32_t | NullClsId = std::numeric_limits<uint32_t>::max() |
![]() | |
enum | cxn_flag_t { ConstructorFlag } |
![]() | |
static void | serializable_abort (uint32_t line, const char *file, const char *func, const char *obj) |
PortModules are modules that can be attached to the send and/or receive side of ports.
Each PortModule is attached to one port and uses the Event::HandlerBase::InterceptPoint for intercepting incoming events and the Link::AttachPoint to intercept outgoing events. The intercepted events can be inspected, modified and/or canceled. For canceled events, the PortModule is required to delete the event.
NOTE: Not Final API - PortModules will continue to be supported in the future, but the API will not be finalized until the SST 15 release, so there may be slight changes to the base class.
NOTE: Attaching to a port on the send-side has known performance issues, so it is recommended to attach to the input port whenever possible.
|
overridepure virtual |
Function that will be called when an event is sent on a link with registered PortModules.
If ev is set to nullptr, then the event will not be delivered and the function should delete the original event.
NOTE: It is possible to delete the incoming event and replace it with a new event, if this is done, the new event MUST call copyAllDeliveryInfo(ev) or the event will not be properly processed.
key | Opaque key returned from registerLinkAttachTool() |
ev | Event to intercept |
Implements SST::Link::AttachPoint.
Implemented in SST::CoreTestPortModule::TestPortModule, and SST::IMPL::PortModule::RandomDrop.
|
protected |
Return the simulated time since the simulation began in timebase specified.
base | Timebase frequency in SI Units |
|
protected |
Return the simulated time since the simulation began in units specified by the parameter.
tc | TimeConverter specifying the units |
|
inlinevirtual |
Called to determine if the PortModule should be installed on receives.
Reimplemented in SST::CoreTestPortModule::TestPortModule, and SST::IMPL::PortModule::RandomDrop.
|
inlinevirtual |
Called to determine if the PortModule should be installed on sends.
NOTE: Installing PortModules on sends will have a noticeable impact on performance, consider architecting things so that you can intercept on receives.
Reimplemented in SST::CoreTestPortModule::TestPortModule, and SST::IMPL::PortModule::RandomDrop.
|
overridepure virtual |
Function that will be called before the event handler to let the attach point intercept the data.
The data can be modified, and if cancel is set to true, the handler will not be executed. If cancel is set to true, then the function should also delete the event and set data to nullptr.
NOTE: It is possible to delete the incoming event and replace the it with a new event, if this is done, the new event MUST call copyAllDeliveryInfo(ev) or the event will not be properly processed.
key | Key returned from registerHandlerIntercept() function | |
data | Event that is to be passed to the handler | |
[out] | cancel | Set to true if the handler delivery should be cancelled. If set to true, function must also delete the event |
Implemented in SST::CoreTestPortModule::TestPortModule, and SST::IMPL::PortModule::RandomDrop.
|
overridevirtual |
Function that will be called when a handler is registered with recieves (i.e.
installOnReceive() returns true). The uintptr_t returned from this function will be passed into the intercept() function.
The default implemenation will just return 0 and only needs to be overwritten if the module needs any of the metadata and/or needs to return a unique key.
mdata | Metadata to be passed into the tool. NOTE: The metadata will be of type EventHandlerMetaData (see sst/core/event.h) |
Reimplemented in SST::IMPL::PortModule::RandomDrop.
|
overridevirtual |
Function that will be called when a PortModule is registered on sends (i.e.
installOnSend() returns true). The uintptr_t returned from this function will be passed into the eventSent() function.
The default implemenation will just return 0 and only needs to be overwritten if the module needs any of the metadata and/or needs to return a unique key.
mdata | Metadata to be passed into the tool. NOTE: The metadata will be of type EventHandlerMetaData (see sst/core/event.h) |
Implements SST::Link::AttachPoint.
Reimplemented in SST::IMPL::PortModule::RandomDrop.
|
overrideprotectedvirtual |
Implements SST::Core::Serialization::serializable_base.
|
overridevirtual |
Function that will be called to handle the key returned from registerLinkAttachTool, if the AttachPoint tool is serializable.
This is needed because the key is opaque to the Link, so it doesn't know how to handle it during serialization. During SIZE and PACK phases of serialization, the tool needs to store out any information that will be needed to recreate data that is reliant on the key. On UNPACK, the function needs to recreate the any state and reinitialize the passed in key reference to the proper state to continue to make valid calls to eventSent().
The default implemenation will just set key to 0 on UNPACK and only needs to be overwritten if the module needs to return a unique key from registerLinkAttachTool().
ser | Serializer to use for serialization |
key | Key that would be passed into the eventSent() function. |
Reimplemented from SST::Link::AttachPoint.
|
overridevirtual |
Function that will be called to handle the key returned from registerHandlerIntercept, if the AttachPoint tool is serializable.
This is needed because the key is opaque to the Link, so it doesn't know how to handle it during serialization. During SIZE and PACK phases of serialization, the tool needs to store out any information that will be needed to recreate data that is reliant on the key. On UNPACK, the function needs to recreate any state and reinitialize the passed in key reference to the proper state to continue to make valid calls to interceptHandler().
The default implemenation will just set key to 0 on UNPACK and only needs to be overwritten if the module needs to return a unique key from registerHandlerIntercept().
ser | Serializer to use for serialization |
key | Key that would be passed into the interceptHandler() function. |