Peano
Loading...
Searching...
No Matches
ThreadPoolTaskBackend Class Reference

#include <task.h>

Static Public Member Functions

template<StatelessTaskGenerator T>
static void runSerialGenerator (T generator, u32 numThreads=0)
 
template<typename StateInitF , StatefulTaskGenerator< std::invoke_result_t< StateInitF > > T>
static auto runSerialGenerator (T generator, StateInitF stateInitF, u32 numThreads=0)
 
template<StatelessTaskGenerator T>
static void runParallelGenerator (T generator, u32 numThreads=0)
 
template<typename StateInitF , StatefulTaskGenerator< std::invoke_result_t< StateInitF > > T>
static auto runParallelGenerator (T generator, StateInitF stateInitF, u32 numThreads=0)
 
static u32 THREAD_COUNT (u32 numThreads=0)
 
static u32 MAX_THREADS ()
 

Static Private Member Functions

template<typename Task , typename TaskGenerator >
static std::optional< Task > createNewTasks (TaskGenerator *generator, SPMCChannel< Task > *channel, std::atomic_int32_t *producerThreadId)
 
template<typename Val , StatefulTask< Val > Task>
static void invokeTask (Task &task, Val &val, i32 threadId)
 
template<typename ValueType , StatefulTaskGenerator< ValueType > TaskGenerator, StatefulTask< ValueType > Task, typename StateInitF >
static void producerConsumerLoop (i32 threadId, TaskGenerator *generator, SPMCChannel< Task > *channel, StateInitF stateInitF, ValueType *retVal, std::atomic_int32_t *producerThreadId)
 
static ThreadPoolWORKER_POOL ()
 
template<typename StateInitF , StatefulTaskGenerator< std::invoke_result_t< StateInitF > > T>
static auto runSerialGeneratorSerial (T generator, StateInitF stateInitF)
 
template<typename StateInitF , StatefulTaskGenerator< std::invoke_result_t< StateInitF > > T>
static auto runSerialGeneratorParallel (T generator, StateInitF stateInitF, u32 numThreads)
 
template<typename StateInitF , StatefulTaskGenerator< std::invoke_result_t< StateInitF > > T>
static auto runParallelGeneratorParallel (T &generator, StateInitF stateInitF, u32 numThreads)
 

Detailed Description

Definition at line 171 of file task.h.

Member Function Documentation

◆ createNewTasks()

template<typename Task , typename TaskGenerator >
static std::optional< Task > ThreadPoolTaskBackend::createNewTasks ( TaskGenerator * generator,
SPMCChannel< Task > * channel,
std::atomic_int32_t * producerThreadId )
staticprivate

Definition at line 173 of file task.h.

References SPMCChannel< Item, CELLS_PER_CONSUMER >::close(), SPMCChannel< Item, CELLS_PER_CONSUMER >::isClosed(), and SPMCChannel< Item, CELLS_PER_CONSUMER >::put().

Referenced by producerConsumerLoop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ invokeTask()

template<typename Val , StatefulTask< Val > Task>
static void ThreadPoolTaskBackend::invokeTask ( Task & task,
Val & val,
i32 threadId )
staticprivate

Definition at line 198 of file task.h.

References TaskCtx::workerId.

Referenced by producerConsumerLoop(), runParallelGeneratorParallel(), and runSerialGeneratorSerial().

Here is the caller graph for this function:

◆ MAX_THREADS()

static u32 ThreadPoolTaskBackend::MAX_THREADS ( )
static

Definition at line 387 of file task.h.

References ThreadPool::size(), and WORKER_POOL().

Referenced by THREAD_COUNT().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ producerConsumerLoop()

template<typename ValueType , StatefulTaskGenerator< ValueType > TaskGenerator, StatefulTask< ValueType > Task, typename StateInitF >
static void ThreadPoolTaskBackend::producerConsumerLoop ( i32 threadId,
TaskGenerator * generator,
SPMCChannel< Task > * channel,
StateInitF stateInitF,
ValueType * retVal,
std::atomic_int32_t * producerThreadId )
staticprivate

