HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
VdfExecutorInterface Class Referenceabstract

Abstract base class for classes that execute a VdfNetwork to compute a requested set of values. More...

#include <executorInterface.h>

+ Inheritance diagram for VdfExecutorInterface:

Public Member Functions

 VdfExecutorInterface (const VdfExecutorInterface &)=delete
 
VdfExecutorInterfaceoperator= (const VdfExecutorInterface &)=delete
 
virtual VDF_API ~VdfExecutorInterface ()
 
Evaluation
VDF_API void Run (const VdfSchedule &schedule, VdfExecutorErrorLogger *errorLogger=NULL)
 
VDF_API void Run (const VdfSchedule &schedule, const VdfRequest &computeRequest, VdfExecutorErrorLogger *errorLogger=NULL)
 
Factory Construction
virtual const
VdfExecutorFactoryBase
GetFactory () const =0
 
Executor Observer Notification
VDF_API void RegisterObserver (const VdfExecutorObserver *observer) const
 
VDF_API void UnregisterObserver (const VdfExecutorObserver *observer) const
 
Cache Management
virtual void Resize (const VdfNetwork &network)
 
virtual void SetOutputValue (const VdfOutput &output, const VdfVector &value, const VdfMask &mask)=0
 
virtual bool TakeOutputValue (const VdfOutput &output, VdfVector *value, const VdfMask &mask)=0
 
const VdfVectorGetOutputValue (const VdfOutput &output, const VdfMask &mask) const
 
virtual void DuplicateOutputData (const VdfOutput &sourceOutput, const VdfOutput &destOutput)=0
 
Executor Hierarchy Management
const VdfExecutorInterfaceGetParentExecutor () const
 
VDF_API void SetParentExecutor (const VdfExecutorInterface *parentExecutor)
 
Invalidation
VDF_API void InvalidateValues (const VdfMaskedOutputVector &invalidationRequest)
 
VDF_API void InvalidateTopologicalState ()
 
VDF_API void ClearData ()
 
VDF_API void ClearDataForOutput (const VdfId outputId, const VdfId nodeId)
 
virtual bool IsEmpty () const =0
 
Mung Buffer Locking Invalidation Timestamps
void IncrementExecutorInvalidationTimestamp ()
 
void InheritExecutorInvalidationTimestamp (const VdfExecutorInterface &executor)
 
VdfInvalidationTimestamp GetExecutorInvalidationTimestamp () const
 
virtual bool HasInvalidationTimestampMismatch (const VdfOutput &source, const VdfOutput &dest) const =0
 
Executor Interruption
void SetInterruptionFlag (const std::atomic_bool *interruptionFlag)
 
const std::atomic_bool * GetInterruptionFlag () const
 
bool HasBeenInterrupted () const
 
Diagnostic Support
void SetExecutionStats (VdfExecutionStats *stats)
 
VdfExecutionStatsGetExecutionStats () const
 

Protected Member Functions

VDF_API VdfExecutorInterface ()
 
VDF_API VdfExecutorInterface (const VdfExecutorInterface *parentExecutor)
 
virtual void _Run (const VdfSchedule &schedule, const VdfRequest &computeRequest, VdfExecutorErrorLogger *errorLogger)=0
 
virtual const VdfVector_GetInputValue (const VdfConnection &connection, const VdfMask &mask) const =0
 
virtual const VdfVector_GetOutputValueForReading (const VdfOutput &output, const VdfMask &mask) const =0
 
virtual VdfVector_GetOutputValueForWriting (const VdfOutput &output) const =0
 
virtual bool _IsOutputInvalid (const VdfId outputId, const VdfMask &invalidationMask) const =0
 
virtual bool _InvalidateOutput (const VdfOutput &output, const VdfMask &invalidationMask)=0
 
virtual bool _PreProcessInvalidation (const VdfMaskedOutputVector &invalidationRequest, VdfMaskedOutputVector *processedRequest)
 
virtual void _UpdateInvalidationTimestamp ()=0
 
