Loading...
Searching...
No Matches
VdfParallelSpeculationExecutorEngine< DataManagerType > Class Template Reference

An executor engine used for parallel speculation node evaluation, deriving from VdfParallelExecutorEngineBase. More...

#include <parallelSpeculationExecutorEngine.h>

+ Inheritance diagram for VdfParallelSpeculationExecutorEngine< DataManagerType >:

Public Types

typedef VdfParallelExecutorEngineBase< VdfParallelSpeculationExecutorEngine< DataManagerType >, DataManagerType > Base
 Base class.
 

Public Member Functions

 VdfParallelSpeculationExecutorEngine (const VdfSpeculationExecutorBase &speculationExecutor, DataManagerType *dataManager)
 Constructor.
 
- Public Member Functions inherited from VdfParallelExecutorEngineBase< VdfParallelSpeculationExecutorEngine< DataManagerType >, DataManagerType >
 VdfParallelExecutorEngineBase (const VdfParallelExecutorEngineBase &)=delete
 Noncopyable.
 
 VdfParallelExecutorEngineBase (const VdfExecutorInterface &executor, DataManagerType *dataManager)
 Constructor.
 
VdfParallelExecutorEngineBaseoperator= (const VdfParallelExecutorEngineBase &)=delete
 
virtual ~VdfParallelExecutorEngineBase ()
 Destructor.
 
void RunSchedule (const VdfSchedule &schedule, const VdfRequest &computeRequest, VdfExecutorErrorLogger *errorLogger)
 Executes the given schedule with a computeRequest and an optional errorLogger.
 
void RunSchedule (const VdfSchedule &schedule, const VdfRequest &computeRequest, VdfExecutorErrorLogger *errorLogger, Callback &&callback)
 Executes the given schedule with a computeRequest and an optional errorLogger.
 

Additional Inherited Members

- Protected Types inherited from VdfParallelExecutorEngineBase< VdfParallelSpeculationExecutorEngine< DataManagerType >, DataManagerType >
typedef DataManager::DataHandle _DataHandle
 
typedef uint32_t _EvaluationStage
 
- Protected Member Functions inherited from VdfParallelExecutorEngineBase< VdfParallelSpeculationExecutorEngine< DataManagerType >, DataManagerType >
void _ResetState (const VdfSchedule &schedule)
 
void _RunOutput (const VdfEvaluationState &state, const VdfMaskedOutput &maskedOutput, const size_t requestedIndex, Callback &callback, WorkTaskGraph::TaskList *taskList)
 
void _SpawnRequestedTasks (const VdfEvaluationState &state, const VdfNode &node, WorkTaskGraph::BaseTask *successor, WorkTaskGraph::BaseTask **bypass)
 
void _SpawnOrBypass (WorkTaskGraph::BaseTask *task, WorkTaskGraph::BaseTask **bypass)
 
bool _ProcessLeafTask (WorkTaskGraph::BaseTask *task, const VdfEvaluationState &state, const VdfMaskedOutput &maskedOutput, const size_t requestedIndex, Callback &callback, _EvaluationStage *evaluationStage, WorkTaskGraph::BaseTask **bypass)
 
bool _ProcessComputeTask (WorkTaskGraph::BaseTask *task, const VdfEvaluationState &state, const VdfNode &node, const VdfScheduleComputeTask &scheduleTask, _EvaluationStage *evaluationStage, WorkTaskGraph::BaseTask **bypass)
 
bool _ProcessInputsTask (WorkTaskGraph::BaseTask *task, const VdfEvaluationState &state, const VdfNode &node, const VdfScheduleInputsTask &scheduleTask, _EvaluationStage *evaluationStage, WorkTaskGraph::BaseTask **bypass)
 
bool _ProcessKeepTask (WorkTaskGraph::BaseTask *task, const VdfEvaluationState &state, const VdfNode &node, _EvaluationStage *evaluationStage, WorkTaskGraph::BaseTask **bypass)
 
bool _InvokeKeepTask (const VdfScheduleTaskIndex idx, const VdfNode &node, const VdfEvaluationState &state, WorkTaskGraph::BaseTask *successor, WorkTaskGraph::BaseTask **bypass)
 
void _InvokeTouchTask (const VdfOutput &dest, const VdfOutput &source)
 
bool _InvokeComputeTask (const VdfScheduleTaskId taskIndex, const VdfEvaluationState &state, const VdfNode &node, WorkTaskGraph::BaseTask *successor, WorkTaskGraph::BaseTask **bypass)
 
bool _InvokeComputeTasks (const Iterable &tasks, const VdfEvaluationState &state, const VdfNode &node, WorkTaskGraph::BaseTask *successor, WorkTaskGraph::BaseTask **bypass)
 
bool _IsInputDependencyCached (VdfScheduleInputDependencyUniqueIndex uniqueIndex, const VdfOutput &output, const VdfMask &mask)
 
bool _InvokeComputeOrKeepTasks (const VdfScheduleInputDependency &input, const VdfEvaluationState &state, WorkTaskGraph::BaseTask *successor, WorkTaskGraph::BaseTask **bypass)
 
bool _InvokeComputeOrKeepTasks (const VdfOutput &output, const VdfEvaluationState &state, WorkTaskGraph::BaseTask *successor, WorkTaskGraph::BaseTask **bypass)
 
