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;
35 RankSync(
RankInfo num_ranks) : num_ranks(num_ranks) { link_maps.resize(num_ranks.rank); }
41 void exchangeLinkInfo(uint32_t my_rank);
43 virtual void execute(
int thread) = 0;
44 virtual void exchangeLinkUntimedData(
int thread, std::atomic<int>& msg_count) = 0;
45 virtual void finalizeLinkConfigurations() = 0;
46 virtual void prepareForComplete() = 0;
48 virtual SimTime_t getNextSyncTime() {
return nextSyncTime; }
53 virtual uint64_t getDataSize()
const = 0;
56 SimTime_t nextSyncTime;
60 std::vector<std::map<std::string, uintptr_t>> link_maps;
62 void finalizeConfiguration(
Link* link) { link->finalizeConfiguration(); }
64 void prepareForCompleteInt(
Link* link) { link->prepareForComplete(); }
66 void sendUntimedData_sync(
Link* link,
Event* data) { link->sendUntimedData_sync(data); }
70 inline Link* getDeliveryLink(
Event* ev) {
return ev->getDeliveryLink(); }
81 virtual void before() = 0;
82 virtual void after() = 0;
83 virtual void execute() = 0;
84 virtual void processLinkUntimedData() = 0;
85 virtual void finalizeLinkConfigurations() = 0;
86 virtual void prepareForComplete() = 0;
88 virtual SimTime_t getNextSyncTime() {
return nextSyncTime; }
90 void setMaxPeriod(
TimeConverter* period) { max_period = period; }
95 virtual ActivityQueue* registerRemoteLink(
int tid,
const std::string& name,
Link* link) = 0;
98 SimTime_t nextSyncTime;
101 void finalizeConfiguration(
Link* link) { link->finalizeConfiguration(); }
103 void prepareForCompleteInt(
Link* link) { link->prepareForComplete(); }
105 void sendUntimedData_sync(
Link* link,
Event* data) { link->sendUntimedData_sync(data); }
109 inline Link* getDeliveryLink(
Event* ev) {
return ev->getDeliveryLink(); }
119 const std::vector<SimTime_t>& interThreadLatencies);
125 void exchangeLinkInfo();
134 void print(
const std::string& header,
Output& out)
const override;
136 uint64_t getDataSize()
const;
139 enum sync_type_t { RANK, THREAD };
149 static SimTime_t next_rankSync;
154 sync_type_t next_sync_type;
157 void computeNextInsert();
164 #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:114
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.
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:360
Definition: syncManager.h:32
void setDeliveryInfo(uintptr_t info)
Set the delivery_info for the link.
Definition: link.h:191
Exit Event Action.
Definition: exit.h:33
Link * pair_link
Pointer to the opposite side of this link.
Definition: link.h:237
Definition: syncManager.h:75
void execute(void) override
Function which will be called when the time for this Activity comes to pass.
Definition: syncManager.cc:258
void exchangeLinkUntimedData(std::atomic< int > &msg_count)
Cause an exchange of Initialization Data to occur.
Definition: syncManager.cc:349
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:227
Main control class for a SST Simulation.
Definition: simulation_impl.h:75
Definition: rankInfo.h:21
void prepareForComplete()
Prepare for complete() phase.
Definition: syncManager.cc:373
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:34
void print(const std::string &header, Output &out) const override
Generic print-print function for this Activity.
Definition: syncManager.cc:394
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:32