SST  14.0.0
StructuralSimulationToolkit
coreTest_Checkpoint.h
1 // Copyright 2009-2024 NTESS. Under the terms
2 // of Contract DE-NA0003525 with NTESS, the U.S.
3 // Government retains certain rights in this software.
4 //
5 // Copyright (c) 2009-2024, NTESS
6 // All rights reserved.
7 //
8 // This file is part of the SST software package. For license
9 // information, see the LICENSE file in the top level directory of the
10 // distribution.
11 
12 #ifndef SST_CORE_CORETEST_CHECKPOINT_H
13 #define SST_CORE_CORETEST_CHECKPOINT_H
14 
15 #include "sst/core/component.h"
16 #include "sst/core/event.h"
17 #include "sst/core/link.h"
18 #include "sst/core/rng/distrib.h"
19 #include "sst/core/rng/rng.h"
20 
21 namespace SST {
22 namespace CoreTestCheckpoint {
23 
24 // Very simple starting case
25 // Expected to have two components in simulation.
26 // The components ping-pong an event until its count reaches 0
27 
29 {
30 public:
31  coreTestCheckpointEvent() : SST::Event(), counter(1000) {}
32 
33  coreTestCheckpointEvent(uint32_t c) : SST::Event(), counter(c) {}
34 
36 
37  bool decCount()
38  {
39  if ( counter != 0 ) counter--;
40  return counter == 0;
41  }
42 
43  uint32_t getCount() { return counter; }
44 
45 private:
46  uint32_t counter;
47 
48  void serialize_order(SST::Core::Serialization::serializer& ser) override
49  {
50  Event::serialize_order(ser);
51  SST_SER(counter)
52  }
53 
55 };
56 
57 
59 {
60 public:
61  SST_ELI_REGISTER_COMPONENT(
63  "coreTestElement",
64  "coreTestCheckpoint",
65  SST_ELI_ELEMENT_VERSION(1,0,0),
66  "CoreTest Test Checkpoint",
67  COMPONENT_CATEGORY_UNCATEGORIZED
68  )
69 
70  SST_ELI_DOCUMENT_PARAMS(
71  { "starter", "Whether this component initiates the ping-pong", "T"},
72  { "count", "Number of times to bounce the message back and forth", "1000" },
73  { "test_string", "A test string", ""},
74  { "clock_frequency", "Frequency for clock", "100kHz"},
75  { "clock_duty_cycle", "Number of cycles to keep clock on and off", "10"},
76  // Testing output options
77  { "output_prefix", "Prefix for output", ""},
78  { "output_verbose", "Verbosity for output", "0"},
79  // Testing RNG & distributions
80  { "rng_seed_w", "The first seed for marsaglia", "7" },
81  { "rng_seed_z", "The second seed for marsaglia", "5" },
82  { "rng_seed", "The seed for mersenne and xorshift", "11" },
83  { "dist_const", "Constant for ConstantDistribution", "1.5" },
84  { "dist_discrete_probs", "Probabilities in discrete distribution", "[1.0]"},
85  { "dist_exp_lambda", "Lambda for exponentional distribution", "1.0"},
86  { "dist_gauss_mean", "Mean for Gaussian distribution", "1.0"},
87  { "dist_gauss_stddev", "Standard deviation for Gaussian distribution", "0.2"},
88  { "dist_poisson_lambda", "Lambda for Poisson distribution", "1.0"},
89  { "dist_uni_bins", "Number of proability bins for the uniform distribution", "4"}
90  )
91 
92  SST_ELI_DOCUMENT_PORTS(
93  {"port", "Link to the other coreTestCheckpoint", { "coreTestElement.coreTestCheckpointEvent", "" } }
94  )
95 
96  coreTestCheckpoint(ComponentId_t id, SST::Params& params);
98 
99  void setup() override;
100 
101  void finish() override;
102 
103  void printStatus(Output& out) override;
104 
105  // Serialization functions and macro
106  coreTestCheckpoint() : Component() {} // For serialization only
107  void serialize_order(SST::Core::Serialization::serializer& ser) override;
108  ImplementSerializable(SST::CoreTestCheckpoint::coreTestCheckpoint)
109 
110 private:
111  void handleEvent(SST::Event* ev);
112  bool handleClock(Cycle_t cycle);
113  void restartClock(SST::Event* ev);
114 
115  SST::Link* link;
116  SST::Link* self_link;
117  TimeConverter* clock_tc;
118  Clock::HandlerBase* clock_handler;
119  int duty_cycle; // Used to count clock on and off cycles
120  int duty_cycle_count; // Used to count clock on and off cycles
121  uint32_t counter; // Unused after setup
122  std::string test_string; // Test that string got serialized
123  Output* output;
124 
125  RNG::Random* mersenne;
126  RNG::Random* marsaglia;
127  RNG::Random* xorshift;
128  RNG::RandomDistribution* dist_const;
129  RNG::RandomDistribution* dist_discrete;
130  RNG::RandomDistribution* dist_expon;
131  RNG::RandomDistribution* dist_gauss;
132  RNG::RandomDistribution* dist_poisson;
133  RNG::RandomDistribution* dist_uniform;
134 };
135 
136 } // namespace CoreTestCheckpoint
137 } // namespace SST
138 
139 #endif // SST_CORE_CORETEST_CHECKPOINT_H
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file...
Definition: output.h:53
Implements the base class for random number generators for the SST core.
Definition: rng.h:29
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition: serializer.h:35
Handlers with 1 handler defined argument to callback from caller.
Definition: ssthandler.h:210
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
Definition: action.cc:18
Definition: coreTest_Checkpoint.h:28
Definition: coreTest_Checkpoint.h:58
void setup() override
Called after all components have been constructed and initialization has completed, but before simulation time has begun.
Definition: coreTest_Checkpoint.cc:91
Parameter store.
Definition: params.h:55
void finish() override
Called after complete phase, but before objects are destroyed.
Definition: coreTest_Checkpoint.cc:98
Base class of statistical distributions in SST.
Definition: distrib.h:24
Base class for Events - Items sent across links to communicate between components.
Definition: event.h:34