SST 16.0.0
Structural Simulation Toolkit
threadSyncDirectSkip.h
1// Copyright 2009-2026 NTESS. Under the terms
2// of Contract DE-NA0003525 with NTESS, the U.S.
3// Government retains certain rights in this software.
4//
5// Copyright (c) 2009-2026, NTESS
6// All rights reserved.
7//
8// This file is part of the SST software package. For license
9// information, see the LICENSE file in the top level directory of the
10// distribution.
11
12#ifndef SST_CORE_SYNC_THREADSYNCDIRECTSKIP_H
13#define SST_CORE_SYNC_THREADSYNCDIRECTSKIP_H
14
15#include "sst/core/action.h"
16#include "sst/core/simulation.h"
17#include "sst/core/sst_types.h"
18#include "sst/core/sync/syncManager.h"
19#include "sst/core/sync/syncQueue.h"
20
21#include <atomic>
22#include <cstdint>
23#include <string>
24#include <unordered_map>
25
26namespace SST {
27
28class ActivityQueue;
29class Link;
30class TimeConverter;
31class Exit;
32class Event;
33class Simulation;
34class ThreadSyncQueue;
35
36class ThreadSyncDirectSkip : public ThreadSync
37{
38public:
39 /** Create a new ThreadSync object */
40 ThreadSyncDirectSkip(int num_threads, int thread, Simulation* sim);
41 ThreadSyncDirectSkip() {} // For serialization only
43
44 void setMaxPeriod(TimeConverter* period);
45
46 void before() override {}
47 void after() override;
48 void execute() override;
49
50 /** Cause an exchange of Untimed Data to occur */
51 void processLinkUntimedData() override {}
52 /** Finish link configuration */
53 void finalizeLinkConfigurations() override {}
54 void prepareForComplete() override {}
55
56 /** Set signals to exchange during sync */
57 void setSignals(int end, int usr, int alrm) override;
58 /** Return exchanged signals after sync */
59 bool getSignals(int& end, int& usr, int& alrm) override;
60
61 /** Set interactive flags to exchange during sync */
62 void setShutdownFlags(bool enter_shutdown, Simulation::ShutdownMode_t shutdown_mode) override;
63 void setFlags(bool enter_interactive, bool enter_shutdown, Simulation::ShutdownMode_t shutdown_mode) override;
64 /** Return exchanged interactive flags after sync */
65 void getShutdownFlags(bool& enter_shutdown, Simulation::ShutdownMode_t& shutdown_mode) override;
66 void getFlags(bool& enter_interactive, bool& enter_shutdown, Simulation::ShutdownMode_t& shutdown_mode) override;
67 /** Clear interactive flags before next run */
68 void clearFlags() override;
69
70 SimTime_t getNextSyncTime() override { return nextSyncTime - 1; }
71
72 /** Register a Link which this Sync Object is responsible for */
73 void registerLink(Link* UNUSED(link)) override {}
74 ActivityQueue* registerRemoteLink(int UNUSED(id), Link* UNUSED(link)) override { return nullptr; }
75
76 uint64_t getDataSize() const;
77
78private:
79 SimTime_t my_max_period;
80 int num_threads;
81 int thread;
82 static SimTime_t localMinimumNextActivityTime;
83 Simulation* sim;
84 static Core::ThreadSafe::Barrier barrier[3];
85 double totalWaitTime;
86 bool single_rank;
87 static int sig_end_;
88 static int sig_usr_;
89 static int sig_alrm_;
90 static std::atomic<bool> enter_interactive_;
91 static std::atomic<bool> enter_shutdown_;
92 static std::atomic<unsigned> shutdown_mode_;
93};
94
95
96} // namespace SST
97
98#endif // SST_CORE_SYNC_THREADSYNCDIRECTSKIP_H
Base Class for a queue of Activities.
Definition activityQueue.h:22
Base class for Events - Items sent across links to communicate between components.
Definition event.h:41
Exit Action.
Definition exit.h:35
Main control class for a SST Simulation.
Definition simulation.h:121
void getShutdownFlags(bool &enter_shutdown, Simulation::ShutdownMode_t &shutdown_mode) override
Return exchanged interactive flags after sync.
Definition threadSyncDirectSkip.cc:124
void setShutdownFlags(bool enter_shutdown, Simulation::ShutdownMode_t shutdown_mode) override
Set interactive flags to exchange during sync.
Definition threadSyncDirectSkip.cc:107
void finalizeLinkConfigurations() override
Finish link configuration.
Definition threadSyncDirectSkip.h:53
void clearFlags() override
Clear interactive flags before next run.
Definition threadSyncDirectSkip.cc:148
void registerLink(Link *UNUSED(link)) override
Register a Link which this Sync Object is responsible for.
Definition threadSyncDirectSkip.h:73
bool getSignals(int &end, int &usr, int &alrm) override
Return exchanged signals after sync.
Definition threadSyncDirectSkip.cc:98
void processLinkUntimedData() override
Cause an exchange of Untimed Data to occur.
Definition threadSyncDirectSkip.h:51
ThreadSyncDirectSkip(int num_threads, int thread, Simulation *sim)
Create a new ThreadSync object.
Definition threadSyncDirectSkip.cc:30
void setSignals(int end, int usr, int alrm) override
Set signals to exchange during sync.
Definition threadSyncDirectSkip.cc:90
Definition syncQueue.h:100
A class to convert between a component's view of time and the core's view of time.
Definition timeConverter.h:31