bool _InvokePrereqInputs (const VdfScheduleInputsTask &scheduleTask, const VdfEvaluationState &state, WorkTaskGraph::BaseTask *successor, WorkTaskGraph::BaseTask **bypass)
 
bool _InvokeOptionalInputs (const VdfScheduleInputsTask &scheduleTask, const VdfEvaluationState &state, const VdfNode &node, WorkTaskGraph::BaseTask *successor, WorkTaskGraph::BaseTask **bypass)
 
bool _InvokeRequiredInputs (const VdfScheduleComputeTask &scheduleTask, const VdfEvaluationState &state, WorkTaskGraph::BaseTask *successor, WorkTaskGraph::BaseTask **bypass)
 
bool _InvokeInputsTask (const VdfScheduleComputeTask &scheduleTask, const VdfEvaluationState &state, const VdfNode &node, WorkTaskGraph::BaseTask *successor, WorkTaskGraph::BaseTask **bypass)
 
bool _InvokePrepTask (const VdfScheduleComputeTask &scheduleTask, const VdfEvaluationState &state, const VdfNode &node, WorkTaskGraph::BaseTask *successor)
 
void _PrepareNode (const VdfEvaluationState &state, const VdfNode &node)
 
void _PrepareOutput (const VdfSchedule &schedule, const VdfSchedule::OutputId outputId)
 
void _CreateScratchCache (const VdfOutput &output, const _DataHandle dataHandle, const VdfMask &mask, VdfExecutorBufferData *scratchBuffer)
 
void _EvaluateNode (const VdfScheduleComputeTask &scheduleTask, const VdfEvaluationState &state, const VdfNode &node, WorkTaskGraph::BaseTask *successor)
 
void _ComputeNode (const VdfScheduleComputeTask &scheduleTask, const VdfEvaluationState &state, const VdfNode &node)
 
void _PassThroughNode (const VdfScheduleComputeTask &scheduleTask, const VdfEvaluationState &state, const VdfNode &node)
 
void _ProcessOutput (const VdfScheduleComputeTask &scheduleTask, const VdfEvaluationState &state, const VdfOutput &output, const VdfSchedule::OutputId outputId, const _DataHandle dataHandle, const bool hasAssociatedInput, VdfExecutorBufferData *privateBuffer)
 
void _PrepareReadWriteBuffer (const VdfOutput &output, const VdfSchedule::OutputId outputId, const VdfMask &mask, const VdfSchedule &schedule, VdfExecutorBufferData *privateBuffer)
 
void _PassOrCopyBuffer (const VdfOutput &output, const VdfOutput &source, const VdfMask &inputMask, const VdfSchedule &schedule, VdfExecutorBufferData *privateBuffer)
 
void _PassBuffer (VdfExecutorBufferData *fromBuffer, VdfExecutorBufferData *toBuffer) const
 
void _CopyBuffer (const VdfOutput &output, const VdfOutput &source, const VdfMask &fromMask, VdfExecutorBufferData *toData) const
 
void _PublishScratchBuffers (const VdfSchedule &schedule, const VdfNode &node)
 
VdfVector_AbsorbPublicBuffer (const VdfOutput &output, const _DataHandle dataHandle, const VdfMask &haveMask)
 
bool _DetectInterruption (const VdfEvaluationState &state, const VdfNode &node)
 
bool _HasDetectedInterruption () const
 
void _TransportErrors (const TfErrorMark &errorMark)
 
void _PostTransportedErrors ()
 
VdfParallelSpeculationExecutorEngine< DataManagerType > & _Self ()
 
- Protected Attributes inherited from VdfParallelExecutorEngineBase< VdfParallelSpeculationExecutorEngine< DataManagerType >, DataManagerType >
const VdfExecutorInterface_executor
 
DataManagerType * _dataManager
 
WorkTaskGraph _taskGraph
 
WorkIsolatingDispatcher _isolatingDispatcher
 
std::unique_ptr< std::atomic< uint8_t >[]> _dependencyState
 
std::atomic< bool > _resetState
 
VdfParallelTaskSync _computeTasks
 
VdfParallelTaskSync _inputsTasks
 
VdfParallelTaskSync _prepTasks
 
VdfParallelTaskSync _keepTasks
 
tbb::concurrent_vector< TfErrorTransport_errors
 
std::atomic< bool > _isInterrupted
 

Detailed Description

template<typename DataManagerType>
class VdfParallelSpeculationExecutorEngine< DataManagerType >

An executor engine used for parallel speculation node evaluation, deriving from VdfParallelExecutorEngineBase.

The engine does not support arena execution. The reason being that the parent executor engine will already be executing tasks inside of an arena. The engine does also not need to do any touching, or buffer locking, due to its temporary lifetime. It does, however, do cycle detection.

Definition at line 33 of file parallelSpeculationExecutorEngine.h.

Member Typedef Documentation

◆ Base

typedef VdfParallelExecutorEngineBase< VdfParallelSpeculationExecutorEngine<DataManagerType>, DataManagerType> Base

Base class.

Definition at line 46 of file parallelSpeculationExecutorEngine.h.

Constructor & Destructor Documentation

◆ VdfParallelSpeculationExecutorEngine()

VdfParallelSpeculationExecutorEngine ( const VdfSpeculationExecutorBase &  speculationExecutor,
DataManagerType *  dataManager 
)

Constructor.

Definition at line 95 of file parallelSpeculationExecutorEngine.h.


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