14 #ifndef SST_CORE_SIMULATION_IMPL_H
15 #define SST_CORE_SIMULATION_IMPL_H
18 #include "sst/core/sst_types.h"
19 #include "sst/core/simulation.h"
26 #include <unordered_map>
28 #include "sst/core/output.h"
29 #include "sst/core/clock.h"
30 #include "sst/core/oneshot.h"
31 #include "sst/core/unitAlgebra.h"
32 #include "sst/core/rankInfo.h"
34 #include "sst/core/componentInfo.h"
37 extern int main(
int argc,
char **argv);
41 #define _SIM_DBG( fmt, args...) __DBG( DBG_SIM, Sim, fmt, ## args )
42 #define STATALLFLAG "--ALLSTATS--"
50 class SimulatorHeartbeat;
60 class SharedRegionManager;
61 namespace Statistics {
62 class StatisticOutput;
63 class StatisticProcessingEngine;
107 return output_directory;
114 virtual void requireEvent(
const std::string& name)
override;
121 virtual void printStatus(
bool fullStatus)
override;
191 bool isIndependentThread() {
return independent;}
197 TimeConverter*
registerOneShot(
const std::string& timeDelay, OneShot::HandlerBase* handler,
int priority);
199 TimeConverter*
registerOneShot(
const UnitAlgebra& timeDelay, OneShot::HandlerBase* handler,
int priority);
201 const std::vector<SimTime_t>& getInterThreadLatencies()
const {
return interThreadLatencies; }
203 SimTime_t getInterThreadMinLatency()
const {
return interThreadMinLatency; }
205 static TimeConverter* getMinPartTC() {
return minPartTC; }
207 LinkMap* getComponentLinkMap(ComponentId_t
id)
const {
208 ComponentInfo* info = compInfoMap.getByID(
id);
209 if (
nullptr == info ) {
212 return info->getLinkMap();
223 if (
nullptr != i ) {
224 return i->getComponent();
226 printf(
"Simulation::getComponent() couldn't find component with id = %" PRIu64
"\n",
id);
236 if (
nullptr != i ) {
239 printf(
"Simulation::getComponentInfo() couldn't find component with id = %" PRIu64
"\n",
id);
250 output_directory = outDir;
272 uint64_t getTimeVortexMaxDepth()
const;
274 uint64_t getTimeVortexCurrentDepth()
const;
276 uint64_t getSyncQueueDataSize()
const;
312 friend int ::main(
int argc,
char **argv);
330 static void resizeBarriers(uint32_t nthr);
337 static std::mutex simulationMutex;
341 Component* createComponent(ComponentId_t
id,
const std::string& name,
344 TimeVortex* getTimeVortex()
const {
return timeVortex; }
361 friend class SyncManager;
363 TimeVortex* timeVortex;
364 TimeConverter* threadMinPartTC;
365 Activity* current_activity;
366 static SimTime_t minPart;
367 static TimeConverter* minPartTC;
368 std::vector<SimTime_t> interThreadLatencies;
369 SimTime_t interThreadMinLatency;
370 SyncManager* syncManager;
372 ComponentInfoMap compInfoMap;
376 SimulatorHeartbeat* m_heartbeat;
379 static std::atomic<int> untimed_msg_count;
380 unsigned int untimed_phase;
381 volatile sig_atomic_t lastRecvdSignal;
382 ShutdownMode_t shutdown_mode;
391 SimTime_t currentSimCycle;
392 SimTime_t endSimCycle;
397 std::string output_directory;
401 static std::unordered_map<std::thread::id, Simulation_impl*> instanceMap;
402 static std::vector<Simulation_impl*> instanceVec;
404 friend void wait_my_turn_start();
405 friend void wait_my_turn_end();
421 #endif //SST_CORE_SIMULATION_IMPL_H
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file...
Definition: output.h:54
An Action is a schedulable Activity which is not an Event.
Definition: action.h:30
SimTime_t getCurrentSimCycle() const override
Return the current simulation time as a cycle count.
Definition: simulation.cc:77
ComponentInfo * getComponentInfo(const ComponentId_t &id) const
returns the ComponentInfo object for the given ID
Definition: simulation_impl.h:233
Main control class for a SST Simulation.
Definition: simulation.h:38
Base class for all Activities in the SST Event Queue.
Definition: activity.h:52
Mode_t getSimulationMode() const override
Get the run mode of the simulation (e.g.
Definition: simulation_impl.h:79
Class to contain SST Simulation Configuration variables.
Definition: config.h:31
TimeConverter * registerOneShot(const std::string &timeDelay, OneShot::HandlerBase *handler, int priority)
Register a OneShot event to be called after a time delay Note: OneShot cannot be canceled, and will always callback after the timedelay.
Definition: simulation.cc:805
void insertActivity(SimTime_t time, Activity *ev)
Insert an activity to fire at a specified time.
Definition: simulation.cc:829
A class to convert between a component's view of time and the core's view of time.
Definition: timeConverter.h:25
RankInfo getRank() const override
Get this instance's parallel rank.
Definition: simulation_impl.h:97
Main component object for the simulation.
Definition: component.h:31
A Configuration Graph A graph representing Components and Links.
Definition: configGraph.h:358
Primary Event Queue.
Definition: timeVortex.h:25
static Output sim_output
Output.
Definition: simulation_impl.h:388
bool isWireUpFinished()
Returns true when the Wireup is finished.
Definition: simulation_impl.h:268
void setOutputDirectory(const std::string &outDir)
Set the output directory for this simulation.
Definition: simulation_impl.h:249
static Output & getSimulationOutput()
Return the base simulation Output class instance.
Definition: simulation_impl.h:140
void setup()
Perform the setup() and run phases of the simulation.
Definition: simulation.cc:558
const ComponentInfoMap & getComponentInfoMap(void)
Returns reference to the Component Info Map.
Definition: simulation_impl.h:217
void initialize()
Perform the init() phase of simulation.
Definition: simulation.cc:472
SimTime_t getNextActivityTime() const
Returns the time of the next item to be executed that is in the TImeVortex of the Simulation...
Definition: simulation.cc:244
Exit Event Action.
Definition: exit.h:34
Definition: componentInfo.h:262
Exit * getExit() const
Return the exit event.
Definition: simulation_impl.h:163
BaseComponent * getComponent(const ComponentId_t &id) const
returns the component with the given ID
Definition: simulation_impl.h:220
virtual void printStatus(bool fullStatus) override
Causes the current status of the simulation to be printed to stderr.
Definition: simulation.cc:734
int getCurrentPriority() const override
Return the current priority.
Definition: simulation.cc:89
static Simulation_impl * createSimulation(Config *config, RankInfo my_rank, RankInfo num_ranks)
Create new simulation.
Definition: simulation.cc:162
A Clock class.
Definition: clock.h:32
static void setSignal(int signal)
Sets an internal flag for signaling the simulation.
Definition: simulation.cc:728
Cycle_t reregisterClock(TimeConverter *tc, Clock::HandlerBase *handler, int priority)
Reactivate an existing clock and handler.
Definition: simulation.cc:776
RankInfo getNumRanks() const override
Get the number of parallel ranks in the simulation.
Definition: simulation_impl.h:100
Statistics::StatisticProcessingEngine * getStatisticsProcessingEngine(void) const
Return the Statistic Processing Engine associated with this Simulation.
Definition: simulation.cc:847
static TimeLord * getTimeLord(void)
Return the TimeLord associated with this Simulation.
Definition: simulation_impl.h:137
std::map< std::pair< SimTime_t, int >, OneShot * > oneShotMap_t
Definition: simulation_impl.h:127
static SimTime_t getLocalMinimumNextActivityTime()
Gets the minimum next activity time across all TimeVortices in the Rank.
Definition: simulation.cc:250
void unregisterClock(TimeConverter *tc, Clock::HandlerBase *handler, int priority)
Remove a clock handler from the list of active clock handlers.
Definition: simulation.cc:797
Main control class for a SST Simulation.
Definition: simulation_impl.h:72
Definition: rankInfo.h:21
Functor classes for Clock handling.
Definition: clock.h:41
TimeConverter * minPartToTC(SimTime_t cycles) const
Get a handle to a TimeConverter.
Definition: simulation.cc:112
Main component object for the simulation.
Definition: baseComponent.h:53
static Simulation_impl * getSimulation()
Return a pointer to the singleton instance of the Simulation.
Definition: simulation_impl.h:134
UnitAlgebra getElapsedSimTime() const override
Return the elapsed simulation time as a time.
Definition: simulation.cc:95
void complete()
Perform the complete() phase of simulation.
Definition: simulation.cc:523
static Factory * factory
Factory used to generate the simulation components.
Definition: simulation_impl.h:328
std::string & getOutputDirectory() override
Returns the output directory of the simulation.
Definition: simulation_impl.h:106
Cycle_t getNextClockCycle(TimeConverter *tc, int priority=CLOCKPRIORITY)
Returns the next Cycle that the TImeConverter would fire.
Definition: simulation.cc:787
A OneShot Event class.
Definition: oneshot.h:33
static void emergencyShutdown()
Emergency Shutdown Called when a SIGINT or SIGTERM has been seen.
Definition: simulation.cc:655
static TimeLord timeLord
TimeLord of the simulation.
Definition: simulation_impl.h:386
Parameter store.
Definition: params.h:44
void endSimulation(void)
Normal Shutdown.
Definition: simulation.cc:674
void setStopAtCycle(Config *cfg)
Set cycle count, which, if reached, will cause the simulation to halt.
Definition: simulation.cc:218
Class for creating and managing TimeConverter objects.
Definition: timeLord.h:38
Class for instantiating Components, Links and the like out of element libraries.
Definition: factory.h:43
TimeConverter * registerClock(const std::string &freq, Clock::HandlerBase *handler, int priority)
Register a handler to be called on a set frequency.
Definition: simulation.cc:750
virtual void requireEvent(const std::string &name) override
Signifies that an event type is required for this simulation Causes the Factory to verify that the re...
Definition: simulation.cc:238
Definition: componentInfo.h:40
void processGraphInfo(ConfigGraph &graph, const RankInfo &myRank, SimTime_t min_part)
Processes the ConfigGraph to pull out any need information about relationships among the threads...
Definition: simulation.cc:264
An SST core component that handles timing and event processing informing all registered Statistics to...
Definition: statengine.h:52
Mode_t
Type of Run Modes.
Definition: simulation.h:41
UnitAlgebra getFinalSimTime() const override
Return the end simulation time as a time.
Definition: simulation.cc:100
std::map< std::pair< SimTime_t, int >, Clock * > clockMap_t
Definition: simulation_impl.h:126
SimTime_t getEndSimCycle() const override
Return the end simulation time as a cycle count.
Definition: simulation.cc:83
Performs Unit math in full precision.
Definition: unitAlgebra.h:107
Definition: threadsafe.h:50
Link between two components.
Definition: link.h:32
static void shutdown()
Used to signify the end of simulation.
Definition: simulation.cc:175
Definition: sharedRegion.h:64