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/portModule.h" 21 #include "sst/core/profile/componentProfileTool.h" 22 #include "sst/core/serialization/serializable_base.h" 23 #include "sst/core/serialization/serialize.h" 24 #include "sst/core/sst_types.h" 25 #include "sst/core/statapi/statbase.h" 26 #include "sst/core/statapi/statengine.h" 27 #include "sst/core/warnmacros.h" 34 #include <type_traits> 43 class ComponentExtension;
50 class Simulation_impl;
52 class SubComponentSlotInfo;
57 namespace Core::Serialization::pvt {
58 class SerializeBaseComponentHelper;
87 const std::string& getType()
const {
return my_info_->getType(); }
90 inline ComponentId_t
getId()
const {
return my_info_->id_; }
101 inline const std::string&
getName()
const {
return my_info_->getName(); }
110 virtual void init(
unsigned int UNUSED(phase)) {}
114 virtual void complete(
unsigned int UNUSED(phase)) {}
136 SimTime_t getCurrentSimCycle()
const;
138 int getCurrentPriority()
const;
142 SimTime_t getEndSimCycle()
const;
150 Output& getSimulationOutput()
const;
158 [[deprecated(
"Use of shared TimeConverter objects is deprecated. Use 'getCurrentSimTime(TimeConverter tc)' " 159 "(i.e., no pointer) instead.")]]
175 SimTime_t getCurrentSimTime(
const std::string& base)
const;
178 SimTime_t getCurrentSimTimeNano()
const;
180 SimTime_t getCurrentSimTimeMicro()
const;
182 SimTime_t getCurrentSimTimeMilli()
const;
189 double getRunPhaseElapsedRealTime()
const;
196 double getInitPhaseElapsedRealTime()
const;
203 double getCompletePhaseElapsedRealTime()
const;
223 void removeWatchPointRecursive(
WatchPoint* pt);
229 bool isSimulationRunModeInit()
const;
234 bool isSimulationRunModeRun()
const;
239 bool isSimulationRunModeBoth()
const;
246 std::string& getOutputDirectory()
const;
263 void requireLibrary(
const std::string& name);
267 bool isPortConnected(
const std::string& name)
const;
278 "Use of shared TimeConverter objects is deprecated. Use 'configureLink(const std::string& name, TimeConverter " 279 "time_base, EventHandlerBase* handler)' (i.e., no TimeConverter pointer) instead.")]]
288 Link* configureLink(
const std::string& name,
const std::string& time_base,
Event::HandlerBase* handler =
nullptr);
310 [[deprecated(
"Use of shared TimeConverter objects is deprecated. Use 'configureSelfLink(const std::string& name, " 311 "TimeConverter time_base, EventHandlerBase* handler)' (i.e., no TimeConverter pointer) instead.")]]
321 Link* configureSelfLink(
322 const std::string& name,
const std::string& time_base,
Event::HandlerBase* handler =
nullptr);
329 Link* configureSelfLink(
367 "Use of shared TimeConverter objects is deprecated. Use 'registerClock(TimeConverter tc, Clock::HandlerBase* " 368 "handler, bool regAll)' (i.e., no TimeConverter pointer) instead.")]]
373 [[deprecated(
"Use of shared TimeConverter objects is deprecated. Use 'unregisterClock(TimeConverter tc, " 374 "Clock::HandlerBase* handler)' (i.e., no TimeConverter pointer) instead.")]]
387 [[deprecated(
"Use of shared TimeConverter objects is deprecated. Use 'reregisterClock(TimeConverter freq, " 388 "Clock::HandlerBase* handler)' (i.e., no TimeConverter pointer) instead.")]]
400 "Use of shared TimeConverter objects is deprecated. Use 'getNextClockCycle(TimeConverter freq)' (i.e., " 401 "no TimeConverter pointer) instead.")]]
413 TimeConverter* registerTimeBase(
const std::string& base,
bool regAll =
true);
415 TimeConverter* getTimeConverter(
const std::string& base)
const;
418 bool isStatisticShared(
const std::string& stat_name,
bool include_me =
false)
421 if ( getStatisticValidityAndLevel(stat_name) != 255 ) {
425 if ( my_info_->sharesStatistics() ) {
426 return my_info_->parent_info->component->isStatisticShared(stat_name,
true);
433 void initiateInteractive(
const std::string& msg);
449 Link* configureLink_impl(
const std::string& name, SimTime_t time_base,
Event::HandlerBase* handler =
nullptr);
460 template <
typename T>
461 Statistics::Statistic<T>* createStatistic(
462 SST::Params& params, StatisticId_t
id,
const std::string& name,
const std::string& stat_sub_id)
472 StatCreateFunction create = [=](BaseComponent* comp, Statistics::StatisticProcessingEngine* engine,
473 const std::string& name,
const std::string& sub_id,
474 SST::Params& params) -> Statistics::StatisticBase* {
475 return engine->createStatistic<T>(comp, name, sub_id, params);
482 Statistics::StatisticBase* base_stat =
483 id == STATALL_ID ? createEnabledAllStatistic(params, name, stat_sub_id, std::move(create))
484 : getParentComponent()->createExplicitlyEnabledStatistic(
485 params, id, name, stat_sub_id, std::move(create));
488 auto* statistic =
dynamic_cast<Statistics::Statistic<T>*
>(base_stat);
493 fatal(__LINE__, __FILE__,
"createStatistic", 1,
"failed to cast created statistic '%s' to expected type",
504 template <
typename T>
505 Statistics::Statistic<T>* registerStatistic_impl(
506 SST::Params& params,
const std::string& stat_name,
const std::string& stat_sub_id, uint8_t level = 255)
508 if ( level == 255 ) {
509 level = getStatisticValidityAndLevel(stat_name);
512 if ( level == 255 ) {
514 if ( my_info_->parent_info && my_info_->sharesStatistics() ) {
515 return my_info_->parent_info->component->registerStatistic_impl<T>(params, stat_name, stat_sub_id);
519 fatal(__LINE__, __FILE__,
"registerStatistic", 1,
520 "attempting to register a statistic '%s' that is not found in ELI", stat_name.c_str());
525 if ( my_info_->enabled_stat_names_ ) {
526 auto iter = my_info_->enabled_stat_names_->find(stat_name);
527 if ( iter != my_info_->enabled_stat_names_->end() ) {
531 StatisticId_t
id = iter->second;
532 return getParentComponent()->createStatistic<T>(params, id, stat_name, stat_sub_id);
537 if ( my_info_->enabled_all_stats_ ) {
538 if ( level > getStatisticLoadLevel() ) {
539 return getStatEngine()->createDisabledStatistic<T>();
541 return createStatistic<T>(params, STATALL_ID, stat_name, stat_sub_id);
543 else if ( my_info_->parent_info && my_info_->canInsertStatistics() ) {
545 return my_info_->parent_info->component->registerStatistic_impl<T>(params, stat_name, stat_sub_id, level);
549 return getStatEngine()->createDisabledStatistic<T>();
571 template <
typename T>
573 SST::Params& params,
const std::string& stat_name,
const std::string& stat_sub_id =
"")
575 return registerStatistic_impl<T>(params, stat_name, stat_sub_id);
578 template <
typename T>
582 return registerStatistic_impl<T>(empty, stat_name, stat_sub_id);
585 template <
typename... Args>
586 Statistics::Statistic<std::tuple<Args...>>* registerMultiStatistic(
587 const std::string& stat_name,
const std::string& stat_sub_id =
"")
590 return registerStatistic_impl<std::tuple<Args...>>(empty, stat_name, stat_sub_id);
593 template <
typename... Args>
594 Statistics::Statistic<std::tuple<Args...>>* registerMultiStatistic(
595 SST::Params& params,
const std::string& stat_name,
const std::string& stat_sub_id =
"")
597 return registerStatistic_impl<std::tuple<Args...>>(params, stat_name, stat_sub_id);
600 template <
typename T>
601 Statistics::Statistic<T>* registerStatistic(
const char* stat_name,
const char* stat_sub_id =
"")
603 return registerStatistic<T>(std::string(stat_name), std::string(stat_sub_id));
609 void performStatisticOutput(Statistics::StatisticBase* stat);
616 void performGlobalStatisticOutput();
623 template <
typename T>
626 std::string full_point_name = getType() +
"." + pointName;
627 auto tools = getComponentProfileTools(full_point_name);
628 if ( tools.size() == 0 )
return nullptr;
630 typename T::ProfilePoint* ret =
new typename T::ProfilePoint();
631 for (
auto* x : tools ) {
632 T* tool =
dynamic_cast<T*
>(x);
633 if (
nullptr == tool ) {
635 fatal(CALL_INFO_LONG, 1,
"ERROR: wrong type of profiling tool for profiling point %s)\n",
638 ret->registerProfilePoint(tool, pointName, getId(), getName(), getType());
648 template <
class T,
class... ARGS>
652 return Factory::getFactory()->CreateWithParams<T>(type, params, params, args...);
661 template <
class T,
class... ARGS>
662 T* loadComponentExtension(ARGS... args)
665 return static_cast<T*
>(ret);
677 return Factory::getFactory()->isSubComponentLoadableUsingAPI<T>(type);
695 const std::map<ComponentId_t, ComponentInfo>& subcomps = my_info_->getSubComponents();
698 for (
auto& ci : subcomps ) {
699 if ( ci.second.getSlotName() == slot_name ) {
700 index = ci.second.getSlotNum();
705 if ( sub_count > 1 ) {
707 outXX.
fatal(CALL_INFO, 1,
708 "Error: ComponentSlot \"%s\" in component \"%s\" only allows for one SubComponent, %d provided.\n",
709 slot_name.c_str(), my_info_->getType().c_str(), sub_count);
712 return isUserSubComponentLoadableUsingAPIByIndex<T>(slot_name, index);
731 template <
class T,
class... ARGS>
733 uint64_t share_flags,
Params& params, ARGS... args)
736 share_flags = share_flags & ComponentInfo::USER_FLAGS;
737 ComponentId_t cid = my_info_->addAnonymousSubComponent(my_info_, type, slot_name, slot_num, share_flags);
741 if ( sub_info ==
nullptr )
return nullptr;
744 if ( isSubComponentLoadableUsingAPI<T>(type) ) {
745 auto ret = Factory::getFactory()->CreateWithParams<T>(type, params, sub_info->id_, params, args...);
765 return loadUserSubComponent<T>(slot_name, ComponentInfo::SHARE_NONE);
781 template <
class T,
class... ARGS>
788 const std::map<ComponentId_t, ComponentInfo>& subcomps = my_info_->getSubComponents();
791 for (
auto& ci : subcomps ) {
792 if ( ci.second.getSlotName() == slot_name ) {
793 index = ci.second.getSlotNum();
798 if ( sub_count > 1 ) {
800 outXX.
fatal(CALL_INFO, 1,
801 "Error: ComponentSlot \"%s\" in component \"%s\" only allows for one SubComponent, %d provided.\n",
802 slot_name.c_str(), my_info_->getType().c_str(), sub_count);
805 return loadUserSubComponentByIndex<T, ARGS...>(slot_name, index, share_flags, args...);
829 void fatal(uint32_t line,
const char* file,
const char* func,
int exit_code,
const char* format, ...) const
830 __attribute__((format(printf, 6, 7)));
855 void sst_assert(
bool condition, uint32_t line, const
char* file, const
char* func,
int exit_code,
856 const
char* format, ...) const __attribute__((format(printf, 7, 8)));
859 SimTime_t processCurrentTimeWithUnderflowedBase(const std::
string& base) const;
870 const std::
string& name, const std::
string& stat_sub_id, StatCreateFunction create);
873 SST::
Params& params, const std::
string& name, const std::
string& stat_sub_id, StatCreateFunction create);
877 void pushValidParams(
Params& params, const std::
string& type);
879 template <class T, class... ARGS>
880 T* loadUserSubComponentByIndex(const std::
string& slot_name,
int slot_num,
int share_flags, ARGS... args)
883 share_flags = share_flags & ComponentInfo::USER_FLAGS;
886 ComponentInfo* sub_info = my_info_->findSubComponent(slot_name, slot_num);
887 if ( sub_info ==
nullptr )
return nullptr;
888 sub_info->share_flags = share_flags;
889 sub_info->parent_info = my_info_;
891 if ( isSubComponentLoadableUsingAPI<T>(sub_info->type) ) {
892 auto ret = Factory::getFactory()->CreateWithParams<T>(
893 sub_info->type, *sub_info->params, sub_info->id_, *sub_info->params, args...);
900 bool isUserSubComponentLoadableUsingAPIByIndex(
const std::string& slot_name,
int slot_num)
903 ComponentInfo* sub_info = my_info_->findSubComponent(slot_name, slot_num);
904 if ( sub_info ==
nullptr )
return false;
906 return isSubComponentLoadableUsingAPI<T>(sub_info->type);
911 void vfatal(uint32_t line,
const char* file,
const char* func,
int exit_code,
const char* format, va_list arg)
const 912 __attribute__((format(printf, 6, 0)));
918 SubComponentSlotInfo* getSubComponentSlotInfo(
const std::string& name,
bool fatalOnEmptyIndex =
false);
921 const std::vector<double>&
getCoordinates()
const {
return my_info_->coordinates; }
927 bool isAnonymous() {
return my_info_->isAnonymous(); }
929 bool isUser() {
return my_info_->isUser(); }
932 [[deprecated(
"Use of shared TimeConverter objects is deprecated. Use 'setDefaultTimeBase(TimeConverter tc)' " 933 "(i.e., no TimeConverter pointer) instead.")]]
936 my_info_->defaultTimeBase = tc;
947 bool doesSubComponentExist(
const std::string& type);
950 uint8_t getStatisticValidityAndLevel(
const std::string& statisticName)
const;
952 std::vector<Profile::ComponentProfileTool*> getComponentProfileTools(
const std::string& point);
977 void registerAsPrimaryComponent();
998 void primaryComponentDoNotEndSim();
1015 void primaryComponentOKToEndSim();
1019 enum class ComponentState : uint8_t {
1023 DoNotEndSim = 1 << 1,
1024 OKToEndSim = 1 << 2,
1035 bool isStatePrimary()
1037 return static_cast<uint8_t
>(component_state_) & static_cast<uint8_t>(ComponentState::Primary);
1045 bool isStateDoNotEndSim()
1047 return static_cast<uint8_t
>(component_state_) & static_cast<uint8_t>(ComponentState::DoNotEndSim);
1055 bool isStateOKToEndSim()
1057 return static_cast<uint8_t
>(component_state_) & static_cast<uint8_t>(ComponentState::OKToEndSim);
1067 return static_cast<uint8_t
>(component_state_) & static_cast<uint8_t>(ComponentState::Extension);
1078 void setStateAsPrimary()
1080 component_state_ =
static_cast<ComponentState
>(
1081 static_cast<uint8_t
>(component_state_) | static_cast<uint8_t>(ComponentState::Primary));
1092 void setStateDoNotEndSim()
1094 component_state_ =
static_cast<ComponentState
>(
1095 static_cast<uint8_t
>(component_state_) | static_cast<uint8_t>(ComponentState::DoNotEndSim));
1096 component_state_ =
static_cast<ComponentState
>(
1097 static_cast<uint8_t
>(component_state_) & ~static_cast<uint8_t>(ComponentState::OKToEndSim));
1108 void setStateOKToEndSim()
1110 component_state_ =
static_cast<ComponentState
>(
1111 static_cast<uint8_t
>(component_state_) | static_cast<uint8_t>(ComponentState::OKToEndSim));
1112 component_state_ =
static_cast<ComponentState
>(
1113 static_cast<uint8_t
>(component_state_) & ~static_cast<uint8_t>(ComponentState::DoNotEndSim));
1119 void setAsExtension()
1121 component_state_ =
static_cast<ComponentState
>(
1122 static_cast<uint8_t
>(component_state_) | static_cast<uint8_t>(ComponentState::Extension));
1126 friend class Core::Serialization::pvt::SerializeBaseComponentHelper;
1129 ComponentInfo* my_info_ =
nullptr;
1130 Simulation_impl* sim_ =
nullptr;
1133 ComponentState component_state_ = ComponentState::None;
1138 std::vector<Clock::HandlerBase*> clock_handlers_;
1139 std::set<SimTime_t> registered_clocks_;
1141 void addSelfLink(
const std::string& name);
1142 Link* getLinkFromParentSharedPort(
const std::string& port, std::vector<ConfigPortModule>& port_modules);
1144 using StatNameMap = std::map<std::string, std::map<std::string, Statistics::StatisticBase*>>;
1146 ConfigPortModule& getPortModuleConfig(PortModuleId_t);
1148 static thread_local std::pair<ComponentId_t, PortModuleId_t> port_module_id_;
1150 std::vector<PortModule*> port_modules_;
1152 std::map<StatisticId_t, Statistics::StatisticBase*>
1153 explicitly_enabled_shared_stats_;
1156 std::map<StatisticId_t, StatNameMap>
1157 explicitly_enabled_unique_stats_;
1159 StatNameMap enabled_all_stats_;
1161 BaseComponent* getParentComponent()
1163 ComponentInfo* base_info = my_info_;
1164 while ( base_info->parent_info ) {
1165 base_info = base_info->parent_info;
1167 return base_info->component;
1180 std::string slot_name;
1188 slot_name(slot_name)
1190 const std::map<ComponentId_t, ComponentInfo>& subcomps = comp->my_info_->getSubComponents();
1193 max_slot_index = -1;
1194 for (
auto& ci : subcomps ) {
1195 if ( ci.second.getSlotName() == slot_name ) {
1196 if ( ci.second.getSlotNum() >
static_cast<int>(max_slot_index) ) {
1197 max_slot_index = ci.second.getSlotNum();
1203 const std::string& getSlotName()
const {
return slot_name; };
1205 bool isPopulated(
int slot_num)
const 1207 if ( slot_num > max_slot_index )
return false;
1208 if ( comp->my_info_->findSubComponent(slot_name, slot_num) == nullptr )
return false;
1212 bool isAllPopulated()
const 1214 for (
int i = 0; i < max_slot_index; ++i ) {
1215 if ( comp->my_info_->findSubComponent(slot_name, i) == nullptr )
return false;
1220 int getMaxPopulatedSlotNumber()
const {
return max_slot_index; }
1232 return comp->isUserSubComponentLoadableUsingAPIByIndex<T>(slot_name, slot_num);
1251 template <
typename T>
1255 return comp->loadUserSubComponentByIndex<T>(slot_name, slot_num, ComponentInfo::SHARE_NONE);
1272 template <
class T,
class... ARGS>
1273 T*
create(
int slot_num, uint64_t share_flags, ARGS... args)
const 1275 return comp->loadUserSubComponentByIndex<T, ARGS...>(slot_name, slot_num, share_flags, args...);
1296 template <
typename T,
class... ARGS>
1297 void createAll(std::vector<T*>& vec, uint64_t share_flags, ARGS... args)
const 1299 for (
int i = 0; i <= getMaxPopulatedSlotNumber(); ++i ) {
1300 T* sub = create<T>(i, share_flags, args...);
1322 template <
typename T,
class... ARGS>
1323 void createAllSparse(std::vector<std::pair<int, T*>>& vec, uint64_t share_flags, ARGS... args)
const 1325 for (
int i = 0; i <= getMaxPopulatedSlotNumber(); ++i ) {
1326 T* sub = create<T>(i, share_flags, args...);
1327 if ( sub !=
nullptr ) vec.push_back(i, sub);
1347 template <
typename T,
class... ARGS>
1350 for (
int i = 0; i <= getMaxPopulatedSlotNumber(); ++i ) {
1351 T* sub = create<T>(i, share_flags, args...);
1352 if ( sub !=
nullptr ) vec.push_back(sub);
1357 namespace Core::Serialization {
1378 void operator()(T*& s,
serializer& ser, ser_opt_t UNUSED(options))
1381 switch ( ser.mode() ) {
1382 case serializer::SIZER:
1383 pvt::SerializeBaseComponentHelper::size_basecomponent(sp, ser);
1385 case serializer::PACK:
1386 pvt::SerializeBaseComponentHelper::pack_basecomponent(sp, ser);
1388 case serializer::UNPACK:
1389 pvt::SerializeBaseComponentHelper::unpack_basecomponent(sp, ser);
1391 case serializer::MAP:
1392 pvt::SerializeBaseComponentHelper::map_basecomponent(sp, ser, ser.getMapName());
1395 s =
static_cast<T*
>(sp);
1398 SST_FRIEND_SERIALIZE();
1405 #endif // SST_CORE_BASECOMPONENT_H Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file...
Definition: output.h:57
ComponentId_t getId() const
Returns unique component ID.
Definition: baseComponent.h:90
virtual void complete(unsigned int UNUSED(phase))
Used during the complete phase after the end of simulation.
Definition: baseComponent.h:114
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition: serializer.h:42
Base template for handlers which take a class defined argument.
Definition: ssthandler.h:109
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:105
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:156
virtual void printStatus(Output &UNUSED(out))
Called by the Simulation to request that the component print it's current status. ...
Definition: baseComponent.h:131
bool isSubComponentLoadableUsingAPI(const std::string &type)
Check to see if a given element type is loadable with a particular API.
Definition: baseComponent.h:675
T::ProfilePoint * registerProfilePoint(const std::string &pointName)
Registers a profiling point.
Definition: baseComponent.h:624
SSTHandlerBase< bool, Cycle_t > HandlerBase
Base handler for clock functions.
Definition: clock.h:43
SSTHandlerBase< void, Event * > HandlerBase
Base handler for event delivery.
Definition: event.h:48
Definition: baseComponent.h:1360
A class to convert between a component's view of time and the core's view of time.
Definition: timeConverter.h:27
Main component object for the simulation.
Definition: component.h:30
virtual void finish()
Called after complete phase, but before objects are destroyed.
Definition: baseComponent.h:121
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:1273
T * loadUserSubComponent(const std::string &slot_name)
Loads a user defined subcomponent (defined in input file to SST run).
Definition: baseComponent.h:763
Base serialize class.
Definition: serialize.h:113
Forms the base class for statistics gathering within SST.
Definition: statbase.h:49
ComponentExtension is a class that can be loaded using loadComponentExtension<T>(...).
Definition: componentExtension.h:28
virtual void emergencyShutdown()
Called when SIGINT or SIGTERM has been seen.
Definition: baseComponent.h:98
Forms the template defined base class for statistics gathering within SST.
Definition: elementinfo.h:46
virtual void setup()
Called after all components have been constructed and initialization has completed, but before simulation time has begun.
Definition: baseComponent.h:118
bool isUserSubComponentLoadableUsingAPI(const std::string &slot_name)
Check to see if the element type loaded by the user into the.
Definition: baseComponent.h:690
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:1297
Definition: serializable_base.h:119
Definition: rankInfo.h:23
T * loadModule(const std::string &type, Params ¶ms, ARGS... args)
Loads a module from an element Library.
Definition: baseComponent.h:649
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:732
Main component object for the simulation.
Definition: baseComponent.h:64
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:1230
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:1323
Statistics::Statistic< T > * registerStatistic(SST::Params ¶ms, const std::string &stat_name, const std::string &stat_sub_id="")
Registers a statistic.
Definition: baseComponent.h:572
SimTime_t getCurrentSimTime() const
Return the simulated time since the simulation began in the default timebase.
Definition: baseComponent.h:167
virtual bool Status()
Currently unused function.
Definition: baseComponent.h:124
Parameter store.
Definition: params.h:63
void setDefaultTimeBase(TimeConverter tc)
Manually set the default defaultTimeBase.
Definition: baseComponent.h:940
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:782
T * create(int slot_num) const
Create a user defined subcomponent (defined in input file to SST run).
Definition: baseComponent.h:1252
Definition: componentInfo.h:44
Used to load SubComponents when multiple SubComponents are loaded into a single slot (will also also ...
Definition: baseComponent.h:1176
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:1348
uint8_t getStatisticLoadLevel() const
Returns Component Statistic load level.
Definition: baseComponent.h:93
Definition: elementinfo.h:44
Class that can attach to Clock and Event Handlers to monitor the state of variables.
Definition: watchPoint.h:27
An SST core component that handles timing and event processing informing all registered Statistics to...
Definition: statengine.h:54
Performs Unit math in full precision.
Definition: unitAlgebra.h:105
PortModules are modules that can be attached to the send and/or receive side of ports.
Definition: portModule.h:50
void setDefaultTimeBase(TimeConverter *tc)
Manually set the default defaultTimeBase.
Definition: baseComponent.h:934
SubComponent is a class loadable through the factory which allows dynamic functionality to be added t...
Definition: subcomponent.h:28
const std::vector< double > & getCoordinates() const
Retrieve the X,Y,Z coordinates of this component.
Definition: baseComponent.h:921
const std::string & getName() const
Returns Component/SubComponent Name.
Definition: baseComponent.h:101
Link between two components.
Definition: link.h:56
virtual void init(unsigned int UNUSED(phase))
Used during the init phase.
Definition: baseComponent.h:110