virtual VDF_API void _ClearData ()
 
virtual VDF_API void _ClearDataForOutput (const VdfId outputId, const VdfId nodeId)
 
virtual void _SetReferenceOutputValue (const VdfOutput &destOutput, const VdfOutput &sourceOutput, const VdfMask &sourceMask) const =0
 
virtual void _TouchOutput (const VdfOutput &output) const =0
 

Friends

class VdfContext
 
class VdfIterator
 
class VdfSpeculationNode
 
template<template< typename > class E, class D >
class VdfSpeculationExecutor
 
template<class T >
class VdfSpeculationExecutorEngine
 
template<class T >
class VdfPullBasedExecutorEngine
 
template<class T >
class VdfParallelSpeculationExecutorEngine
 
class VdfExecutorInvalidator
 

Detailed Description

Abstract base class for classes that execute a VdfNetwork to compute a requested set of values.

Definition at line 44 of file executorInterface.h.

Constructor & Destructor Documentation

VdfExecutorInterface::VdfExecutorInterface ( const VdfExecutorInterface )
delete

Noncopyable.

virtual VDF_API VdfExecutorInterface::~VdfExecutorInterface ( )
virtual

Destructor.

VDF_API VdfExecutorInterface::VdfExecutorInterface ( )
protected

Protected default constructor.

VDF_API VdfExecutorInterface::VdfExecutorInterface ( const VdfExecutorInterface parentExecutor)
explicitprotected

Construct with a parent executor.

Member Function Documentation

virtual VDF_API void VdfExecutorInterface::_ClearData ( )
protectedvirtual

Virtual implementation of the ClearData call. This may be overridden by classes, which derive from VdfExecutorInterface.

Reimplemented in EfMaskedSubExecutor, VdfDatalessExecutor, and EfPageCacheBasedExecutor< EngineType, DataManagerType >.

virtual VDF_API void VdfExecutorInterface::_ClearDataForOutput ( const VdfId  outputId,
const VdfId  nodeId 
)
protectedvirtual
virtual bool VdfExecutorInterface::_InvalidateOutput ( const VdfOutput output,
const VdfMask invalidationMask 
)
protectedpure virtual

Called during invalidation to mark outputs as invalid and determine when the traversal can terminate early.

Returns true if there was anything to invalidate and false if output was already invalid.

Implemented in VdfDataManagerBasedExecutor< DataManagerType, VdfExecutorInterface >, VdfDataManagerBasedExecutor< DataManagerType, VdfSpeculationExecutorBase >, VdfDataManagerBasedExecutor< VdfParallelDataManagerVector, VdfExecutorInterface >, and EfMaskedSubExecutor.

virtual bool VdfExecutorInterface::_IsOutputInvalid ( const VdfId  outputId,
const VdfMask invalidationMask 
) const
protectedpure virtual
virtual bool VdfExecutorInterface::_PreProcessInvalidation ( const VdfMaskedOutputVector invalidationRequest,
VdfMaskedOutputVector processedRequest 
)
inlineprotectedvirtual

This method is called as a pre-processing step before an InvalidateValues() call. The method will return true if processedRequest is to override the originally supplied invalidationRequest for executor invalidation.

Definition at line 361 of file executorInterface.h.

virtual void VdfExecutorInterface::_Run ( const VdfSchedule schedule,
const VdfRequest computeRequest,
VdfExecutorErrorLogger errorLogger 
)
protectedpure virtual

Run this executor with the given schedule and request.

Implemented in VdfSubExecutor< EngineType, DataManagerType >, and VdfSimpleExecutor.

virtual void VdfExecutorInterface::_SetReferenceOutputValue ( const VdfOutput destOutput,
const VdfOutput sourceOutput,
const VdfMask sourceMask 
) const
protectedpure virtual
virtual void VdfExecutorInterface::_TouchOutput ( const VdfOutput output) const
protectedpure virtual

Mark the output as having been visited. This is only to be used by the speculation engine to tell its parent executor that an output has been visited and should be marked for invalidation.

