SST 12.1.0
Structural Simulation Toolkit
SST::Interfaces::StandardMem Class Referenceabstract

Generic interface to Memory models. More...

#include <stdMem.h>

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

Data Structures

class  CustomData
 
class  CustomReq
 
class  CustomResp
 
class  FlushAddr
 
class  FlushResp
 Response to a flush request. More...
 
class  InvNotify
 Notifies endpoint that an address has been invalidated from the L1. More...
 
class  LoadLink
 Conditional atomic update. More...
 
class  MoveData
 Move: move data from one address to another Returns a WriteResp. More...
 
class  Read
 Read request. More...
 
class  ReadLock
 Locked atomic update -> guaranteed success A ReadLock must be followed by a WriteUnlock. More...
 
class  ReadResp
 Response to a Read. More...
 
class  Request
 Base class for StandardMem commands. More...
 
class  RequestConverter
 
class  RequestHandler
 
class  StoreConditional
 
class  Write
 Request to write data. More...
 
class  WriteResp
 Response to a Write. More...
 
class  WriteUnlock
 

Public Types

using HandlerBase = SSTHandlerBase< void, Request * >
 Base handler for request handling.
 
template<typename classT , typename dataT = void>
using Handler = SSTHandler< void, Request *, classT, dataT >
 Used to create handlers for request handling. More...
 
typedef uint64_t Addr
 All Addresses can be 64-bit.
 

Public Member Functions

 StandardMem (SST::ComponentId_t id, Params &UNUSED(params), TimeConverter *&UNUSED(time), HandlerBase *&UNUSED(handler))
 Constructor, designed to be used via 'loadUserSubComponent' and 'loadAnonymousSubComponent'. More...
 
virtual void sendUntimedData (Request *req)=0
 Sends a memory-based request during the init()/complete() phases. More...
 
virtual RequestrecvUntimedData ()=0
 Receive any data during the init()/complete() phases. More...
 
virtual void send (Request *req)=0
 Send a Request through the interface. More...
 
virtual Requestpoll (void)=0
 Receive a Request response from the side of the link. More...
 
virtual Addr getLineSize ()=0
 Get cache/memory line size (in bytes) from the memory system. More...
 
virtual void setMemoryMappedAddressRegion (Addr start, Addr size)=0
 Sets the physical memory address(es), if any, that are mapped to this endpoint. 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)
 
virtual void init (unsigned int UNUSED(phase)) override
 Used during the init phase. 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 finish () override
 Called after simulation completes, but before objects are destroyed. More...
 
- 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.
 
virtual void init (unsigned int UNUSED(phase))
 Used during the init phase. More...
 
virtual void complete (unsigned int UNUSED(phase))
 Used during the complete phase after the end of simulation. More...
 
virtual void setup ()
 Called after all components have been constructed and initialization has completed, but before simulation time has begun. More...
 
virtual void finish ()
 Called after complete phase, but before objects are destroyed. 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.
 
UnitAlgebra getFinalSimTime () 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.
 

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.
 
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 > * createStatistic (SST::Params &params, StatisticId_t id, const std::string &name, const std::string &statSubId)
 
template<typename T >
Statistics::Statistic< T > * createNullStatistic (SST::Params &params, const std::string &name, const std::string &statSubId="")
 
template<typename T >
Statistics::Statistic< T > * registerStatistic (SST::Params &params, const std::string &statName, const std::string &statSubId="", bool inserting=false)
 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...
 
ModuleloadModule (const std::string &type, Params &params)
 Loads a module from an element Library. 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
 
virtual 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 interface to Memory models.

Implementation notes Instructions can be sent into a memory system using derivatives of Request(). This interface can be used by both compute hosts (e.g., CPUs) and MMIO devices (e.g., accelerator). Not all interfaces/memory systems support all Request types. The interface should return an error if it encounters an unhandled type.

Request class:

  • Uses a separate class for each request type
  • Additional classes can be defined outside sst-core to add custom types
  • Requests and responses share the same ID
  • req.makeResponse() should be used to generate a correctly populated response event.
    • Any additional fields that need to be set manually are noted in function comments
  • req.needsResponse() should be used to determine whether a response should be sent.

Built-in commands Basic:

  • Reads, writes
  • Noncacheable reads, writes Flushes:
  • By address: flush and flush-invalidate Atomic updates:
  • Read-lock, Write-unlock
  • Load-link, Store-conditional Data movement:
  • Data move (copy data from one memory location to another, e.g., for scratchpad) Notifications:
  • Cache invalidation Custom:
  • CustomRequest, this is intended to be extended by users
  • CustomResponse, this is intended to be extended by users

Member Typedef Documentation

◆ Handler

template<typename classT , typename dataT = void>
using SST::Interfaces::StandardMem::Handler = SSTHandler<void, Request*, classT, dataT>

Used to create handlers for request handling.

The callback function is expected to be in the form of:

void func(Request* event)

In which case, the class is created with:

new StdMem::Handler<classname>(this, &classname::function_name)

Or, to add static data, the callback function is:

void func(Request* event, dataT data)

and the class is created with:

new stdMem::Handler<classname, dataT>(this, &classname::function_name, data)

Constructor & Destructor Documentation

◆ StandardMem()

SST::Interfaces::StandardMem::StandardMem ( SST::ComponentId_t  id,
Params UNUSEDparams,
TimeConverter *&  UNUSEDtime,
HandlerBase *&  UNUSEDhandler 
)
inline

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

Parameters
idComponent ID assigned to this subcomponent
paramsParameters passed to this subcomponent
timeTimeConverter indicating the time base (e.g., clock period) associated with this endpoint
handlerCallback function to use for event receives

Member Function Documentation

◆ getLineSize()

virtual Addr SST::Interfaces::StandardMem::getLineSize ( )
pure virtual

Get cache/memory line size (in bytes) from the memory system.

The memory system should provide this and it should be valid after the init() phase is complete, so processors can safely call this function during setup().

Returns
0 if the interface does not provide this capability or not relevant
line size of the memory system

◆ poll()

virtual Request * SST::Interfaces::StandardMem::poll ( void  )
pure virtual

Receive a Request response from the side of the link.

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

Returns
nullptr if nothing is available.
Pointer to a Request response Upon receipt, the receiver takes responsibility for deleting the event

◆ recvUntimedData()

virtual Request * SST::Interfaces::StandardMem::recvUntimedData ( )
pure virtual

Receive any data during the init()/complete() phases.

See also
SST::Link::recvInitData() Handler is not used during init()/complete(), parent must poll this interface to get received events.
Returns
Event if one was received, otherwise nullptr

◆ send()

virtual void SST::Interfaces::StandardMem::send ( Request req)
pure virtual

Send a Request through the interface.

Parameters
reqRequest to send

◆ sendUntimedData()

virtual void SST::Interfaces::StandardMem::sendUntimedData ( Request req)
pure virtual

Sends a memory-based request during the init()/complete() phases.

Parameters
reqRequest to send

◆ setMemoryMappedAddressRegion()

virtual void SST::Interfaces::StandardMem::setMemoryMappedAddressRegion ( Addr  start,
Addr  size 
)
pure virtual

Sets the physical memory address(es), if any, that are mapped to this endpoint.

Not required for endpoints that are not mapped into the memory address space.

Components loading this subcomponent as an MMIO device must call this function prior to SST's init() phase.

Parameters
startBase address of the region mapped to this endpoint
sizeSize, in bytes, of the region mapped to this endpoint

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