SST 15.0
Structural Simulation Toolkit
coreTest_Component.h
1// Copyright 2009-2025 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-2025, 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_COMPONENT_H
13#define SST_CORE_CORETEST_COMPONENT_H
14
15#include "sst/core/component.h"
16#include "sst/core/link.h"
17#include "sst/core/rng/marsaglia.h"
18
19#include <cstddef>
20#include <cstdio>
21
22namespace SST::CoreTestComponent {
23
24// These first two classes are just base classes to test ELI
25// inheritance. The definition of the ELI items are spread through 2
26// component base classes to make sure they get inherited in the
27// actual component that can be instanced.
28class coreTestComponentBase : public SST::Component
29{
30public:
31 SST_ELI_REGISTER_COMPONENT_BASE(SST::CoreTestComponent::coreTestComponentBase)
32
33 SST_ELI_DOCUMENT_PARAMS(
34 { "workPerCycle", "Count of busy work to do during a clock tick.", NULL},
35 { "clockFrequency", "Frequency of the clock", "1GHz"}
36 )
37
38 SST_ELI_DOCUMENT_STATISTICS(
39 { "N", "events sent on N link", "counts", 1 }
40 )
41
42 SST_ELI_DOCUMENT_PORTS(
43 {"Nlink", "Link to the coreTestComponent to the North", { "coreTestComponent.coreTestComponentEvent", "" } }
44 )
45
46 SST_ELI_DOCUMENT_ATTRIBUTES(
47 { "test_element", "true" }
48 )
49
50 explicit coreTestComponentBase(ComponentId_t id) :
52 {}
53 ~coreTestComponentBase() {}
54 coreTestComponentBase() :
56 {}
57 void serialize_order(SST::Core::Serialization::serializer& ser) override { SST::Component::serialize_order(ser); }
59};
60
61class coreTestComponentBase2 : public coreTestComponentBase
62{
63public:
64 SST_ELI_REGISTER_COMPONENT_DERIVED_BASE(
66
67 SST_ELI_DOCUMENT_PARAMS(
68 { "commFreq", "There is a 1/commFreq chance each clock cycle of sending an event to a neighbor", NULL}
69 )
70
71 SST_ELI_DOCUMENT_STATISTICS(
72 { "S", "events sent on S link", "counts", 1 }
73 )
74
75 SST_ELI_DOCUMENT_PORTS(
76 {"Slink", "Link to the coreTestComponent to the South", { "coreTestComponent.coreTestComponentEvent", "" } }
77 )
78
79 explicit coreTestComponentBase2(ComponentId_t id) :
80 coreTestComponentBase(id)
81 {}
82 ~coreTestComponentBase2() {}
83
84 coreTestComponentBase2() :
85 coreTestComponentBase()
86 {}
87
88 void serialize_order(SST::Core::Serialization::serializer& ser) override
89 {
90 SST::CoreTestComponent::coreTestComponentBase::serialize_order(ser);
91 }
93};
94
95class coreTestComponent : public coreTestComponentBase2
96{
97public:
98 // REGISTER THIS COMPONENT INTO THE ELEMENT LIBRARY
99 SST_ELI_REGISTER_COMPONENT(
100 coreTestComponent,
101 "coreTestElement",
102 "coreTestComponent",
103 SST_ELI_ELEMENT_VERSION(1,0,0),
104 "CoreTest Test Component",
105 COMPONENT_CATEGORY_PROCESSOR
106 )
107
108 SST_ELI_DOCUMENT_PARAMS(
109 { "commSize", "Size of communication to send.", "16"}
110 )
111
112 SST_ELI_DOCUMENT_STATISTICS(
113 { "E", "events sent on E link", "counts", 1 },
114 { "W", "events sent on W link", "counts", 1 }
115 )
116
117 SST_ELI_DOCUMENT_PORTS(
118 {"Elink", "Link to the coreTestComponent to the East", { "coreTestComponent.coreTestComponentEvent", "" } },
119 {"Wlink", "Link to the coreTestComponent to the West", { "coreTestComponent.coreTestComponentEvent", "" } }
120 )
121
122 // Optional since there is nothing to document
123 SST_ELI_DOCUMENT_SUBCOMPONENT_SLOTS(
124 )
125
126 coreTestComponent(SST::ComponentId_t id, SST::Params& params);
127 ~coreTestComponent();
128
129 void setup() override {}
130 void finish() override { printf("Component Finished.\n"); }
131
132 void serialize_order(SST::Core::Serialization::serializer& ser) override;
133 ImplementSerializable(SST::CoreTestComponent::coreTestComponent)
134 coreTestComponent() = default; // for serialization only
135
136private:
137 coreTestComponent(const coreTestComponent&) = delete; // do not implement
138 coreTestComponent& operator=(const coreTestComponent&) = delete; // do not implement
139
140 void handleEvent(SST::Event* ev);
141 virtual bool clockTic(SST::Cycle_t);
142
143 int workPerCycle;
144 int commFreq;
145 int commSize;
146 int neighbor;
147
149 SST::Link* N;
150 SST::Link* S;
151 SST::Link* E;
152 SST::Link* W;
157};
158
159} // namespace SST::CoreTestComponent
160
161#endif // SST_CORE_CORETEST_COMPONENT_H
Main component object for the simulation.
Definition component.h:31
Definition coreTest_Component.h:62
Definition coreTest_Component.h:29
Definition coreTest_Component.h:96
void setup() override
Called after all components have been constructed and initialization has completed,...
Definition coreTest_Component.h:129
void finish() override
Called after complete phase, but before objects are destroyed.
Definition coreTest_Component.h:130
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition serializer.h:45
Base class for Events - Items sent across links to communicate between components.
Definition event.h:35
Parameter store.
Definition params.h:58
Implements a random number generator using the Marsaglia method.
Definition marsaglia.h:40
Forms the template defined base class for statistics gathering within SST.
Definition statbase.h:373