SST  13.0.0
StructuralSimulationToolkit
SST::Interfaces::SimpleNetwork Class Referenceabstract

Generic network interface. More...

#include <simpleNetwork.h>

Inheritance diagram for SST::Interfaces::SimpleNetwork:
SST::SubComponent SST::BaseComponent

Data Structures

class  NetworkInspector
 Class used to inspect network requests going through the network. More...
 
class  Request
 Represents both network sends and receives. More...
 

Public Types

typedef int64_t nid_t
 All Addresses can be 64-bit.
 
using HandlerBase = SSTHandlerBase< bool, int >
 Base handler for event delivery.
 
template<typename classT , typename dataT = void>
using Handler = SSTHandler< bool, int, classT, dataT >
 Used to create handlers to notify the endpoint when the SimpleNetwork sends or recieves a packet. More...
 

Public Member Functions

 SimpleNetwork (SST::ComponentId_t id)
 Constructor, designed to be used via 'loadUserSubComponent or loadAnonymousSubComponent'. More...
 
virtual void sendInitData (Request *req)
 Sends a network request during the init() phase.
 
virtual RequestrecvInitData ()
 Receive any data during the init() phase. More...
 
virtual void sendUntimedData (Request *req)
 Sends a network request during untimed phases (init() and complete()). More...
 
virtual RequestrecvUntimedData ()
 Receive any data during untimed phases (init() and complete()). More...
 
virtual bool send (Request *req, int vn)=0
 Returns a handle to the underlying SST::Link. More...
 
virtual Requestrecv (int vn)=0
 Receive a Request from the network. More...
 
virtual void setup () override
 Called after all components have been constructed and initialization has completed, but before simulation time has begun. More...
 
virtual void init (unsigned int UNUSED(phase)) override
 Used during the init phase. More...
 
virtual void complete (unsigned int UNUSED(phase)) override
 Used during the complete phase after the end of simulation. More...
 
virtual void finish () override
 Called after simulation completes, but before objects are destroyed. More...
 
virtual bool spaceToSend (int vn, int num_bits)=0
 Checks if there is sufficient space to send on the specified virtual network. More...
 
virtual bool requestToReceive (int vn)=0
 Checks if there is a waiting network request request pending in the specified virtual network. More...
 
virtual void setNotifyOnReceive (HandlerBase *functor)=0
 Registers a functor which will fire when a new request is received from the network. More...
 
virtual void setNotifyOnSend (HandlerBase *functor)=0
 Registers a functor which will fire when a request is sent to the network. More...
 
virtual bool isNetworkInitialized () const =0
 Check to see if network is initialized. More...
 
virtual nid_t getEndpointID () const =0
 Returns the endpoint ID. More...
 
virtual const UnitAlgebragetLinkBW () const =0
 Returns the final BW of the link managed by the simpleNetwork instance. More...
 
- Public Member Functions inherited from SST::SubComponent
 SST_ELI_DECLARE_INFO_EXTERN (ELI::ProvidesInterface, ELI::ProvidesParams, ELI::ProvidesPorts, ELI::ProvidesSubComponentSlots, ELI::ProvidesStats, ELI::ProvidesProfilePoints, ELI::ProvidesAttributes) SubComponent(ComponentId_t id)
 
- Public Member Functions inherited from SST::BaseComponent
 BaseComponent (ComponentId_t id)
 
const std::string & getType () const
 
ComponentId_t getId () const
 Returns unique component ID.
 
uint8_t getStatisticLoadLevel () const
 Returns Component Statistic load level.
 
virtual void emergencyShutdown (void)
 Called when SIGINT or SIGTERM has been seen. More...
 
const std::string & getName () const
 Returns Component/SubComponent Name.
 
const std::string & getParentComponentName () const
 Returns the name of the parent Component, or, if called on a Component, the name of that Component. More...
 
virtual bool Status ()
 Currently unused function.
 
virtual void printStatus (Output &UNUSED(out))
 Called by the Simulation to request that the component print it's current status. More...
 
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.
 
