12#ifndef SST_CORE_BASECOMPONENT_H
13#define SST_CORE_BASECOMPONENT_H
15#include "sst/core/clock.h"
16#include "sst/core/componentInfo.h"
17#include "sst/core/eli/elementinfo.h"
18#include "sst/core/event.h"
19#include "sst/core/factory.h"
20#include "sst/core/oneshot.h"
21#include "sst/core/portModule.h"
22#include "sst/core/profile/componentProfileTool.h"
23#include "sst/core/serialization/serializable_base.h"
24#include "sst/core/serialization/serialize.h"
25#include "sst/core/sst_types.h"
26#include "sst/core/statapi/statbase.h"
27#include "sst/core/statapi/statengine.h"
28#include "sst/core/warnmacros.h"
35using namespace SST::Statistics;
54namespace Core::Serialization::pvt {
64 friend class Component;
65 friend class ComponentExtension;
66 friend class ComponentInfo;
67 friend class SubComponent;
68 friend class SubComponentSlotInfo;
71 using StatCreateFunction =
73 const std::string& ,
const std::string& ,
const std::string& ,
Params&)>;
75 BaseComponent() =
default;
78 explicit BaseComponent(ComponentId_t
id);
79 virtual ~BaseComponent();
81 BaseComponent(
const BaseComponent&) =
delete;
82 BaseComponent& operator=(
const BaseComponent&) =
delete;
84 const std::string& getType()
const {
return my_info->getType(); }
87 inline ComponentId_t
getId()
const {
return my_info->id_; }
98 inline const std::string&
getName()
const {
return my_info->getName(); }
107 virtual void init(
unsigned int UNUSED(phase)) {}
111 virtual void complete(
unsigned int UNUSED(phase)) {}
155 [[deprecated(
"Use of shared TimeConverter objects is deprecated. Use 'getCurrentSimTime(TimeConverter tc)' "
156 "(i.e., no pointer) instead.")]]
220 void removeWatchPointRecursive(
WatchPoint* pt);
275 "Use of shared TimeConverter objects is deprecated. Use 'configureLink(const std::string& name, TimeConverter "
276 "time_base, EventHandlerBase* handler)' (i.e., no TimeConverter pointer) instead.")]]
307 [[deprecated(
"Use of shared TimeConverter objects is deprecated. Use 'configureSelfLink(const std::string& name, "
308 "TimeConverter time_base, EventHandlerBase* handler)' (i.e., no TimeConverter pointer) instead.")]]
319 const std::string& name,
const std::string& time_base,
Event::HandlerBase* handler =
nullptr);
364 "Use of shared TimeConverter objects is deprecated. Use 'registerClock(TimeConverter tc, Clock::HandlerBase* "
365 "handler, bool regAll)' (i.e., no TimeConverter pointer) instead.")]]
370 [[deprecated(
"Use of shared TimeConverter objects is deprecated. Use 'unregisterClock(TimeConverter tc, "
371 "Clock::HandlerBase* handler)' (i.e., no TimeConverter pointer) instead.")]]
384 [[deprecated(
"Use of shared TimeConverter objects is deprecated. Use 'reregisterClock(TimeConverter freq, "
385 "Clock::HandlerBase* handler)' (i.e., no TimeConverter pointer) instead.")]]
397 "Use of shared TimeConverter objects is deprecated. Use 'getNextClockCycle(TimeConverter freq)' (i.e., "
398 "no TimeConverter pointer) instead.")]]
412 TimeConverter* getTimeConverter(
const std::string& base)
const;
415 bool isStatisticShared(
const std::string& statName,
bool include_me =
false)
418 if ( doesComponentInfoStatisticExist(statName) ) {
422 if ( my_info->sharesStatistics() ) {
423 return my_info->parent_info->component->isStatisticShared(statName,
true);
430 void initiateInteractive(
const std::string& msg);
433 ImplementSerializable(SST::BaseComponent)
434 void serialize_order(SST::Core::Serialization::serializer& ser)
override;
446 Link* configureLink_impl(
const std::string& name, SimTime_t time_base,
Event::HandlerBase* handler =
nullptr);
448 template <
typename T>
449 Statistics::Statistic<T>* createStatistic(
450 SST::Params& params, StatisticId_t
id,
const std::string& name,
const std::string& statSubId)
458 StatCreateFunction create = [=](BaseComponent* comp, Statistics::StatisticProcessingEngine* engine,
459 const std::string& type,
const std::string& name,
const std::string& subId,
460 SST::Params& params) -> Statistics::StatisticBase* {
461 return engine->createStatistic<T>(comp, type, name, subId, params);
468 Statistics::StatisticBase* base_stat =
469 id == STATALL_ID ? createEnabledAllStatistic(params, name, statSubId, std::move(create))
470 : getParentComponent()->createExplicitlyEnabledStatistic(
471 params, id, name, statSubId, std::move(create));
474 auto* statistic =
dynamic_cast<Statistics::Statistic<T>*
>(base_stat);
479 fatal(__LINE__, __FILE__,
"createStatistic", 1,
"failed to cast created statistic '%s' to expected type",
485 template <
typename T>
486 Statistics::Statistic<T>* createNullStatistic(
487 SST::Params& params,
const std::string& name,
const std::string& statSubId =
"")
489 auto* engine = getStatEngine();
490 return engine->createStatistic<T>(my_info->component,
"sst.NullStatistic", name, statSubId, params);
493 template <
typename T>
494 Statistics::Statistic<T>* registerStatistic(
495 SST::Params& params,
const std::string& statName,
const std::string& statSubId,
bool inserting)
497 if ( my_info->enabled_stat_names_ ) {
498 auto iter = my_info->enabled_stat_names_->find(statName);
499 if ( iter != my_info->enabled_stat_names_->end() ) {
503 StatisticId_t
id = iter->second;
504 return createStatistic<T>(params,
id, statName, statSubId);
509 if ( inserting || doesComponentInfoStatisticExist(statName) ) {
511 if ( my_info->enabled_all_stats_ ) {
512 return createStatistic<T>(params, STATALL_ID, statName, statSubId);
514 else if ( my_info->parent_info && my_info->canInsertStatistics() ) {
518 return my_info->parent_info->component->registerStatistic<T>(params, statName, statSubId,
true);
522 return my_info->component->createNullStatistic<T>(params, statName, statSubId);
525 else if ( my_info->parent_info && my_info->sharesStatistics() ) {
528 return my_info->parent_info->component->registerStatistic<T>(params, statName, statSubId,
false);
532 fatal(__LINE__, __FILE__,
"registerStatistic", 1,
"attempting to register unknown statistic '%s'",
556 template <
typename T>
558 SST::Params& params,
const std::string& statName,
const std::string& statSubId =
"")
560 return registerStatistic<T>(params, statName, statSubId,
false);
563 template <
typename T>
567 return registerStatistic<T>(empty, statName, statSubId,
false);
570 template <
typename... Args>
571 Statistics::Statistic<std::tuple<Args...>>* registerMultiStatistic(
572 const std::string& statName,
const std::string& statSubId =
"")
574 SST::Params empty {};
575 return registerStatistic<std::tuple<Args...>>(empty, statName, statSubId,
false);
578 template <
typename... Args>
579 Statistics::Statistic<std::tuple<Args...>>* registerMultiStatistic(
580 SST::Params& params,
const std::string& statName,
const std::string& statSubId =
"")
582 return registerStatistic<std::tuple<Args...>>(params, statName, statSubId,
false);
585 template <
typename T>
586 Statistics::Statistic<T>* registerStatistic(
const char* statName,
const char* statSubId =
"")
588 return registerStatistic<T>(std::string(statName), std::string(statSubId));
609 template <
typename T>
612 std::string full_point_name = getType() +
"." + pointName;
613 auto tools = getComponentProfileTools(full_point_name);
614 if ( tools.size() == 0 )
return nullptr;
616 typename T::ProfilePoint* ret =
new typename T::ProfilePoint();
617 for (
auto* x : tools ) {
618 T* tool =
dynamic_cast<T*
>(x);
619 if (
nullptr == tool ) {
621 fatal(CALL_INFO_LONG, 1,
"ERROR: wrong type of profiling tool for profiling point %s)\n",
624 ret->registerProfilePoint(tool, pointName,
getId(),
getName(), getType());
634 template <
class T,
class... ARGS>
639 return Factory::getFactory()->CreateWithParams<T>(type, params, params, args...);
648 template <
class T,
class... ARGS>
649 T* loadComponentExtension(ARGS... args)
652 return static_cast<T*
>(ret);
664 return Factory::getFactory()->isSubComponentLoadableUsingAPI<T>(type);
682 const std::map<ComponentId_t, ComponentInfo>& subcomps = my_info->getSubComponents();
685 for (
auto& ci : subcomps ) {
686 if ( ci.second.getSlotName() == slot_name ) {
687 index = ci.second.getSlotNum();
692 if ( sub_count > 1 ) {
694 outXX.
fatal(CALL_INFO, 1,
695 "Error: ComponentSlot \"%s\" in component \"%s\" only allows for one SubComponent, %d provided.\n",
696 slot_name.c_str(), my_info->getType().c_str(), sub_count);
699 return isUserSubComponentLoadableUsingAPIByIndex<T>(slot_name, index);
718 template <
class T,
class... ARGS>
720 uint64_t share_flags,
Params& params, ARGS... args)
723 share_flags = share_flags & ComponentInfo::USER_FLAGS;
724 ComponentId_t cid = my_info->addAnonymousSubComponent(my_info, type, slot_name, slot_num, share_flags);
725 ComponentInfo* sub_info = my_info->findSubComponent(cid);
728 if ( sub_info ==
nullptr )
return nullptr;
732 auto ret = Factory::getFactory()->CreateWithParams<T>(type, params, sub_info->id_, params, args...);
768 template <
class T,
class... ARGS>
775 const std::map<ComponentId_t, ComponentInfo>& subcomps = my_info->getSubComponents();
778 for (
auto& ci : subcomps ) {
779 if ( ci.second.getSlotName() == slot_name ) {
780 index = ci.second.getSlotNum();
785 if ( sub_count > 1 ) {
787 outXX.
fatal(CALL_INFO, 1,
788 "Error: ComponentSlot \"%s\" in component \"%s\" only allows for one SubComponent, %d provided.\n",
789 slot_name.c_str(), my_info->getType().c_str(), sub_count);
792 return loadUserSubComponentByIndex<T, ARGS...>(slot_name, index, share_flags, args...);
816 void fatal(uint32_t line,
const char* file,
const char* func,
int exit_code,
const char* format, ...) const
817 __attribute__((format(printf, 6, 7)));
842 void sst_assert(
bool condition, uint32_t line, const
char* file, const
char* func,
int exit_code,
843 const
char* format, ...) const __attribute__((format(printf, 7, 8)));
846 SimTime_t processCurrentTimeWithUnderflowedBase(const std::
string& base) const;
848 void configureCollectionMode(Statistics::
StatisticBase* statistic, const std::
string& name);
858 Statistics::
StatisticBase* createExplicitlyEnabledStatistic(SST::
Params& params, StatisticId_t
id,
859 const std::
string& name, const std::
string& statSubId, StatCreateFunction create);
871 const std::
string& name, const std::
string& statSubId,
bool check_load_level, StatCreateFunction create);
874 SST::
Params& params, const std::
string& name, const std::
string& statSubId, StatCreateFunction create);
876 void configureAllowedStatParams(SST::
Params& params);
880 void pushValidParams(
Params& params, const std::
string& type);
882 template <class T, class... ARGS>
883 T* loadUserSubComponentByIndex(const std::
string& slot_name,
int slot_num,
int share_flags, ARGS... args)
886 share_flags = share_flags & ComponentInfo::USER_FLAGS;
889 ComponentInfo* sub_info = my_info->findSubComponent(slot_name, slot_num);
890 if ( sub_info ==
nullptr )
return nullptr;
891 sub_info->share_flags = share_flags;
892 sub_info->parent_info = my_info;
895 auto ret = Factory::getFactory()->CreateWithParams<T>(
896 sub_info->type, *sub_info->params, sub_info->id_, *sub_info->params, args...);
903 bool isUserSubComponentLoadableUsingAPIByIndex(
const std::string& slot_name,
int slot_num)
906 ComponentInfo* sub_info = my_info->findSubComponent(slot_name, slot_num);
907 if ( sub_info ==
nullptr )
return false;
914 void vfatal(uint32_t line,
const char* file,
const char* func,
int exit_code,
const char* format, va_list arg)
const
915 __attribute__((format(printf, 6, 0)));
918 StatisticProcessingEngine* getStatEngine();
921 SubComponentSlotInfo* getSubComponentSlotInfo(
const std::string& name,
bool fatalOnEmptyIndex =
false);
924 const std::vector<double>&
getCoordinates()
const {
return my_info->coordinates; }
930 bool isAnonymous() {
return my_info->isAnonymous(); }
932 bool isUser() {
return my_info->isUser(); }
935 [[deprecated(
"Use of shared TimeConverter objects is deprecated. Use 'setDefaultTimeBase(TimeConverter tc)' "
936 "(i.e., no TimeConverter pointer) instead.")]]
939 my_info->defaultTimeBase = tc;
950 bool doesSubComponentExist(
const std::string& type);
953 bool doesComponentInfoStatisticExist(
const std::string& statisticName)
const;
955 uint8_t getComponentInfoStatisticEnableLevel(
const std::string& statisticName)
const;
959 std::vector<Profile::ComponentProfileTool*> getComponentProfileTools(
const std::string& point);
967 bool isExtension =
false;
971 std::vector<Clock::HandlerBase*> clock_handlers;
973 void addSelfLink(
const std::string& name);
974 Link* getLinkFromParentSharedPort(
const std::string& port, std::vector<ConfigPortModule>& port_modules);
976 using StatNameMap = std::map<std::string, std::map<std::string, Statistics::StatisticBase*>>;
978 std::vector<PortModule*> portModules;
979 std::map<StatisticId_t, Statistics::StatisticBase*> m_explicitlyEnabledSharedStats;
980 std::map<StatisticId_t, StatNameMap> m_explicitlyEnabledUniqueStats;
981 StatNameMap m_enabled_all_stats_;
986 while ( base_info->parent_info ) {
987 base_info = base_info->parent_info;
989 return base_info->component;
998class SubComponentSlotInfo
1002 std::string slot_name;
1006 ~SubComponentSlotInfo() {}
1008 SubComponentSlotInfo(
BaseComponent* comp,
const std::string& slot_name) :
1010 slot_name(slot_name)
1012 const std::map<ComponentId_t, ComponentInfo>& subcomps = comp->my_info->getSubComponents();
1015 max_slot_index = -1;
1016 for (
auto& ci : subcomps ) {
1017 if ( ci.second.getSlotName() == slot_name ) {
1018 if ( ci.second.getSlotNum() >
static_cast<int>(max_slot_index) ) {
1019 max_slot_index = ci.second.getSlotNum();
1025 const std::string& getSlotName()
const {
return slot_name; };
1027 bool isPopulated(
int slot_num)
const
1029 if ( slot_num > max_slot_index )
return false;
1030 if ( comp->my_info->findSubComponent(slot_name, slot_num) ==
nullptr )
return false;
1034 bool isAllPopulated()
const
1036 for (
int i = 0; i < max_slot_index; ++i ) {
1037 if ( comp->my_info->findSubComponent(slot_name, i) ==
nullptr )
return false;
1042 int getMaxPopulatedSlotNumber()
const {
return max_slot_index; }
1054 return comp->isUserSubComponentLoadableUsingAPIByIndex<T>(slot_name, slot_num);
1073 template <
typename T>
1077 return comp->loadUserSubComponentByIndex<T>(slot_name, slot_num, ComponentInfo::SHARE_NONE);
1094 template <
class T,
class... ARGS>
1095 T*
create(
int slot_num, uint64_t share_flags, ARGS... args)
const
1097 return comp->loadUserSubComponentByIndex<T, ARGS...>(slot_name, slot_num, share_flags, args...);
1118 template <
typename T,
class... ARGS>
1119 void createAll(std::vector<T*>& vec, uint64_t share_flags, ARGS... args)
const
1121 for (
int i = 0; i <= getMaxPopulatedSlotNumber(); ++i ) {
1122 T* sub =
create<T>(i, share_flags, args...);
1144 template <
typename T,
class... ARGS>
1145 void createAllSparse(std::vector<std::pair<int, T*>>& vec, uint64_t share_flags, ARGS... args)
const
1147 for (
int i = 0; i <= getMaxPopulatedSlotNumber(); ++i ) {
1148 T* sub =
create<T>(i, share_flags, args...);
1149 if ( sub !=
nullptr ) vec.push_back(i, sub);
1169 template <
typename T,
class... ARGS>
1172 for (
int i = 0; i <= getMaxPopulatedSlotNumber(); ++i ) {
1173 T* sub =
create<T>(i, share_flags, args...);
1174 if ( sub !=
nullptr ) vec.push_back(sub);
1179namespace Core::Serialization {
1200 void operator()(T*& s,
serializer& ser, ser_opt_t UNUSED(options))
1203 switch ( ser.mode() ) {
1204 case serializer::SIZER:
1205 pvt::SerializeBaseComponentHelper::size_basecomponent(sp, ser);
1207 case serializer::PACK:
1208 pvt::SerializeBaseComponentHelper::pack_basecomponent(sp, ser);
1210 case serializer::UNPACK:
1211 pvt::SerializeBaseComponentHelper::unpack_basecomponent(sp, ser);
1213 case serializer::MAP:
1214 pvt::SerializeBaseComponentHelper::map_basecomponent(sp, ser, ser.getMapName());
1217 s =
static_cast<T*
>(sp);
1220 SST_FRIEND_SERIALIZE();
Main component object for the simulation.
Definition baseComponent.h:62
bool isSimulationRunModeInit() const
Check to see if the run mode was set to INIT.
Definition baseComponent.cc:635
SimTime_t getCurrentSimTimeMilli() const
Utility function to return the time since the simulation began in milliseconds.
Definition baseComponent.cc:608
TimeConverter * registerTimeBase(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...
Definition baseComponent.cc:218
virtual void complete(unsigned int UNUSED(phase))
Used during the complete phase after the end of simulation.
Definition baseComponent.h:111
void requireLibrary(const std::string &name)
Signifies that a library is required for this simulation.
Definition baseComponent.cc:659
bool isSimulationRunModeRun() const
Check to see if the run mode was set to RUN.
Definition baseComponent.cc:641
Link * configureLink(const std::string &name, TimeConverter *time_base, Event::HandlerBase *handler=nullptr)
Configure a Link.
Definition baseComponent.cc:398
Link * configureSelfLink(const std::string &name, TimeConverter *time_base, Event::HandlerBase *handler=nullptr)
Configure a SelfLink (Loopback link)
Definition baseComponent.cc:461
void setDefaultTimeBase(TimeConverter tc)
Manually set the default defaultTimeBase.
Definition baseComponent.h:943
bool isPortConnected(const std::string &name) const
Determine if a port name is connected to any links.
Definition baseComponent.cc:244
void fatal(uint32_t line, const char *file, const char *func, int exit_code, const char *format,...) const
Convenience function for reporting fatal conditions.
Definition baseComponent.cc:702
double getRunPhaseElapsedRealTime() const
Get the amount of real-time spent executing the run phase of the simulation.
Definition baseComponent.cc:617
void removeWatchPoint(WatchPoint *pt)
Remove a watch point from all handlers in the Component Tree.
Definition baseComponent.cc:1052
T * loadUserSubComponent(const std::string &slot_name)
Loads a user defined subcomponent (defined in input file to SST run).
Definition baseComponent.h:750
const std::string & getName() const
Returns Component/SubComponent Name.
Definition baseComponent.h:98
Statistics::Statistic< T > * registerStatistic(SST::Params ¶ms, const std::string &statName, const std::string &statSubId="")
Registers a statistic.
Definition baseComponent.h:557
virtual void setup()
Called after all components have been constructed and initialization has completed,...
Definition baseComponent.h:115
Cycle_t getNextClockCycle(TimeConverter *freq)
Returns the next Cycle that the TimeConverter would fire If called prior to the simulation run loop,...
Definition baseComponent.cc:200
uint8_t getStatisticLoadLevel() const
Returns Component Statistic load level.
Definition baseComponent.h:90
UnitAlgebra getCoreTimeBase() const
Get the core timebase.
Definition baseComponent.cc:489
std::string & getOutputDirectory() const
Returns the output directory of the simulation.
Definition baseComponent.cc:653
double getCompletePhaseElapsedRealTime() const
Get the amount of real-time spent executing the complete phase of the simulation.
Definition baseComponent.cc:629
void performStatisticOutput(Statistics::StatisticBase *stat)
Called by the Components and Subcomponent to perform a statistic Output.
Definition baseComponent.cc:931
int getCurrentPriority() const
Return the current priority.
Definition baseComponent.cc:501
double getInitPhaseElapsedRealTime() const
Get the amount of real-time spent executing the init phase of the simulation.
Definition baseComponent.cc:623
void performGlobalStatisticOutput()
Performs a global statistic Output.
Definition baseComponent.cc:937
bool isSubComponentLoadableUsingAPI(const std::string &type)
Check to see if a given element type is loadable with a particular API.
Definition baseComponent.h:662
const std::vector< double > & getCoordinates() const
Retrieve the X,Y,Z coordinates of this component.
Definition baseComponent.h:924
T::ProfilePoint * registerProfilePoint(const std::string &pointName)
Registers a profiling point.
Definition baseComponent.h:610
const std::string & getParentComponentName() const
Returns the name of the parent Component, or, if called on a Component, the name of that Component.
Definition baseComponent.h:102
virtual void init(unsigned int UNUSED(phase))
Used during the init phase.
Definition baseComponent.h:107
Output & getSimulationOutput() const
Return the base simulation Output class instance.
Definition baseComponent.cc:537
SimTime_t getCurrentSimTime() const
Return the simulated time since the simulation began in the default timebase.
Definition baseComponent.h:164
UnitAlgebra getElapsedSimTime() const
Return the elapsed simulation time as a time.
Definition baseComponent.cc:507
SimTime_t getCurrentSimTimeMicro() const
Utility function to return the time since the simulation began in microseconds.
Definition baseComponent.cc:600
void addWatchPoint(WatchPoint *pt)
Add a watch point to all handlers in the Component Tree.
Definition baseComponent.cc:1004
RankInfo getNumRanks() const
Get the number of parallel ranks in the simulation.
Definition baseComponent.cc:531
UnitAlgebra getEndSimTime() const
Return the end simulation time as a time.
Definition baseComponent.cc:519
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.
Definition baseComponent.cc:711
bool isSimulationRunModeBoth() const
Check to see if the run mode was set to BOTH.
Definition baseComponent.cc:647
RankInfo getRank() const
Get this instance's parallel rank.
Definition baseComponent.cc:525
virtual void emergencyShutdown()
Called when SIGINT or SIGTERM has been seen.
Definition baseComponent.h:95
TimeConverter * registerClock(const std::string &freq, Clock::HandlerBase *handler, bool regAll=true)
Registers a clock for this component.
Definition baseComponent.cc:156
void setDefaultTimeBase(TimeConverter *tc)
Manually set the default defaultTimeBase.
Definition baseComponent.h:937
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).
Definition baseComponent.h:769
SimTime_t getCurrentSimTimeNano() const
Utility function to return the time since the simulation began in nanoseconds.
Definition baseComponent.cc:592
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).
Definition baseComponent.h:719
void unregisterClock(TimeConverter *tc, Clock::HandlerBase *handler)
Removes a clock handler from the component.
Definition baseComponent.cc:212
ComponentId_t getId() const
Returns unique component ID.
Definition baseComponent.h:87
Cycle_t reregisterClock(TimeConverter *freq, Clock::HandlerBase *handler)
Reactivates an existing Clock and Handler.
Definition baseComponent.cc:194
bool isUserSubComponentLoadableUsingAPI(const std::string &slot_name)
Check to see if the element type loaded by the user into the.
Definition baseComponent.h:677
virtual void finish()
Called after complete phase, but before objects are destroyed.
Definition baseComponent.h:118
SimTime_t getEndSimCycle() const
Return the end simulation time as a cycle count.
Definition baseComponent.cc:513
virtual bool Status()
Currently unused function.
Definition baseComponent.h:121
SimTime_t getCurrentSimCycle() const
Return the current simulation time as a cycle count.
Definition baseComponent.cc:495
virtual void printStatus(Output &UNUSED(out))
Called by the Simulation to request that the component print it's current status.
Definition baseComponent.h:128
T * loadModule(const std::string &type, Params ¶ms, ARGS... args)
Loads a module from an element Library.
Definition baseComponent.h:635
A Clock class.
Definition clock.h:34
SSTHandlerBase< bool, Cycle_t > HandlerBase
Base handler for clock functions.
Definition clock.h:43
ComponentExtension is a class that can be loaded using loadComponentExtension<T>(....
Definition componentExtension.h:29
Definition componentInfo.h:42
Main component object for the simulation.
Definition component.h:31
Definition baseComponent.h:1183
Definition serializable_base.h:119
Base serialize class.
Definition serialize.h:110
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition serializer.h:45
SSTHandlerBase< void, Event * > HandlerBase
Base handler for event delivery.
Definition event.h:40
Maps port names to the Links that are connected to it.
Definition linkMap.h:29
Link between two components.
Definition link.h:55
Module is a tag class used with the loadModule function.
Definition module.h:26
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file.
Definition output.h:54
void fatal(uint32_t line, const char *file, const char *func, int exit_code, const char *format,...) const
Output the fatal message with formatting as specified by the format parameter.
Definition output.cc:154
@ STDERR
Definition output.h:61
Parameter store.
Definition params.h:58
Main control class for a SST Simulation.
Definition simulation_impl.h:87
Forms the base class for statistics gathering within SST.
Definition statbase.h:49
An SST core component that handles timing and event processing informing all registered Statistics to...
Definition statengine.h:58
Forms the template defined base class for statistics gathering within SST.
Definition statbase.h:373
Used to load SubComponents when multiple SubComponents are loaded into a single slot (will also also ...
Definition baseComponent.h:999
T * create(int slot_num) const
Create a user defined subcomponent (defined in input file to SST run).
Definition baseComponent.h:1074
void createAllSparse(std::vector< std::pair< int, T * > > &vec, uint64_t share_flags, ARGS... args) const
Create all user defined subcomponents (defined in input file to SST run) for the slot.
Definition baseComponent.h:1145
bool isLoadableUsingAPI(int slot_num)
Check to see if the element type loaded by the user into the specified slot index is loadable with a ...
Definition baseComponent.h:1052
void createAll(std::vector< T * > &vec, uint64_t share_flags, ARGS... args) const
Create all user defined subcomponents (defined in input file to SST run) for the slot.
Definition baseComponent.h:1119
T * create(int slot_num, uint64_t share_flags, ARGS... args) const
Create a user defined subcomponent (defined in input file to SST run).
Definition baseComponent.h:1095
void createAllSparse(std::vector< T * > &vec, uint64_t share_flags, ARGS... args) const
Create all user defined subcomponents (defined in input file to SST run) for the slot.
Definition baseComponent.h:1170
SubComponent is a class loadable through the factory which allows dynamic functionality to be added t...
Definition subcomponent.h:29
A class to convert between a component's view of time and the core's view of time.
Definition timeConverter.h:28
Performs Unit math in full precision.
Definition unitAlgebra.h:107
Class that can attach to Clock and Event Handlers to monitor the state of variables.
Definition watchPoint.h:27