Handles where a given tasklet is run. More...

#include <tasklets.hpp>

Public Member Functions

 TaskletRunner (const TaskletRunner &)=delete
 
 TaskletRunner (unsigned numWorkers)
 Creates a tasklet runner with numWorkers underling threads for doing work. More...
 
 ~TaskletRunner ()
 Destructor. More...
 
bool failure () const
 
int workerThreadIndex () const
 Returns the index of the current worker thread. More...
 
int numWorkerThreads () const
 Returns the number of worker threads for the tasklet runner. More...
 
void dispatch (std::shared_ptr< TaskletInterface > tasklet)
 Add a new tasklet. More...
 
template<class Fn >
std::shared_ptr< FunctionRunnerTasklet< Fn > > dispatchFunction (Fn &fn, int numInvocations=1)
 Convenience method to construct a new function runner tasklet and dispatch it immediately. More...
 
void barrier ()
 Make sure that all tasklets have been completed after this method has been called. More...
 

Protected Member Functions

void run_ ()
 do the work until the queue received an end tasklet More...
 

Static Protected Member Functions

static void startWorkerThread_ (TaskletRunner *taskletRunner, int workerThreadIndex)
 

Protected Attributes

std::vector< std::unique_ptr< std::thread > > threads_
 
std::queue< std::shared_ptr< TaskletInterface > > taskletQueue_
 
std::mutex taskletQueueMutex_
 
std::condition_variable workAvailableCondition_
 

Static Protected Attributes

static thread_local TaskletRunnertaskletRunner_
 
static thread_local int workerThreadIndex_
 

Detailed Description

Handles where a given tasklet is run.

Depending on the number of worker threads, a tasklet can either be run in a separate worker thread or by the main thread.

Constructor & Destructor Documentation

◆ TaskletRunner() [1/2]

Opm::TaskletRunner::TaskletRunner ( const TaskletRunner )
delete

◆ TaskletRunner() [2/2]

Opm::TaskletRunner::TaskletRunner ( unsigned  numWorkers)

Creates a tasklet runner with numWorkers underling threads for doing work.

The number of worker threads may be 0. In this case, all work is done by the main thread (synchronous mode).

◆ ~TaskletRunner()

Opm::TaskletRunner::~TaskletRunner ( )

Destructor.

If worker threads were created to run the tasklets, this method waits until all worker threads have been terminated, i.e. all scheduled tasklets are guaranteed to be completed.

Member Function Documentation

◆ barrier()

void Opm::TaskletRunner::barrier ( )

Make sure that all tasklets have been completed after this method has been called.

Referenced by Opm::VtkMultiWriter< GridView, vtkFormat >::beginWrite(), and Opm::VtkMultiWriter< GridView, vtkFormat >::~VtkMultiWriter().

◆ dispatch()

void Opm::TaskletRunner::dispatch ( std::shared_ptr< TaskletInterface tasklet)

Add a new tasklet.

The tasklet is either run immediately or deferred to a separate thread.

Referenced by dispatchFunction(), and Opm::VtkMultiWriter< GridView, vtkFormat >::endWrite().

◆ dispatchFunction()

template<class Fn >
std::shared_ptr< FunctionRunnerTasklet< Fn > > Opm::TaskletRunner::dispatchFunction ( Fn &  fn,
int  numInvocations = 1 
)
inline

Convenience method to construct a new function runner tasklet and dispatch it immediately.

References dispatch().

◆ failure()

bool Opm::TaskletRunner::failure ( ) const

◆ numWorkerThreads()

int Opm::TaskletRunner::numWorkerThreads ( ) const
inline

Returns the number of worker threads for the tasklet runner.

References threads_.

◆ run_()

void Opm::TaskletRunner::run_ ( )
protected

do the work until the queue received an end tasklet

◆ startWorkerThread_()

static void Opm::TaskletRunner::startWorkerThread_ ( TaskletRunner taskletRunner,
int  workerThreadIndex 
)
staticprotected

◆ workerThreadIndex()

int Opm::TaskletRunner::workerThreadIndex ( ) const

Returns the index of the current worker thread.

If the current thread is not a worker thread, -1 is returned.

Member Data Documentation

◆ taskletQueue_

std::queue<std::shared_ptr<TaskletInterface> > Opm::TaskletRunner::taskletQueue_
protected

◆ taskletQueueMutex_

std::mutex Opm::TaskletRunner::taskletQueueMutex_
protected

◆ taskletRunner_

thread_local TaskletRunner* Opm::TaskletRunner::taskletRunner_
staticprotected

◆ threads_

std::vector<std::unique_ptr<std::thread> > Opm::TaskletRunner::threads_
protected

Referenced by numWorkerThreads().

◆ workAvailableCondition_

std::condition_variable Opm::TaskletRunner::workAvailableCondition_
protected

◆ workerThreadIndex_

thread_local int Opm::TaskletRunner::workerThreadIndex_
staticprotected

The documentation for this class was generated from the following file: