|
SST 16.1.0
Structural Simulation Toolkit
|
Generic network interface. More...
#include <simpleNetwork.h>
Data Structures | |
| class | Request |
| Represents both network sends and receives. More... | |
| class | NetworkInspector |
| Class used to inspect network requests going through the network. More... | |
Public Types | |
| using | nid_t = int64_t |
| All Addresses can be 64-bit. | |
| using | HandlerBase = SSTHandlerBase<bool, int> |
| Base handler for event delivery. | |
| template<typename classT, auto funcT, typename dataT = void> | |
| using | Handler = SSTHandler<bool, int, classT, dataT, funcT> |
| Used to create checkpointable handlers to notify the endpoint when the SimpleNetwork sends or recieves a packet. | |
| template<typename classT, auto funcT, typename dataT = void> | |
| using | Handler2 = SSTHandler<bool, int, classT, dataT, funcT> |
| Used to create checkpointable handlers to notify the endpoint when the SimpleNetwork sends or recieves a packet. | |
Public Member Functions | |
| SimpleNetwork (SST::ComponentId_t id) | |
| Constructor, designed to be used via 'loadUserSubComponent or loadAnonymousSubComponent'. | |
| virtual void | sendUntimedData (Request *req)=0 |
| Sends a network request during untimed phases (init() and complete()). | |
| virtual Request * | recvUntimedData ()=0 |
| Receive any data during untimed phases (init() and complete()). | |
| virtual bool | send (Request *req, int vn)=0 |
| Send a Request to the network. | |
| virtual Request * | recv (int vn)=0 |
| Receive a Request from the network. | |
| virtual void | setup () override |
| Called after all components have been constructed and initialization has completed, but before simulation time has begun. | |
| virtual void | init (unsigned int UNUSED(phase)) override |
| Used during the init phase. | |
| virtual void | complete (unsigned int UNUSED(phase)) override |
| Used during the complete phase after the end of simulation. | |
| virtual void | finish () override |
| Called after simulation completes, but before objects are destroyed. | |
| virtual bool | spaceToSend (int vn, int num_bits)=0 |
| Checks if there is sufficient space to send on the specified virtual network. | |
| virtual bool | requestToReceive (int vn)=0 |
| Checks if there is a waiting network request request pending in the specified virtual network. | |
| virtual void | setNotifyOnReceive (HandlerBase *functor)=0 |
| Registers a functor which will fire when a new request is received from the network. | |
| virtual void | setNotifyOnSend (HandlerBase *functor)=0 |
| Registers a functor which will fire when a request is sent to the network. | |
| virtual bool | isNetworkInitialized () const =0 |
| Check to see if network is initialized. | |
| virtual nid_t | getEndpointID () const =0 |
| Returns the endpoint ID. | |
| virtual const UnitAlgebra & | getLinkBW () const =0 |
| Returns the final BW of the link managed by the simpleNetwork instance. | |
| void | serialize_order (SST::Core::Serialization::serializer &ser) override |
| Public Member Functions inherited from SST::SubComponent | |
| SST_ELI_DECLARE_INFO_EXTERN (ELI::ProvidesInterface, ELI::ProvidesParams, ELI::ProvidesPorts, ELI::ProvidesSubComponentSlots, ELI::ProvidesStats, ELI::ProvidesCheckpointable, ELI::ProvidesProfilePoints, ELI::ProvidesAttributes) explicit SubComponent(ComponentId_t id) | |
| Public Member Functions inherited from SST::BaseComponent | |
| BaseComponent (ComponentId_t id) | |
| BaseComponent (const BaseComponent &)=delete | |
| BaseComponent & | operator= (const BaseComponent &)=delete |
| const std::string & | getType () const |
| Gets the ELI type for this BaseComponent. | |
| ComponentId_t | getId () const |
| Get the unique component ID. | |
| uint8_t | getStatisticLoadLevel () const |
| Get the BaseComponent Statistic load level. | |
| virtual void | emergencyShutdown () |
| Called when SIGINT or SIGTERM has been seen. | |
| const std::string & | getName () const |
| Get the name of the BaseComponent. | |
| const std::string & | getParentComponentName () const |
| Get the name of the parent Component for the Component tree. | |
| virtual bool | Status () |
| Currently unused function. | |
| virtual void | printStatus (Output &UNUSED(out)) |
| Called by the Simulation to request that the component print its current status. | |
| UnitAlgebra | getCoreTimeBase () const |
| Get the core timebase. | |
| SimTime_t | getCurrentSimCycle () const |
| Get the current simulation time as a cycle count. | |
| int | getCurrentPriority () const |
| Get the current priority. | |
| UnitAlgebra | getElapsedSimTime () const |
| get the elapsed simulation time as a UnitAlgebra | |
| SimTime_t | getEndSimCycle () const |
| Get the end simulation time as a cycle count. | |
| UnitAlgebra | getEndSimTime () const |
| Get the end simulation time as a UnitAlgebra. | |
| RankInfo | getRank () const |
| Get this instance's parallel rank. | |
| RankInfo | getNumRanks () const |
| Get the number of parallel ranks in the simulation. | |
| SimTime_t | getCurrentSimTime () const |
| Return the simulated time since the simulation began in the default timebase. | |
| SimTime_t | getCurrentSimTime (TimeConverter base) const |
| Get the simulated time since the simulation began in units specified by the parameter. | |
| SimTime_t | getCurrentSimTime (const std::string &base) const |
| Return the simulated time since the simulation began in the specified timebase. | |
| SimTime_t | getCurrentSimTime (const char *base) const |
| Return the simulated time since the simulation began in the specified timebase. | |
| 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. | |
| double | getRunPhaseElapsedRealTime () const |
| Get the amount of real-time spent executing the run phase of the simulation. | |
| double | getInitPhaseElapsedRealTime () const |
| Get the amount of real-time spent executing the init phase of the simulation. | |
| double | getCompletePhaseElapsedRealTime () const |
| Get the amount of real-time spent executing the complete phase of the simulation. | |
| void | addWatchPoint (WatchPoint *pt) |
| Add a watch point to all handlers in the Component Tree. | |
| void | removeWatchPoint (WatchPoint *pt) |
| Remove a watch point from all handlers in the Component Tree. | |
| SubComponentSlotInfo * | getSubComponentSlotInfo (const std::string &name, bool fatalOnEmptyIndex=false) |
| const std::vector< double > & | getCoordinates () const |
| Retrieve the X,Y,Z coordinates of this component. | |
| Public Member Functions inherited from SST::Core::Serialization::serializable_base | |
| virtual const char * | cls_name () const =0 |
| virtual uint32_t | cls_id () const =0 |
| virtual std::string | serialization_name () const =0 |
Static Public Attributes | |
| static const nid_t | INIT_BROADCAST_ADDR = 0xffffffffffffffffl |
| Static Public Attributes inherited from SST::Core::Serialization::serializable_base | |
| static constexpr uint32_t | NullClsId = std::numeric_limits<uint32_t>::max() |
Additional Inherited Members | |
| Static Public Member Functions inherited from SST::BaseComponent | |
| static Output & | getSimulationOutput () |
| Get the default simulation Output class instance. | |
| Protected Types inherited from SST::BaseComponent | |
| using | StatCreateFunction |
| Protected Types inherited from SST::Core::Serialization::serializable_base | |
| enum | cxn_flag_t { ConstructorFlag } |
| Protected Member Functions inherited from SST::SubComponent | |
| void | serialize_order (SST::Core::Serialization::serializer &ser) override |
| ImplementSerializable (SST::SubComponent) | |
| Protected Member Functions inherited from SST::BaseComponent | |
| bool | isSimulationRunModeInit () const |
| Check to see if the run mode was set to INIT. | |
| bool | isSimulationRunModeRun () const |
| Check to see if the run mode was set to RUN. | |
| bool | isSimulationRunModeBoth () const |
| Check to see if the run mode was set to BOTH. | |
| std::string & | getOutputDirectory () const |
| Returns the output directory of the simulation. | |
| void | requireLibrary (const std::string &name) |
| Signifies that a library is required for this simulation. | |
| bool | isPortConnected (const std::string &name) const |
| Determine if a port name is connected to any links. | |
| Link * | configureLink (const std::string &name, TimeConverter timebase, Event::HandlerBase *handler=nullptr) |
| Configure a Link. | |
| Link * | configureLink (const std::string &name, Event::HandlerBase *handler=nullptr) |
| Configure a Link. | |
| template<auto funcT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Link * | configureLink (const std::string &name, TimeConverter timebase, objT *obj) |
| Configure a Link. | |
| template<auto funcT, typename dataT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Link * | configureLink (const std::string &name, TimeConverter timebase, objT *obj, dataT data) |
| Configure a Link with metadata. | |
| template<auto funcT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Link * | configureLink (const std::string &name, objT *obj) |
| Configure a Link using the component's default timebase. | |
| template<auto funcT, typename dataT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Link * | configureLink (const std::string &name, objT *obj, dataT data) |
| Configure a Link with metadata, using the component's default timebase. | |
| Link * | configureSelfLink (const std::string &name, TimeConverter timebase, Event::HandlerBase *handler=nullptr) |
| Configure a SelfLink (Loopback link). | |
| Link * | configureSelfLink (const std::string &name, Event::HandlerBase *handler=nullptr) |
| Configure a SelfLink (Loopback link) that uses the (Sub)Component's defaultTimeBase. | |
| template<auto funcT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Link * | configureSelfLink (const std::string &name, TimeConverter timebase, objT *obj) |
| Configure a SelfLink (Loopback link). | |
| template<auto funcT, typename dataT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Link * | configureSelfLink (const std::string &name, TimeConverter timebase, objT *obj, dataT data) |
| Configure a SelfLink (Loopback link) with metadata. | |
| template<auto funcT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Link * | configureSelfLink (const std::string &name, objT *obj) |
| Configure a SelfLink (Loopback link) that uses the (Sub)Component's defaultTimeBase. | |
| template<auto funcT, typename dataT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Link * | configureSelfLink (const std::string &name, objT *obj, dataT data) |
| Configure a SelfLink (Loopback link) with metadata, that uses the (Sub)Component's defaultTimeBase. | |
| TimeConverter | registerClock (TimeConverter tc, Clock::HandlerBase *handler, bool reg_all=true) |
| Registers a clock for this component. | |
| void | unregisterClock (TimeConverter tc, Clock::HandlerBase *handler) |
| Removes a clock handler from the component. | |
| Cycle_t | reregisterClock (TimeConverter freq, Clock::HandlerBase *handler) |
| Reactivates an existing Clock and Handler. | |
| template<auto funcT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Clock::HandlerBase * | registerClock (TimeConverter tc, objT *obj, bool reg_all=true) |
| Registers a clock handler for this component. | |
| template<auto funcT, typename dataT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Clock::HandlerBase * | registerClock (TimeConverter tc, objT *obj, dataT metadata, bool reg_all=true) |
| Registers a clock handler with metadata for this component. | |
| template<auto funcT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Clock::HandlerBase * | registerOrderedClock (TimeConverter tc, uint16_t order, objT *obj, bool reg_all=true) |
| Registers an ordered clock handler for this component. | |
| template<auto funcT, typename dataT, typename objT, pvt::enable_if_handler_obj_t< funcT, objT > = 0> | |
| Clock::HandlerBase * | registerOrderedClock (TimeConverter tc, uint16_t order, objT *obj, dataT metadata, bool reg_all=true) |
| Registers an ordered clock handler with metadata for this component. | |
| Cycle_t | getNextClockCycle (TimeConverter freq) |
| Returns the next Cycle that the TimeConverter would fire. | |
| TimeConverter | registerTimeBase (const std::string &base, bool reg_all=true) |
| Registers a default timebase for the component and optionally sets the the component's links to that timebase. | |
| TimeConverter | getTimeConverter (const std::string &base) const |
| TimeConverter | getTimeConverter (const UnitAlgebra &base) const |
| bool | isStatisticShared (const std::string &stat_name, bool include_me=false) |
| void | initiateInteractive (const std::string &msg) |
| Tell the simulation object to initiate interactive mode (if currently turned on). | |
| template<typename T> | |
| Statistics::Statistic< T > * | registerStatistic (SST::Params ¶ms, const std::string &stat_name, const std::string &stat_sub_id="") |
| Registers a statistic. | |
| template<typename T> | |
| Statistics::Statistic< T > * | registerStatistic (const std::string &stat_name, const std::string &stat_sub_id="") |
| template<typename... Args> | |
| Statistics::Statistic< std::tuple< Args... > > * | registerMultiStatistic (const std::string &stat_name, const std::string &stat_sub_id="") |
| template<typename... Args> | |
| Statistics::Statistic< std::tuple< Args... > > * | registerMultiStatistic (SST::Params ¶ms, const std::string &stat_name, const std::string &stat_sub_id="") |
| template<typename T> | |
| Statistics::Statistic< T > * | registerStatistic (const char *stat_name, const char *stat_sub_id="") |
| void | performStatisticOutput (Statistics::StatisticBase *stat) |
| Called by the Components and Subcomponent to perform a statistic Output. | |
| void | performGlobalStatisticOutput () |
| Performs a global statistic Output. | |
| template<typename T> | |
| T::ProfilePoint * | registerProfilePoint (const std::string &point_name) |
| Registers a profiling point. | |
| template<class T, class... ARGS> | |
| T * | loadModule (const std::string &type, Params ¶ms, ARGS... args) |
| Loads a module from an element Library. | |
| template<class T, class... ARGS> | |
| T * | loadComponentExtension (ARGS... args) |
| template<class T> | |
| bool | isSubComponentLoadableUsingAPI (const std::string &type) |
| Check to see if a given element type is loadable with a particular API. | |
| template<class T> | |
| bool | isUserSubComponentLoadableUsingAPI (const std::string &slot_name) |
| Check to see if the element type loaded by the user into the. | |
| template<class T, class... ARGS> | |
| T * | loadAnonymousSubComponent (const std::string &type, const std::string &slot_name, int slot_num, uint64_t share_flags, Params ¶ms, ARGS... args) |
| Loads an anonymous subcomponent (not defined in input file to SST run). | |
| template<class T> | |
| T * | loadUserSubComponent (const std::string &slot_name) |
| Loads a user defined subcomponent (defined in input file to SST run). | |
| template<class T, class... ARGS> | |
| T * | loadUserSubComponent (const std::string &slot_name, uint64_t share_flags, ARGS... args) |
| Loads a user defined subcomponent (defined in input file to SST run). | |
| void | fatal (uint32_t line, const char *file, const char *func, int exit_code, const char *format,...) const |
| Convenience function for reporting fatal conditions. | |
| void | sst_assert (bool condition, uint32_t line, const char *file, const char *func, int exit_code, const char *format,...) const |
| Convenience function for testing for and reporting fatal conditions. | |
| bool | isAnonymous () |
| bool | isUser () |
| void | setDefaultTimeBase (TimeConverter tc) |
| Manually set the default defaultTimeBase. | |
| TimeConverter | getDefaultTimeBase () |
| const TimeConverter | getDefaultTimeBase () const |
| bool | doesSubComponentExist (const std::string &type) |
| uint8_t | getStatisticValidityAndLevel (const std::string &statisticName) const |
| std::vector< Profile::ComponentProfileTool * > | getComponentProfileTools (const std::string &point) |
| void | registerAsPrimaryComponent () |
| Register as a primary component, which allows the component to specify when it is and is not OK to end simulation. | |
| void | primaryComponentDoNotEndSim () |
| Tells the simulation that it should not exit. | |
| void | primaryComponentOKToEndSim () |
| Tells the simulation that it is now OK to end simulation. | |
| Static Protected Member Functions inherited from SST::Core::Serialization::serializable_base | |
| static void | serializable_abort (uint32_t line, const char *file, const char *func, const char *obj) |
Generic network interface.
| using SST::Interfaces::SimpleNetwork::Handler = SSTHandler<bool, int, classT, dataT, funcT> |
Used to create checkpointable handlers to notify the endpoint when the SimpleNetwork sends or recieves a packet.
. The callback function is expected to be in the form of:
bool func(int vn)
In which case, the class is created with:
new SimpleNetwork::Handler<classname, &classname::function_name>(this)
Or, to add static data, the callback function is:
bool func(int vn, dataT data)
and the class is created with:
new SimpleNetwork::Handler<classname, &classname::function_name, dataT>(this, data)
In both cases, the boolean that's returned indicates whether the handler should be kept in the list or not. On return of true, the handler will be kept. On return of false, the handler will be removed from the clock list.
| using SST::Interfaces::SimpleNetwork::Handler2 = SSTHandler<bool, int, classT, dataT, funcT> |
Used to create checkpointable handlers to notify the endpoint when the SimpleNetwork sends or recieves a packet.
. The callback function is expected to be in the form of:
bool func(int vn)
In which case, the class is created with:
new SimpleNetwork::Handler<classname, &classname::function_name>(this)
Or, to add static data, the callback function is:
bool func(int vn, dataT data)
and the class is created with:
new SimpleNetwork::Handler<classname, &classname::function_name, dataT>(this, data)
In both cases, the boolean that's returned indicates whether the handler should be kept in the list or not. On return of true, the handler will be kept. On return of false, the handler will be removed from the clock list.
|
inlineoverridevirtual |
Used during the complete phase after the end of simulation.
The method will be called each phase of complete. Complete phase ends when no components have sent any data.
| phase | Current phase number |
Reimplemented from SST::BaseComponent.
References init().
Referenced by finish().
|
inlineoverridevirtual |
Called after simulation completes, but before objects are destroyed.
A good place to print out statistics.
Reimplemented from SST::SubComponent.
References complete().
|
pure virtual |
Returns the endpoint ID.
Cannot be called until after the network is initialized.
References getEndpointID().
Referenced by getEndpointID().
|
pure virtual |
Returns the final BW of the link managed by the simpleNetwork instance.
Cannot be called until after the network is initialized.
References getLinkBW().
Referenced by getLinkBW().
|
inlineoverridevirtual |
Used during the init phase.
The method will be called each phase of initialization. Initialization ends when no components have sent any data.
Reimplemented from SST::SubComponent.
References setup().
Referenced by complete().
|
pure virtual |
Check to see if network is initialized.
If network is not initialized, then no other functions other than init() can can be called on the interface.
References isNetworkInitialized().
Referenced by isNetworkInitialized().
|
pure virtual |
Receive a Request from the network.
Use this method for polling-based applications. Register a handler for push-based notification of responses.
| vn | Virtual network to receive on |
References recv().
Referenced by recv().
|
pure virtual |
Receive any data during untimed phases (init() and complete()).
References recvUntimedData().
Referenced by recvUntimedData().
|
pure virtual |
Checks if there is a waiting network request request pending in the specified virtual network.
| vn | Virtual network to check |
References requestToReceive().
Referenced by requestToReceive().
|
pure virtual |
|
pure virtual |
Sends a network request during untimed phases (init() and complete()).
References sendUntimedData().
Referenced by sendUntimedData().
|
inlineoverridevirtual |
Implements SST::Core::Serialization::serializable_base.
|
pure virtual |
Registers a functor which will fire when a new request is received from the network.
Note, the actual request that was received is not passed into the functor, it is only a notification that something is available.
| functor | Functor to call when request is received |
References setNotifyOnReceive().
Referenced by setNotifyOnReceive().
|
pure virtual |
Registers a functor which will fire when a request is sent to the network.
Note, this only tells you when data is sent, it does not guarantee any specified amount of available space.
| functor | Functor to call when request is sent |
References setNotifyOnSend().
Referenced by setNotifyOnSend().
|
inlineoverridevirtual |
Called after all components have been constructed and initialization has completed, but before simulation time has begun.
Reimplemented from SST::SubComponent.
Referenced by init().
|
pure virtual |
Checks if there is sufficient space to send on the specified virtual network.
| vn | Virtual network to check |
| num_bits | Minimum size in bits required to have space to send |
References spaceToSend().
Referenced by spaceToSend().