SimTime_t getEndSimCycle () const
 Return the end simulation time as a cycle count.
 
UnitAlgebra getEndSimTime () const
 Return the end simulation time as a time.
 
RankInfo getRank () const
 Get this instance's parallel rank.
 
RankInfo getNumRanks () const
 Get the number of parallel ranks in the simulation.
 
OutputgetSimulationOutput () const
 Return the base simulation Output class instance.
 
SimTime_t getCurrentSimTime (TimeConverter *tc) const
 return the time since the simulation began in units specified by the parameter. More...
 
SimTime_t getCurrentSimTime () const
 return the time since the simulation began in the default timebase
 
SimTime_t getCurrentSimTime (const std::string &base) const
 return the time since the simulation began in timebase specified More...
 
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. More...
 
double getInitPhaseElapsedRealTime () const
 Get the amount of real-time spent executing the init phase of the simulation. More...
 
double getCompletePhaseElapsedRealTime () const
 Get the amount of real-time spent executing the complete phase of the simulation. More...
 
SubComponentSlotInfogetSubComponentSlotInfo (const std::string &name, bool fatalOnEmptyIndex=false)
 
const std::vector< double > & getCoordinates () const
 Retrieve the X,Y,Z coordinates of this component.
 

Static Public Attributes

static const nid_t INIT_BROADCAST_ADDR = 0xffffffffffffffffl
 

Additional Inherited Members

- Protected Types inherited from SST::BaseComponent
using StatCreateFunction = std::function< Statistics::StatisticBase *(BaseComponent *, Statistics::StatisticProcessingEngine *, const std::string &, const std::string &, const std::string &, Params &)>
 
- Protected Member Functions inherited from SST::BaseComponent
bool isSimulationRunModeInit () const
 Check to see if the run mode was set to INIT. More...
 
bool isSimulationRunModeRun () const
 Check to see if the run mode was set to RUN. More...
 
bool isSimulationRunModeBoth () const
 Check to see if the run mode was set to BOTH. More...
 
std::string & getOutputDirectory () const
 Returns the output directory of the simulation. More...
 
void requireLibrary (const std::string &name)
 Signifies that a library is required for this simulation. More...
 
bool isPortConnected (const std::string &name) const
 Determine if a port name is connected to any links.
 
LinkconfigureLink (const std::string &name, TimeConverter *time_base, Event::HandlerBase *handler=nullptr)
 Configure a Link. More...
 
LinkconfigureLink (const std::string &name, const std::string &time_base, Event::HandlerBase *handler=nullptr)
 Configure a Link. More...
 
LinkconfigureLink (const std::string &name, const UnitAlgebra &time_base, Event::HandlerBase *handler=nullptr)
 Configure a Link. More...
 
LinkconfigureLink (const std::string &name, Event::HandlerBase *handler=nullptr)
 Configure a Link. More...
 
LinkconfigureSelfLink (const std::string &name, TimeConverter *time_base, Event::HandlerBase *handler=nullptr)
 Configure a SelfLink (Loopback link) More...
 
LinkconfigureSelfLink (const std::string &name, const std::string &time_base, Event::HandlerBase *handler=nullptr)
 Configure a SelfLink (Loopback link) More...
 
LinkconfigureSelfLink (const std::string &name, const UnitAlgebra &time_base, Event::HandlerBase *handler=nullptr)
 Configure a SelfLink (Loopback link) More...
 
LinkconfigureSelfLink (const std::string &name, Event::HandlerBase *handler=nullptr)
 Configure a SelfLink (Loopback link) More...
 
TimeConverterregisterClock (const std::string &freq, Clock::HandlerBase *handler, bool regAll=true)
 Registers a clock for this component. More...
 
TimeConverterregisterClock (const UnitAlgebra &freq, Clock::HandlerBase *handler, bool regAll=true)
 Registers a clock for this component. More...
 
TimeConverterregisterClock (TimeConverter *tc, Clock::HandlerBase *handler, bool regAll=true)
 Registers a clock for this component. More...
 
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. More...
 
