12#ifndef SST_CORE_CORETEST_SUBCOMPONENT_H
13#define SST_CORE_CORETEST_SUBCOMPONENT_H
15#include "sst/core/component.h"
16#include "sst/core/link.h"
17#include "sst/core/subcomponent.h"
22namespace SST::CoreTestSubComponent {
42 explicit SubCompInterface(ComponentId_t
id) :
45 SubCompInterface(ComponentId_t
id,
Params& UNUSED(params)) :
51 virtual ~SubCompInterface() {}
52 virtual void clock(SST::Cycle_t) {}
56 SST::SubComponent::serialize_order(ser);
61class SubCompSlotInterface :
public SubCompInterface
67 SST_ELI_DOCUMENT_PARAMS(
68 {
"num_subcomps",
"Number of anonymous SubComponents to load. Ignored if using name SubComponents.",
"1"}
71 SST_ELI_DOCUMENT_PORTS(
72 {
"test",
"Just a test port", {
"coreTestMessageGeneratorComponent.coreTestMessage",
"" } },
75 SST_ELI_DOCUMENT_SUBCOMPONENT_SLOTS(
78 explicit SubCompSlotInterface(ComponentId_t
id) :
81 SubCompSlotInterface(ComponentId_t
id,
Params& UNUSED(params)) :
84 virtual ~SubCompSlotInterface() {}
86 SubCompSlotInterface() {}
92class SubComponentLoader :
public Component
96 SST_ELI_REGISTER_COMPONENT(
100 SST_ELI_ELEMENT_VERSION(1,0,0),
101 "Demonstrates subcomponents",
102 COMPONENT_CATEGORY_UNCATEGORIZED
105 SST_ELI_DOCUMENT_PARAMS(
106 {
"clock",
"Clock Rate",
"1GHz"},
107 {
"unnamed_subcomponent",
"Unnamed SubComponent to load. If empty, then a named subcomponent is loaded",
""},
108 {
"num_subcomps",
"Number of anonymous SubComponents to load. Ignored if using name SubComponents.",
"1"},
109 {
"verbose",
"Verbosity level",
"0"},
112 SST_ELI_DOCUMENT_STATISTICS(
113 {
"totalSent",
"# of total messages sent",
"", 1},
117 SST_ELI_DOCUMENT_PORTS(
118 {
"port%d",
"Sending or Receiving Port(s)", {
"coreTestMessageGeneratorComponent.coreTestMessage",
"" } },
121 SST_ELI_DOCUMENT_SUBCOMPONENT_SLOTS(
122 {
"mySubComp",
"Test slot",
"SST::CoreTestSubComponent::SubCompInterface" }
125 SubComponentLoader(ComponentId_t
id,
SST::Params& params);
127 SubComponentLoader() {}
130 SST::Component::serialize_order(ser);
138 bool tick(SST::Cycle_t);
139 std::vector<SubCompInterface*> subComps;
143class SubCompSlot :
public SubCompSlotInterface
146 SST_ELI_REGISTER_SUBCOMPONENT(
150 SST_ELI_ELEMENT_VERSION(1,0,0),
151 "Subcomponent which is just a wrapper for the actual SubComponent to be used",
155 SST_ELI_DOCUMENT_PARAMS(
156 {
"unnamed_subcomponent",
"Unnamed SubComponent to load. If empty, then a named subcomponent is loaded",
""},
157 {
"verbose",
"Verbosity level",
"0"},
161 SST_ELI_DOCUMENT_PORTS(
162 {
"slot_port%d",
"Port(s) to send or receive on", {
"coreTestMessageGeneratorComponent.coreTestMessage",
"" } },
165 SST_ELI_DOCUMENT_SUBCOMPONENT_SLOTS(
166 {
"mySubCompSlot",
"Test slot",
"SST::CoreTestSubComponent::SubCompInterface" }
172 SubCompSlotInterface::serialize_order(ser);
178 std::vector<SubCompInterface*> subComps;
181 SubCompSlot(ComponentId_t
id,
Params& params);
183 SubCompSlot(ComponentId_t
id, std::string unnamed_sub);
186 void clock(Cycle_t)
override;
190class SubCompSendRecvInterface :
public SubCompInterface
197 SST_ELI_REGISTER_SUBCOMPONENT(
198 SubCompSendRecvInterface,
201 SST_ELI_ELEMENT_VERSION(1,0,0),
202 "Default Subcomponent for ELI testing only",
206 SST_ELI_DOCUMENT_PARAMS(
207 {
"port_name",
"Name of port to connect to",
""},
208 {
"sendCount",
"Number of Messages to Send",
"10"},
209 {
"verbose",
"Verbosity level",
"0"}
212 SST_ELI_DOCUMENT_PORTS(
213 {
"sendPort",
"Sending Port", {
"coreTestMessageGeneratorComponent.coreTestMessage",
"" } },
217 {
"slot_port%d",
"This is just a test port that duplicates a port from the SubComponent that will instance it", {
"",
"" } },
220 SST_ELI_DOCUMENT_SUBCOMPONENT_SLOTS(
223 SST_ELI_DOCUMENT_STATISTICS(
224 {
"numRecv",
"# of msgs recv",
"", 1},
228 explicit SubCompSendRecvInterface(ComponentId_t
id) :
231 SubCompSendRecvInterface(ComponentId_t
id,
Params& UNUSED(params)) :
234 virtual ~SubCompSendRecvInterface() {}
236 SubCompSendRecvInterface() {}
241class SubCompSender :
public SubCompSendRecvInterface
245 SST_ELI_REGISTER_SUBCOMPONENT(
249 SST_ELI_ELEMENT_VERSION(1,0,0),
250 "Sending Subcomponent",
254 SST_ELI_REGISTER_ALIAS(
"SubCompSender_alias")
256 SST_ELI_DOCUMENT_PARAMS(
259 SST_ELI_DOCUMENT_STATISTICS(
260 SST_ELI_DELETE_STAT(
"numRecv"),
261 {
"numSent",
"# of msgs sent",
"", 1},
264 SST_ELI_DOCUMENT_PORTS(
265 {
"sendPort",
"Sending Port", {
"coreTestMessageGeneratorComponent.coreTestMessage",
"" } },
268 SST_ELI_DOCUMENT_SUBCOMPONENT_SLOTS(
269 {
"test_slot",
"Test slot",
"" }
275 SubCompSendRecvInterface::serialize_order(ser);
279 SST_SER(totalMsgSent);
292 SubCompSender(ComponentId_t
id,
Params& params);
294 SubCompSender(ComponentId_t
id, uint32_t nToSend,
const std::string& port_name);
296 void clock(Cycle_t)
override;
299class SubCompReceiver :
public SubCompSendRecvInterface
304 SST_ELI_REGISTER_SUBCOMPONENT(
308 SST_ELI_ELEMENT_VERSION(1,0,0),
309 "Receiving Subcomponent",
313 SST_ELI_DOCUMENT_PARAMS(
314 SST_ELI_DELETE_PARAM(
"sendCount")
317 SST_ELI_DOCUMENT_STATISTICS(
320 SST_ELI_DOCUMENT_PORTS(
321 SST_ELI_DELETE_PORT(
"sendPort"),
322 {
"recvPort",
"Receiving Port", {
"coreTestMessageGeneratorComponent.coreTestMessage",
"" } },
325 SST_ELI_DOCUMENT_SUBCOMPONENT_SLOTS(
326 SST_ELI_DELETE_SUBCOMPONENT_SLOT(
"test_slot")
332 SubCompSendRecvInterface::serialize_order(ser);
334 SST_SER(nMsgReceived);
344 uint32_t numRecv = 0;
349 SubCompReceiver(ComponentId_t
id,
Params& params);
350 SubCompReceiver(ComponentId_t
id, std::string port);
351 ~SubCompReceiver() {}
352 void clock(Cycle_t)
override;
Definition coreTest_SubComponent.h:38
Definition coreTest_SubComponent.h:300
Definition coreTest_SubComponent.h:191
Definition coreTest_SubComponent.h:242
Definition coreTest_SubComponent.h:62
Definition coreTest_SubComponent.h:144
Definition coreTest_SubComponent.h:93
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
Link between two components.
Definition link.h:55
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file.
Definition output.h:54
Parameter store.
Definition params.h:58
Forms the template defined base class for statistics gathering within SST.
Definition statbase.h:373
SubComponent is a class loadable through the factory which allows dynamic functionality to be added t...
Definition subcomponent.h:29