Definition at line 208 of file task.h.

References createNewTasks(), SPMCChannel< Item, CELLS_PER_CONSUMER >::getReader(), invokeTask(), and SPMCChannel< Item, CELLS_PER_CONSUMER >::isClosed().

Here is the call graph for this function:

◆ runParallelGenerator() [1/2]

template<typename StateInitF , StatefulTaskGenerator< std::invoke_result_t< StateInitF > > T>
static auto ThreadPoolTaskBackend::runParallelGenerator ( T generator,
StateInitF stateInitF,
u32 numThreads = 0 )
static

Definition at line 375 of file task.h.

References runParallelGeneratorParallel(), runSerialGeneratorSerial(), and THREAD_COUNT().

Here is the call graph for this function:

◆ runParallelGenerator() [2/2]

static void ThreadPoolTaskBackend::runParallelGenerator ( T generator,
u32 numThreads = 0 )
static

Definition at line 368 of file task.h.

References runParallelGenerator(), THREAD_COUNT(), and ToStatefulGenerator().

Referenced by runParallelGenerator().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ runParallelGeneratorParallel()

template<typename StateInitF , StatefulTaskGenerator< std::invoke_result_t< StateInitF > > T>
static auto ThreadPoolTaskBackend::runParallelGeneratorParallel ( T & generator,
StateInitF stateInitF,
u32 numThreads )
staticprivate

Definition at line 318 of file task.h.

References ThreadPool::dispatch(), invokeTask(), ThreadPool::wait(), and WORKER_POOL().

Referenced by runParallelGenerator().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ runSerialGenerator() [1/2]

template<typename StateInitF , StatefulTaskGenerator< std::invoke_result_t< StateInitF > > T>
static auto ThreadPoolTaskBackend::runSerialGenerator ( T generator,
StateInitF stateInitF,
u32 numThreads = 0 )
static

Definition at line 361 of file task.h.

References runSerialGeneratorParallel(), runSerialGeneratorSerial(), and THREAD_COUNT().

Here is the call graph for this function:

◆ runSerialGenerator() [2/2]

static void ThreadPoolTaskBackend::runSerialGenerator ( T generator,
u32 numThreads = 0 )
static

Definition at line 354 of file task.h.

References runSerialGenerator(), THREAD_COUNT(), and ToStatefulGenerator().

Referenced by runSerialGenerator().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ runSerialGeneratorParallel()

template<typename StateInitF , StatefulTaskGenerator< std::invoke_result_t< StateInitF > > T>
static auto ThreadPoolTaskBackend::runSerialGeneratorParallel ( T generator,
StateInitF stateInitF,
u32 numThreads )
staticprivate

Definition at line 293 of file task.h.

References ThreadPool::dispatch(), ThreadPool::wait(), and WORKER_POOL().

Referenced by runSerialGenerator().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ runSerialGeneratorSerial()

template<typename StateInitF , StatefulTaskGenerator< std::invoke_result_t< StateInitF > > T>
static auto ThreadPoolTaskBackend::runSerialGeneratorSerial ( T generator,
StateInitF stateInitF )
staticprivate

Definition at line 276 of file task.h.

References invokeTask().

Referenced by runParallelGenerator(), and runSerialGenerator().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ THREAD_COUNT()

static u32 ThreadPoolTaskBackend::THREAD_COUNT ( u32 numThreads = 0)
static

Definition at line 381 of file task.h.

References MAX_THREADS().

Referenced by runParallelGenerator(), runParallelGenerator(), runSerialGenerator(), and runSerialGenerator().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WORKER_POOL()

static ThreadPool & ThreadPoolTaskBackend::WORKER_POOL ( )
staticprivate

Definition at line 270 of file task.h.

Referenced by MAX_THREADS(), runParallelGeneratorParallel(), and runSerialGeneratorParallel().

Here is the caller graph for this function:

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