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> 26 class CheckpointAction;
28 class RealTimeManager;
29 class Simulation_impl;
31 class ThreadSyncQueue;
34 class SyncProfileToolList;
36 class SyncProfileTool;
42 RankSync(
RankInfo num_ranks) : num_ranks_(num_ranks) { link_maps.resize(num_ranks_.rank); }
49 void exchangeLinkInfo(uint32_t my_rank);
51 virtual void execute(
int thread) = 0;
52 virtual void exchangeLinkUntimedData(
int thread, std::atomic<int>& msg_count) = 0;
53 virtual void finalizeLinkConfigurations() = 0;
54 virtual void prepareForComplete() = 0;
57 virtual void setSignals(
int end,
int usr,
int alrm) = 0;
59 virtual bool getSignals(
int& end,
int& usr,
int& alrm) = 0;
61 virtual SimTime_t getNextSyncTime() {
return nextSyncTime; }
63 virtual void setRestartTime(SimTime_t time) { nextSyncTime = time; }
67 virtual uint64_t getDataSize()
const = 0;
70 SimTime_t nextSyncTime;
74 std::vector<std::map<std::string, uintptr_t>> link_maps;
76 void finalizeConfiguration(
Link* link) { link->finalizeConfiguration(); }
78 void prepareForCompleteInt(
Link* link) { link->prepareForComplete(); }
80 void sendUntimedData_sync(
Link* link,
Event* data) { link->sendUntimedData_sync(data); }
84 inline Link* getDeliveryLink(
Event* ev) {
return ev->getDeliveryLink(); }
93 virtual void before() = 0;
94 virtual void after() = 0;
95 virtual void execute() = 0;
96 virtual void processLinkUntimedData() = 0;
97 virtual void finalizeLinkConfigurations() = 0;
98 virtual void prepareForComplete() = 0;
101 virtual void setSignals(
int end,
int usr,
int alrm) = 0;
103 virtual bool getSignals(
int& end,
int& usr,
int& alrm) = 0;
105 virtual SimTime_t getNextSyncTime() {
return nextSyncTime; }
106 virtual void setRestartTime(SimTime_t time) { nextSyncTime = time; }
108 void setMaxPeriod(
TimeConverter* period) { max_period = period; }
113 virtual ActivityQueue* registerRemoteLink(
int tid,
const std::string& name,
Link* link) = 0;
116 SimTime_t nextSyncTime;
119 void finalizeConfiguration(
Link* link) { link->finalizeConfiguration(); }
121 void prepareForCompleteInt(
Link* link) { link->prepareForComplete(); }
123 void sendUntimedData_sync(
Link* link,
Event* data) { link->sendUntimedData_sync(data); }
127 inline Link* getDeliveryLink(
Event* ev) {
return ev->getDeliveryLink(); }
135 const std::vector<SimTime_t>& interThreadLatencies,
RealTimeManager* real_time);
142 void exchangeLinkInfo();
151 void print(
const std::string& header,
Output& out)
const override;
153 uint64_t getDataSize()
const;
155 void setRestartTime(SimTime_t time)
157 rankSync_->setRestartTime(time);
158 threadSync_->setRestartTime(time);
167 enum sync_type_t { RANK, THREAD };
175 static SimTime_t next_rankSync_;
180 sync_type_t next_sync_type_;
188 void computeNextInsert(SimTime_t next_checkpoint_time = MAX_SIMTIME_T);
189 void setupSyncObjects();
194 #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:53
An Action is a schedulable Activity which is not an Event.
Definition: action.h:26
Definition: syncManager.h:130
virtual ActivityQueue * registerLink(const RankInfo &to_rank, const RankInfo &from_rank, const std::string &name, Link *link)=0
Register a Link which this Sync Object is responsible for.
virtual void setSignals(int end, int usr, int alrm)=0
Set signals to exchange during sync.
A class to convert between a component's view of time and the core's view of time.
Definition: timeConverter.h:27
void finalizeLinkConfigurations()
Finish link configuration.
Definition: syncManager.cc:489
Definition: syncManager.h:39
void setDeliveryInfo(uintptr_t info)
Set the delivery_info for the link.
Definition: link.h:199
A recurring event to trigger checkpoint generation.
Definition: checkpointAction.h:60
Exit Event Action.
Definition: exit.h:34
Link * pair_link
Pointer to the opposite side of this link.
Definition: link.h:245
Definition: syncManager.h:87
virtual bool getSignals(int &end, int &usr, int &alrm)=0
Return exchanged signals after sync.
virtual void setSignals(int end, int usr, int alrm)=0
Set signals to exchange during sync.
void execute(void) override
Function which will be called when the time for this Activity comes to pass.
Definition: syncManager.cc:368
virtual bool getSignals(int &end, int &usr, int &alrm)=0
Return exchanged signals after sync.
void exchangeLinkUntimedData(std::atomic< int > &msg_count)
Cause an exchange of Initialization Data to occur.
Definition: syncManager.cc:478
ActivityQueue * registerLink(const RankInfo &to_rank, const RankInfo &from_rank, const std::string &name, Link *link)
Register a Link which this Sync Object is responsible for.
Definition: syncManager.cc:337
Main control class for a SST Simulation.
Definition: simulation_impl.h:76
Definition: rankInfo.h:21
void prepareForComplete()
Prepare for complete() phase.
Definition: syncManager.cc:506
Base Class for a queue of Activities.
Definition: activityQueue.h:21
Class to manage real-time events (signals and alarms)
Definition: realtime.h:156
Base class for Events - Items sent across links to communicate between components.
Definition: event.h:34
virtual void registerLink(const std::string &name, Link *link)=0
Register a Link which this Sync Object is responsible for.
Definition: threadsafe.h:47
Link between two components.
Definition: link.h:51