SST 12.1.0
Structural Simulation Toolkit
simulation.h
1// -*- c++ -*-
2
3// Copyright 2009-2022 NTESS. Under the terms
4// of Contract DE-NA0003525 with NTESS, the U.S.
5// Government retains certain rights in this software.
6//
7// Copyright (c) 2009-2022, NTESS
8// All rights reserved.
9//
10// This file is part of the SST software package. For license
11// information, see the LICENSE file in the top level directory of the
12// distribution.
13
14#ifndef SST_CORE_SIMULATION_H
15#define SST_CORE_SIMULATION_H
16
17#include "sst/core/output.h"
18#include "sst/core/rankInfo.h"
19#include "sst/core/sst_types.h"
20#include "sst/core/unitAlgebra.h"
21
22namespace SST {
23
24// #define _SIM_DBG( fmt, args...) __DBG( DBG_SIM, Sim, fmt, ## args )
25#define STATALLFLAG "--ALLSTATS--"
26
27class Output;
28class TimeLord;
29
30/**
31 * Main control class for a SST Simulation.
32 * Provides base features for managing the simulation
33 */
35{
36public:
37 /** Type of Run Modes */
38 typedef enum {
39 UNKNOWN, /*!< Unknown mode - Invalid for running */
40 INIT, /*!< Initialize-only. Useful for debugging initialization and graph generation */
41 RUN, /*!< Run-only. Useful when restoring from a checkpoint (not currently supported) */
42 BOTH /*!< Default. Both initialize and Run the simulation */
44
45 virtual ~Simulation();
46
47 /********* Public Static API ************/
48
49 /** Return a pointer to the singleton instance of the Simulation */
51 __attribute__((deprecated("Element facing Simulation class APIs are deprecated and have moved to the various "
52 "element base classes. The APIs will be removed in SST 13.")));
53
54 /** Return the TimeLord associated with this Simulation */
55 static TimeLord* getTimeLord(void)
56 __attribute__((deprecated("Element facing Simulation class APIs are deprecated and have moved to the various "
57 "element base classes. The APIs will be removed in SST 13.")));
58
59 /** Return the base simulation Output class instance */
61 __attribute__((deprecated("Element facing Simulation class APIs are deprecated and have moved to the various "
62 "element base classes. The APIs will be removed in SST 13.")));
63
64 /********* Public API ************/
65 /** Get the run mode of the simulation (e.g. init, run, both etc) */
66 virtual Mode_t getSimulationMode() const = 0;
67
68 /** Return the current simulation time as a cycle count*/
69 virtual SimTime_t getCurrentSimCycle() const = 0;
70
71 /** Return the end simulation time as a cycle count*/
72 virtual SimTime_t getEndSimCycle() const = 0;
73
74 /** Return the current priority */
75 virtual int getCurrentPriority() const = 0;
76
77 /** Return the elapsed simulation time as a time */
78 virtual UnitAlgebra getElapsedSimTime() const = 0;
79
80 /** Return the end simulation time as a time */
81 virtual UnitAlgebra getEndSimTime() const = 0;
82
83 /** Return the end simulation time as a time */
85 __attribute__((deprecated("getFinalSimTime() has been deprecated and will be removed in SST 13. It has been "
86 "replaced by getEndSimTime()."))) = 0;
87
88 /** Get this instance's parallel rank */
89 virtual RankInfo getRank() const = 0;
90
91 /** Get the number of parallel ranks in the simulation */
92 virtual RankInfo getNumRanks() const = 0;
93
94 /** Returns the output directory of the simulation
95 * @return Directory in which simulation outputs are placed
96 */
97 virtual std::string& getOutputDirectory() = 0;
98
99 /** Signifies that an event type is required for this simulation
100 * Causes the Factory to verify that the required event type can be found.
101 * @param name fully qualified libraryName.EventName
102 */
103 virtual void requireEvent(const std::string& name) __attribute__((deprecated(
104 "requireEvent() has been deprecated in favor or requireLibrary() and will be removed in SST 13."))) = 0;
105
106 /** Signifies that a library is required for this simulation.
107 * @param name Name of the library
108 */
109 virtual void requireLibrary(const std::string& name) = 0;
110
111 /** Causes the current status of the simulation to be printed to stderr.
112 * @param fullStatus - if true, call printStatus() on all components as well
113 * as print the base Simulation's status
114 */
115 virtual void printStatus(bool fullStatus) = 0;
116
117 /** Get the amount of real-time spent executing the run phase of
118 * the simulation.
119 *
120 * @return real-time in seconds spent executing the run phase
121 */
122 virtual double getRunPhaseElapsedRealTime() const = 0;
123
124 /** Get the amount of real-time spent executing the init phase of
125 * the simulation.
126 *
127 * @return real-time in seconds spent executing the init phase
128 */
129 virtual double getInitPhaseElapsedRealTime() const = 0;
130
131 /** Get the amount of real-time spent executing the complete phase of
132 * the simulation.
133 *
134 * @return real-time in seconds spent executing the complete phase
135 */
136 virtual double getCompletePhaseElapsedRealTime() const = 0;
137
138protected:
139 Simulation() {}
140 // Simulation(Config* config, RankInfo my_rank, RankInfo num_ranks);
141 Simulation(Simulation const&); // Don't Implement
142 void operator=(Simulation const&); // Don't implement
143};
144
145} // namespace SST
146
147#endif // SST_CORE_SIMULATION_H
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file.
Definition: output.h:52
Definition: rankInfo.h:22
Main control class for a SST Simulation.
Definition: simulation.h:35
virtual double getCompletePhaseElapsedRealTime() const =0
Get the amount of real-time spent executing the complete phase of the simulation.
virtual RankInfo getRank() const =0
Get this instance's parallel rank.
virtual void printStatus(bool fullStatus)=0
Causes the current status of the simulation to be printed to stderr.
virtual std::string & getOutputDirectory()=0
Returns the output directory of the simulation.
virtual UnitAlgebra getElapsedSimTime() const =0
Return the elapsed simulation time as a time.
virtual UnitAlgebra getEndSimTime() const =0
Return the end simulation time as a time.
virtual SimTime_t getCurrentSimCycle() const =0
Return the current simulation time as a cycle count.
virtual double getRunPhaseElapsedRealTime() const =0
Get the amount of real-time spent executing the run phase of the simulation.
static TimeLord * getTimeLord(void)
Return the TimeLord associated with this Simulation.
Definition: simulation.cc:61
static Output & getSimulationOutput()
Return the base simulation Output class instance.
Definition: simulation.cc:67
virtual int getCurrentPriority() const =0
Return the current priority.
virtual SimTime_t getEndSimCycle() const =0
Return the end simulation time as a cycle count.
virtual RankInfo getNumRanks() const =0
Get the number of parallel ranks in the simulation.
static Simulation * getSimulation()
Return a pointer to the singleton instance of the Simulation.
Definition: simulation.cc:55
virtual Mode_t getSimulationMode() const =0
Get the run mode of the simulation (e.g.
virtual void requireLibrary(const std::string &name)=0
Signifies that a library is required for this simulation.
virtual UnitAlgebra getFinalSimTime() const =0
Return the end simulation time as a time.
virtual double getInitPhaseElapsedRealTime() const =0
Get the amount of real-time spent executing the init phase of the simulation.
virtual void requireEvent(const std::string &name)=0
Signifies that an event type is required for this simulation Causes the Factory to verify that the re...
Mode_t
Type of Run Modes.
Definition: simulation.h:38
@ INIT
Definition: simulation.h:40
@ RUN
Definition: simulation.h:41
@ BOTH
Definition: simulation.h:42
@ UNKNOWN
Definition: simulation.h:39
Class for creating and managing TimeConverter objects.
Definition: timeLord.h:38
Performs Unit math in full precision.
Definition: unitAlgebra.h:109