Cycle_t getNextClockCycle (TimeConverter *freq)
 Returns the next Cycle that the TimeConverter would fire If called prior to the simulation run loop, next Cycle is 0. More...
 
TimeConverterregisterTimeBase (const std::string &base, bool regAll=true)
 Registers a default time base for the component and optionally sets the the component's links to that timebase. More...
 
TimeConvertergetTimeConverter (const std::string &base) const
 
TimeConvertergetTimeConverter (const UnitAlgebra &base) const
 
bool isStatisticShared (const std::string &statName, bool include_me=false)
 
template<typename T >
Statistics::Statistic< T > * registerStatistic (SST::Params &params, const std::string &statName, const std::string &statSubId="")
 Registers a statistic. More...
 
template<typename T >
Statistics::Statistic< T > * registerStatistic (const std::string &statName, const std::string &statSubId="")
 
template<typename... Args>
Statistics::Statistic< std::tuple< Args... > > * registerMultiStatistic (const std::string &statName, const std::string &statSubId="")
 
template<typename... Args>
Statistics::Statistic< std::tuple< Args... > > * registerMultiStatistic (SST::Params &params, const std::string &statName, const std::string &statSubId="")
 
template<typename T >
Statistics::Statistic< T > * registerStatistic (const char *statName, const char *statSubId="")
 
void performStatisticOutput (Statistics::StatisticBase *stat)
 Called by the Components and Subcomponent to perform a statistic Output. More...
 
void performGlobalStatisticOutput ()
 Performs a global statistic Output. More...
 
template<typename T >
T::ProfilePoint * registerProfilePoint (const std::string &pointName)
 Registers a profiling point. More...
 
template<class T , class... ARGS>
T * loadModule (const std::string &type, Params &params, ARGS... args)
 Loads a module from an element Library. More...
 
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. More...
 
template<class T >
bool isUserSubComponentLoadableUsingAPI (const std::string &slot_name)
 Check to see if the element type loaded by the user into the. More...
 
template<class T , class... ARGS>
T * loadAnonymousSubComponent (const std::string &type, const std::string &slot_name, int slot_num, uint64_t share_flags, Params &params, ARGS... args)
 Loads an anonymous subcomponent (not defined in input file to SST run). More...
 
template<class T >
T * loadUserSubComponent (const std::string &slot_name)
 Loads a user defined subcomponent (defined in input file to SST run). More...
 
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). More...
 
void fatal (uint32_t line, const char *file, const char *func, int exit_code, const char *format,...) const
 Convenience function for reporting fatal conditions. More...
 
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. More...
 
bool isAnonymous ()
 
bool isUser ()
 
void setDefaultTimeBase (TimeConverter *tc)
 Manually set the default detaulTimeBase.
 
TimeConvertergetDefaultTimeBase ()
 
const TimeConvertergetDefaultTimeBase () const
 
bool doesSubComponentExist (const std::string &type)
 
SimulationgetSimulation () const
 
bool doesComponentInfoStatisticExist (const std::string &statisticName) const
 
uint8_t getComponentInfoStatisticEnableLevel (const std::string &statisticName) const
 
std::vector< Profile::ComponentProfileTool * > getComponentProfileTools (const std::string &point)
 

Detailed Description

Generic network interface.

Member Typedef Documentation

◆ Handler

template<typename classT , typename dataT = void>
using SST::Interfaces::SimpleNetwork::Handler = SSTHandler<bool, int, classT, dataT>

