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" 24 #include <unordered_map> 29 class CheckpointAction;
31 class RealTimeManager;
32 class Simulation_impl;
34 class ThreadSyncQueue;
37 class SyncProfileToolList;
39 class SyncProfileTool;
48 link_maps.resize(num_ranks_.rank);
56 void exchangeLinkInfo(uint32_t my_rank);
58 virtual void execute(
int thread) = 0;
59 virtual void exchangeLinkUntimedData(
int thread, std::atomic<int>& msg_count) = 0;
60 virtual void finalizeLinkConfigurations() = 0;
61 virtual void prepareForComplete() = 0;
64 virtual void setSignals(
int end,
int usr,
int alrm) = 0;
66 virtual bool getSignals(
int& end,
int& usr,
int& alrm) = 0;
68 virtual SimTime_t getNextSyncTime() {
return nextSyncTime; }
70 virtual void setRestartTime(SimTime_t time) { nextSyncTime = time; }
74 virtual uint64_t getDataSize()
const = 0;
77 SimTime_t nextSyncTime;
81 std::vector<std::map<std::string, uintptr_t>> link_maps;
83 void finalizeConfiguration(
Link* link) { link->finalizeConfiguration(); }
85 void prepareForCompleteInt(
Link* link) { link->prepareForComplete(); }
87 void sendUntimedData_sync(
Link* link,
Event* data) { link->sendUntimedData_sync(data); }
91 inline Link* getDeliveryLink(
Event* ev) {
return ev->getDeliveryLink(); }
100 virtual void before() = 0;
101 virtual void after() = 0;
102 virtual void execute() = 0;
103 virtual void processLinkUntimedData() = 0;
104 virtual void finalizeLinkConfigurations() = 0;
105 virtual void prepareForComplete() = 0;
108 virtual void setSignals(
int end,
int usr,
int alrm) = 0;
110 virtual bool getSignals(
int& end,
int& usr,
int& alrm) = 0;
112 virtual SimTime_t getNextSyncTime() {
return nextSyncTime; }
113 virtual void setRestartTime(SimTime_t time) { nextSyncTime = time; }
115 void setMaxPeriod(
TimeConverter* period) { max_period = period; }
120 virtual ActivityQueue* registerRemoteLink(
int tid,
const std::string& name,
Link* link) = 0;
123 SimTime_t nextSyncTime;
126 void finalizeConfiguration(
Link* link) { link->finalizeConfiguration(); }
128 void prepareForCompleteInt(
Link* link) { link->prepareForComplete(); }
130 void sendUntimedData_sync(
Link* link,
Event* data) { link->sendUntimedData_sync(data); }
134 inline Link* getDeliveryLink(
Event* ev) {
return ev->getDeliveryLink(); }
141 const std::vector<SimTime_t>& interThreadLatencies,
RealTimeManager* real_time);
148 void exchangeLinkInfo();
157 void print(
const std::string& header,
Output& out)
const override;
159 uint64_t getDataSize()
const;
161 void setRestartTime(SimTime_t time)
163 rankSync_->setRestartTime(time);
164 threadSync_->setRestartTime(time);
173 enum sync_type_t { RANK, THREAD };
181 static SimTime_t next_rankSync_;
186 sync_type_t next_sync_type_;
194 void computeNextInsert(SimTime_t next_checkpoint_time = MAX_SIMTIME_T);
195 void setupSyncObjects();
200 #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:57
An Action is a schedulable Activity which is not an Event.
Definition: action.h:26
Definition: syncManager.h:137
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:494
Definition: syncManager.h:42
void setDeliveryInfo(uintptr_t info)
Set the delivery_info for the link.
Definition: link.h:296
A recurring event to trigger checkpoint generation.
Definition: checkpointAction.h:62
Exit Action.
Definition: exit.h:33
Link * pair_link
Pointer to the opposite side of this link.
Definition: link.h:357
Definition: syncManager.h:94
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.
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:483
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:338
Main control class for a SST Simulation.
Definition: simulation_impl.h:122
Definition: rankInfo.h:23
void execute() override
Function which will be called when the time for this Activity comes to pass.
Definition: syncManager.cc:369
void prepareForComplete()
Prepare for complete() phase.
Definition: syncManager.cc:511
Base Class for a queue of Activities.
Definition: activityQueue.h:21
Class to manage real-time events (signals and alarms)
Definition: realtime.h:171
Base class for Events - Items sent across links to communicate between components.
Definition: event.h:40
virtual void registerLink(const std::string &name, Link *link)=0
Register a Link which this Sync Object is responsible for.
Definition: threadsafe.h:49
Link between two components.
Definition: link.h:56