Implemented in VdfDataManagerBasedExecutor< DataManagerType, VdfExecutorInterface >, VdfDataManagerBasedExecutor< DataManagerType, VdfSpeculationExecutorBase >, VdfDataManagerBasedExecutor< VdfParallelDataManagerVector, VdfExecutorInterface >, and VdfDatalessExecutor.

virtual void VdfExecutorInterface::_UpdateInvalidationTimestamp ( )
protectedpure virtual

Called before invalidation begins to update the timestamp that will be written for every VdfOutput visited during invalidation. This timestamp is later used to identify outputs for mung buffer locking.

Implemented in VdfDataManagerBasedExecutor< DataManagerType, VdfExecutorInterface >, VdfDataManagerBasedExecutor< DataManagerType, VdfSpeculationExecutorBase >, VdfDataManagerBasedExecutor< VdfParallelDataManagerVector, VdfExecutorInterface >, and VdfDatalessExecutor.

VDF_API void VdfExecutorInterface::ClearData ( )

Clears the executors buffers

VDF_API void VdfExecutorInterface::ClearDataForOutput ( const VdfId  outputId,
const VdfId  nodeId 
)

Clears the executor buffers for a specific output

virtual void VdfExecutorInterface::DuplicateOutputData ( const VdfOutput sourceOutput,
const VdfOutput destOutput 
)
pure virtual
VdfExecutionStats* VdfExecutorInterface::GetExecutionStats ( ) const
inline

Returns the Execution Stats object, if any.

Definition at line 296 of file executorInterface.h.

VdfInvalidationTimestamp VdfExecutorInterface::GetExecutorInvalidationTimestamp ( ) const
inline

Returns this executor's invalidation timestamp

Definition at line 241 of file executorInterface.h.

virtual const VdfExecutorFactoryBase& VdfExecutorInterface::GetFactory ( ) const
pure virtual
const std::atomic_bool* VdfExecutorInterface::GetInterruptionFlag ( ) const
inline

Returns the interruption flag

Definition at line 267 of file executorInterface.h.

const VdfVector* VdfExecutorInterface::GetOutputValue ( const VdfOutput output,
const VdfMask mask 
) const
inline

Returns the cached value for a given output if it has a cache that contains all values specified by mask. Otherwise, returns NULL.

Definition at line 141 of file executorInterface.h.

const VdfExecutorInterface* VdfExecutorInterface::GetParentExecutor ( ) const
inline

Returns the parent executor, if any.

Definition at line 162 of file executorInterface.h.

bool VdfExecutorInterface::HasBeenInterrupted ( ) const
inline

Returns whether or not the executor has been interrupted, if the executor supports interruption. If interruption is not supported, i.e. no interruption flag has been set, this will always return false.

Definition at line 275 of file executorInterface.h.

virtual bool VdfExecutorInterface::HasInvalidationTimestampMismatch ( const VdfOutput source,
const VdfOutput dest 
) const
pure virtual

Returns true, if the invalidation timestamps between the source and dest outputs do not match, i.e. the source output should be mung buffer locked.

Implemented in EfMaskedSubExecutor, VdfDataManagerBasedExecutor< DataManagerType, VdfExecutorInterface >, VdfDataManagerBasedExecutor< DataManagerType, VdfSpeculationExecutorBase >, and VdfDataManagerBasedExecutor< VdfParallelDataManagerVector, VdfExecutorInterface >.

void VdfExecutorInterface::IncrementExecutorInvalidationTimestamp ( )
inline

Increment this executor's invalidation timestamp for mung buffer locking.

Definition at line 228 of file executorInterface.h.

void VdfExecutorInterface::InheritExecutorInvalidationTimestamp ( const VdfExecutorInterface executor)
inline

Inherit the invalidation timestamp from another executor.

Definition at line 234 of file executorInterface.h.

VDF_API void VdfExecutorInterface::InvalidateTopologicalState ( )

Invalidate all state depending on network topology. This must be called after changes to the network have been made.