Used to create 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>(this, &classname::function_name)

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, dataT>(this, &classname::function_name, 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.

Constructor & Destructor Documentation

◆ SimpleNetwork()

SST::Interfaces::SimpleNetwork::SimpleNetwork ( SST::ComponentId_t  id)
inline

Constructor, designed to be used via 'loadUserSubComponent or loadAnonymousSubComponent'.

Member Function Documentation

◆ complete()

virtual void SST::Interfaces::SimpleNetwork::complete ( unsigned int   UNUSEDphase)
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.

Reimplemented from SST::BaseComponent.

◆ finish()

virtual void SST::Interfaces::SimpleNetwork::finish ( void  )
inlineoverridevirtual

Called after simulation completes, but before objects are destroyed.

A good place to print out statistics.

Reimplemented from SST::SubComponent.

◆ getEndpointID()

virtual nid_t SST::Interfaces::SimpleNetwork::getEndpointID ( ) const
pure virtual

Returns the endpoint ID.

Cannot be called until after the network is initialized.

Returns
Endpoint ID

◆ getLinkBW()

virtual const UnitAlgebra& SST::Interfaces::SimpleNetwork::getLinkBW ( ) const
pure virtual

Returns the final BW of the link managed by the simpleNetwork instance.

Cannot be called until after the network is initialized.

Returns
Link bandwidth of associated link

◆ init()

virtual void SST::Interfaces::SimpleNetwork::init ( unsigned int   UNUSEDphase)
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.

◆ isNetworkInitialized()

virtual bool SST::Interfaces::SimpleNetwork::isNetworkInitialized ( ) const
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.

Returns
true if network is initialized, false otherwise

◆ recv()

virtual Request* SST::Interfaces::SimpleNetwork::recv ( int  vn)
pure virtual

Receive a Request from the network.

Use this method for polling-based applications. Register a handler for push-based notification of responses.

Parameters
vnVirtual network to receive on
Returns
nullptr if nothing is available.
Pointer to a Request response (that should be deleted)

◆ recvInitData()

SimpleNetwork::Request * SST::Interfaces::SimpleNetwork::recvInitData ( )
virtual

Receive any data during the init() phase.

See also
SST::Link::recvInitData()

◆ recvUntimedData()

SimpleNetwork::Request * SST::Interfaces::SimpleNetwork::recvUntimedData ( )
virtual

Receive any data during untimed phases (init() and complete()).

See also
SST::Link::recvUntimedData()

For now, simply call recvInitData. Once that call is deprecated and removed, this will become a pure virtual function. This means that when classes implement SimpleNetwork, they will need to overload both recvUntimedData and recvInitData with identical functionality (or having the Init version call the Untimed version) until recvInitData is removed in SST 14.0.

◆ requestToReceive()

virtual bool SST::Interfaces::SimpleNetwork::requestToReceive ( int  vn)
pure virtual

Checks if there is a waiting network request request pending in the specified virtual network.

Parameters
vnVirtual network to check
Returns
true if a network request is pending in the specified virtual network, false otherwise

◆ send()

virtual bool SST::Interfaces::SimpleNetwork::send ( Request req,
int  vn 
)
pure virtual

Returns a handle to the underlying SST::Link.

Send a Request to the network.

◆ sendUntimedData()

void SST::Interfaces::SimpleNetwork::sendUntimedData ( Request req)
virtual

Sends a network request during untimed phases (init() and complete()).

See also
SST::Link::sendUntimedData()

For now, simply call sendInitData. Once that call is deprecated and removed, this will become a pure virtual function. This means that when classes implement SimpleNetwork, they will need to overload both sendUntimedData and sendInitData with identical functionality (or having the Init version call the Untimed version) until sendInitData is removed in SST 14.0.

◆ setNotifyOnReceive()

virtual void SST::Interfaces::SimpleNetwork::setNotifyOnReceive ( HandlerBase functor)
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.

Parameters
functorFunctor to call when request is received

◆ setNotifyOnSend()

virtual void SST::Interfaces::SimpleNetwork::setNotifyOnSend ( HandlerBase functor)
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.

Parameters
functorFunctor to call when request is sent

◆ setup()

virtual void SST::Interfaces::SimpleNetwork::setup ( void  )
inlineoverridevirtual

Called after all components have been constructed and initialization has completed, but before simulation time has begun.

Reimplemented from SST::SubComponent.

◆ spaceToSend()

virtual bool SST::Interfaces::SimpleNetwork::spaceToSend ( int  vn,
int  num_bits 
)
pure virtual

Checks if there is sufficient space to send on the specified virtual network.

Parameters
vnVirtual network to check
num_bitsMinimum size in bits required to have space to send
Returns
true if there is space in the output, false otherwise

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