19 #include <boost/noncopyable.hpp>
20 #include <boost/unordered/unordered_map.hpp>
21 #include <boost/ptr_container/ptr_vector.hpp>
23 #include <tbb/mutex.h>
24 #include <tbb/tbb_thread.h>
25 #include <tbb/compat/condition_variable>
26 #include <tbb/enumerable_thread_specific.h>
27 #include <tbb/atomic.h>
28 #include <tbb/concurrent_queue.h>
86 virtual void runCallback() = 0;
89 typedef boost::unordered_map<std::string, bool>
EnabledMap;
131 virtual bool active()
const;
143 virtual bool enabled(
const std::string&,
bool def)
const;
149 virtual void printInfo(std::ostream&)
const;
168 template <
typename Container>
171 typedef typename Container::iterator iterator;
172 for (iterator i=cont.begin(), end=cont.end(); i != end; ++i)
176 template <
typename Container>
177 void addCallbacks(Container& cont,
const std::string& tag,
bool def=
true)
179 bool runNow = !
enabled(tag, def);
180 typedef typename Container::iterator iterator;
183 for (iterator i = cont.begin(), end = cont.end(); i != end; ++i)
190 for (iterator i = cont.begin(), end = cont.end(); i != end; ++i)
197 template <
typename Container>
247 unsigned maxConcurrent);
263 class ThreadLocalInfo;
265 virtual ThreadLocalInfo& threadLocalInfo();
268 static void RunJob(CallbackInterface*);
269 static void RunJob(CallbackInterface&);
271 virtual void executeDeferredJobs(AccessType access);
272 virtual void flushDeferredJobs();
279 typedef tbb::enumerable_thread_specific<
295 typedef tbb::concurrent_queue< boost::function<void()> >
JobQueue;
388 typedef std::vector<DtCriticalSection*>
Stack;
virtual DtVrfCallbackQueue * queue() const
Access the callback queue object.
tbb::enumerable_thread_specific< ThreadLocalInfo *, ThreadLocalAllocator, tbb::ets_key_per_instance > ThreadLocalContainer
DtCriticalSection, ThreadLocalAllocator> ThreadLocalContainer;.
Definition: parallelTickManager.h:282
virtual unsigned maxSpinCount() const
Accessor/mutator for number of times to spin on spinlock before yielding processor.
tbb::atomic< unsigned > jobCount
Definition: parallelTickManager.h:298
void addCallbacks(Container &cont)
Definition: parallelTickManager.h:169
virtual bool executeCommand(const std::string &, bool on)
Execute a console command.
bool myWaitFlag
Definition: parallelTickManager.h:290
std::vector< DtCriticalSection * > Stack
Definition: parallelTickManager.h:388
virtual bool upgradeToWriter()
AccessType from
Definition: parallelTickManager.h:371
DtParallelTickManager(DtVrfSimOptionsInterface *options)
virtual void configureDeferredJobClass(JobClass jobclass, AccessType access, unsigned maxConcurrent)
Configure a job class.
JobQueue queue
Definition: parallelTickManager.h:297
Options for the configuring the sim.
Definition: vrfSimOptionsInterface.h:19
boost::unordered_map< std::string, bool > EnabledMap
Definition: parallelTickManager.h:89
virtual void printInfo(std::ostream &, size_t width=0) const
Print detailed info to stream.
DtVrfCallbackQueue * myCallbackQueue
Definition: parallelTickManager.h:287
tbb::atomic< unsigned > myDeferredJobCount
Definition: parallelTickManager.h:310
virtual void setDeferJobs(bool)
Enable/disable deferred jobs.
Definition: parallelTickManager.h:69
Enables parallelism in the main thread.
Definition: parallelTickManager.h:62
Simple asynchronous callback queue.
Definition: vrfCallbackQueue.h:32
ThreadLocalContainer myThreadLocals
Definition: parallelTickManager.h:284
virtual void clearDeferredJobs()
Clear out all deferred jobs from the various queues.
void addCallbacks(Container &cont, const std::string &tag, bool def=true)
Definition: parallelTickManager.h:177
virtual void addVRLinkDeferredJob(const boost::function< void()> &callback)
Convenience functions.
Definition: parallelTickManager.h:237
virtual void setActive(bool)
DtVrfSimOptionsInterface * myOptions
Definition: parallelTickManager.h:286
unsigned myMaxSpinCount
Definition: parallelTickManager.h:291
virtual void flushQueue()
EnabledMap myEnabledMap
Definition: parallelTickManager.h:289
API for writing callbacks.
Definition: vrfCallbackQueue.h:55
ThreadLocalInfo(DtParallelTickManager *m)
JobClass
Deferred Jobs is a mechanism for deferring work until a later time.
Definition: parallelTickManager.h:234
void addCallbacks(Container &cont, const char *tag, bool def=true)
Definition: parallelTickManager.h:198
AccessType to
Definition: parallelTickManager.h:372
A utility class for use with DtConsoleCommandManager.
Definition: consoleCommandManager.h:157
Definition: parallelTickManager.h:236
Definition: parallelTickManager.h:293
boost::ptr_vector< ClassInfo > myDeferredJobs
Definition: parallelTickManager.h:309
virtual bool lock()
Manipulate global mutex.
AccessType
Definition: parallelTickManager.h:65
bool myDeferJobsFlag
Definition: parallelTickManager.h:308
virtual bool enabled(const std::string &, bool def) const
Simple mechanism for controlling multiple parallel sections.
virtual bool active() const
Accessor/mutator for the entire parallel mechanism.
virtual void addDeferredJob(JobClass jobclass, const boost::function< void()> &callback)
Add a deferred job.
virtual bool readUnlock()
DtSubCommandManager * myCommandManager
Definition: parallelTickManager.h:312
tbb::cache_aligned_allocator< ThreadLocalInfo * > ThreadLocalAllocator
Definition: parallelTickManager.h:276
virtual void setMainThreadWait(bool)
DtParallelTickManager::AccessType AccessType
Definition: parallelTickManager.h:327
AccessType access
Definition: parallelTickManager.h:301
DtParallelTickManager::ThreadLocalInfo * info
Definition: parallelTickManager.h:369
virtual void setCallbackQueue(DtVrfCallbackQueue *)
Takes ownership.
static void RunJob(CallbackInterface *)
A specialized version of DtConsoleCommandManager which handles a set of sub commands from another con...
Definition: consoleCommandManager.h:126
The simulation engine is controlled by a single,top-level class called the Simulation Manager...
Definition: simManager.h:102
virtual bool downgradeToReader()
virtual ~DtParallelTickManager()
DtParallelTickManager * mgr
Definition: parallelTickManager.h:368
virtual void addCallback(CallbackInterface *)
Add callbacks to the queue.
DtConsoleCommandOwner * myCommandOwner
Definition: parallelTickManager.h:313
virtual bool changeAccess(AccessType from, AccessType to)
tbb::atomic< int > myAccessCount
Definition: parallelTickManager.h:274
tbb::atomic< unsigned > runCount
Definition: parallelTickManager.h:299
tbb::concurrent_queue< boost::function< void()> > JobQueue
Definition: parallelTickManager.h:295
RAII manager object for accessing paralle tick functionality.
Definition: parallelTickManager.h:324
Interface for defining callbacks.
Definition: parallelTickManager.h:75
Definition: parallelTickManager.h:67
virtual bool mainThreadWait() const
Accessor/mutator for main thread participation in running callbacks.
#define DT_DLL_vrfcore
This file is used to determine how to build.
Definition: vrfcoreDefines.h:25
Stack myLocks
Definition: parallelTickManager.h:389
unsigned max
Definition: parallelTickManager.h:300
virtual void setMaxSpinCount(unsigned)
Definition: parallelTickManager.h:68
void release()
Set mutex state to value it had when this object was created.
Definition: parallelTickManager.h:357