XXX:exec I believe that we should not have this kind of API exposed. Clients should not have to know about the internal state kept in the executors. This is very similiar to schedules and perhaps should be treated like schedules by being registered with the networks that they depend on. A generalized mechanism in VdfNetwork might be nice.

VDF_API void VdfExecutorInterface::InvalidateValues ( const VdfMaskedOutputVector invalidationRequest)

Invalidates the network, starting from the masked outputs in request.

Performs an optimized vectorized traversal.

VdfExecutorInterface& VdfExecutorInterface::operator= ( const VdfExecutorInterface )
delete
VDF_API void VdfExecutorInterface::RegisterObserver ( const VdfExecutorObserver observer) const

Can be called by clients to register a VdfExecutorObserver with this executor.

virtual void VdfExecutorInterface::Resize ( const VdfNetwork network)
inlinevirtual
VDF_API void VdfExecutorInterface::Run ( const VdfSchedule schedule,
VdfExecutorErrorLogger errorLogger = NULL 
)

Executes the schedule.

VDF_API void VdfExecutorInterface::Run ( const VdfSchedule schedule,
const VdfRequest computeRequest,
VdfExecutorErrorLogger errorLogger = NULL 
)

Executes the schedule.

computeRequest must be a subset of the scheduled request. If the full, scheduled request should be computed, then computeRequest should be set to schedule.GetRequest().

void VdfExecutorInterface::SetExecutionStats ( VdfExecutionStats stats)
inline

Sets an execution stats object.

When stats is not NULL, then execution statistics will be gathered into the object. When NULL, execution statistics will not be gathered.

Definition at line 290 of file executorInterface.h.

void VdfExecutorInterface::SetInterruptionFlag ( const std::atomic_bool *  interruptionFlag)
inline

Set the interruption flag.

Definition at line 261 of file executorInterface.h.

VDF_API void VdfExecutorInterface::SetParentExecutor ( const VdfExecutorInterface parentExecutor)

Sets the parent executor.

This method also inherits the execution stats from the parent executor, unless the executor already has its execution stats set.

XXX: We need to get rid of this public API, since most executors do not support changing out the parent executor after construction.

virtual bool VdfExecutorInterface::TakeOutputValue ( const VdfOutput output,
VdfVector value,
const VdfMask mask 
)
pure virtual

Transfers ownership of the value to the given output. Returns true if the transfer of ownership was successful. If the transfer of ownership was successful, the executor assumes responsibility for the lifetime of value. Otherwise, the call site maintains this responsibility.

Implemented in VdfSpeculationExecutor< EngineType, DataManagerType >, VdfDataManagerBasedExecutor< DataManagerType, VdfExecutorInterface >, VdfDataManagerBasedExecutor< DataManagerType, VdfSpeculationExecutorBase >, VdfDataManagerBasedExecutor< VdfParallelDataManagerVector, VdfExecutorInterface >, and VdfDatalessExecutor.

VDF_API void VdfExecutorInterface::UnregisterObserver ( const VdfExecutorObserver observer) const

Must be called by clients to unregister a VdfExecutorObserver, which has been previously registered with RegisterObserver().

Friends And Related Function Documentation

friend class VdfContext
friend

Definition at line 403 of file executorInterface.h.

Definition at line 420 of file executorInterface.h.

friend class VdfIterator
friend

Definition at line 407 of file executorInterface.h.

template<class T >
friend class VdfParallelSpeculationExecutorEngine
friend

Definition at line 417 of file executorInterface.h.

template<class T >
friend class VdfPullBasedExecutorEngine
friend

Definition at line 416 of file executorInterface.h.

template<template< typename > class E, class D >
friend class VdfSpeculationExecutor
friend

Definition at line 414 of file executorInterface.h.

template<class T >
friend class VdfSpeculationExecutorEngine
friend

Definition at line 415 of file executorInterface.h.

friend class VdfSpeculationNode
friend

Definition at line 410 of file executorInterface.h.


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