12 #ifndef SST_CORE_SYNC_SYNCMANAGER_H
13 #define SST_CORE_SYNC_SYNCMANAGER_H
15 #include "sst/core/action.h"
16 #include "sst/core/link.h"
17 #include "sst/core/rankInfo.h"
18 #include "sst/core/sst_types.h"
19 #include "sst/core/threadsafe.h"
21 #include <unordered_map>
27 class Simulation_impl;
29 class ThreadSyncQueue;
42 virtual void execute(
int thread) = 0;
43 virtual void exchangeLinkUntimedData(
int thread, std::atomic<int>& msg_count) = 0;
44 virtual void finalizeLinkConfigurations() = 0;
45 virtual void prepareForComplete() = 0;
47 virtual SimTime_t getNextSyncTime() {
return nextSyncTime; }
52 virtual uint64_t getDataSize()
const = 0;
55 SimTime_t nextSyncTime;
58 void finalizeConfiguration(
Link* link) { link->finalizeConfiguration(); }
60 void prepareForCompleteInt(
Link* link) { link->prepareForComplete(); }
62 void sendUntimedData_sync(
Link* link,
Event* data) { link->sendUntimedData_sync(data); }
73 virtual void before() = 0;
74 virtual void after() = 0;
75 virtual void execute() = 0;
76 virtual void processLinkUntimedData() = 0;
77 virtual void finalizeLinkConfigurations() = 0;
78 virtual void prepareForComplete() = 0;
80 virtual SimTime_t getNextSyncTime() {
return nextSyncTime; }
82 void setMaxPeriod(
TimeConverter* period) { max_period = period; }
90 SimTime_t nextSyncTime;
93 void finalizeConfiguration(
Link* link) { link->finalizeConfiguration(); }
95 void prepareForCompleteInt(
Link* link) { link->prepareForComplete(); }
97 void sendUntimedData_sync(
Link* link,
Event* data) { link->sendUntimedData_sync(data); }
107 const std::vector<SimTime_t>& interThreadLatencies);
120 void print(
const std::string& header,
Output& out)
const override;
122 uint64_t getDataSize()
const;
125 enum sync_type_t { RANK, THREAD };
135 static SimTime_t next_rankSync;
140 sync_type_t next_sync_type;
143 void computeNextInsert();
150 #endif // SST_CORE_SYNC_SYNCMANAGER_H
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file...
Definition: output.h:51
An Action is a schedulable Activity which is not an Event.
Definition: action.h:26
Definition: syncManager.h:102
A class to convert between a component's view of time and the core's view of time.
Definition: timeConverter.h:26
void finalizeLinkConfigurations()
Finish link configuration.
Definition: syncManager.cc:253
Definition: syncManager.h:32
virtual void registerLink(LinkId_t link_id, Link *link)=0
Register a Link which this Sync Object is responsible for.
Exit Event Action.
Definition: exit.h:33
Definition: syncManager.h:67
void execute(void) override
Function which will be called when the time for this Activity comes to pass.
Definition: syncManager.cc:186
ActivityQueue * registerLink(const RankInfo &to_rank, const RankInfo &from_rank, LinkId_t link_id, Link *link)
Register a Link which this Sync Object is responsible for.
Definition: syncManager.cc:161
void exchangeLinkUntimedData(std::atomic< int > &msg_count)
Cause an exchange of Initialization Data to occur.
Definition: syncManager.cc:241
Main control class for a SST Simulation.
Definition: simulation_impl.h:74
Definition: rankInfo.h:21
void prepareForComplete()
Prepare for complete() phase.
Definition: syncManager.cc:266
virtual ActivityQueue * registerLink(const RankInfo &to_rank, const RankInfo &from_rank, LinkId_t link_id, Link *link)=0
Register a Link which this Sync Object is responsible for.
Base Class for a queue of Activities.
Definition: activityQueue.h:21
Base class for Events - Items sent across links to communicate between components.
Definition: event.h:31
void print(const std::string &header, Output &out) const override
Generic print-print function for this Activity.
Definition: syncManager.cc:287
Definition: threadsafe.h:47
Link between two components.
Definition: link.h:31