AGX Dynamics 2.42.3.0
Loading...
Searching...
No Matches
agx::GlobalResult Class Referenceabstract

GlobalResult is used by kernels to generate result data from different threads. More...

#include <GlobalResult.h>

+ Inheritance diagram for agx::GlobalResult:

Classes

struct  OverflowBuffer
 
class  Transaction
 Transactions are used to reserve exclusive memory areas in which the threads can write their data. More...
 

Public Types

typedef agx::observer_ptr< const BufferSet > BufferSetConstObserver
 
typedef agx::ref_ptr< const BufferSet > BufferSetConstRef
 
typedef agx::observer_ptr< BufferSet > BufferSetObserver
 
typedef agx::ref_ptr< BufferSet > BufferSetRef
 
enum  Settings { TRUNCATE = 0x1 , APPEND = 0x2 , ORDER = 0x4 , SORT = 0x8 }
 
- Public Types inherited from agx::Object
typedef agx::observer_ptr< const Event > EventConstObserver
 
typedef agx::ref_ptr< const Event > EventConstRef
 
typedef agx::observer_ptr< Event > EventObserver
 
typedef agx::Vector< EventObserver > EventObserverVector
 
typedef agx::VectorPOD< Event * > EventPtrVector
 
typedef agx::ref_ptr< Event > EventRef
 
typedef agx::Vector< EventRef > EventRefVector
 

Public Member Functions

 GlobalResult (UInt settings, const Path &bindPath)
 
void addFailedTransaction (const IndexRange &transactionRange)
 Report a failed transaction.
 
void addOverflow (const OverflowBuffer &buffer)
 Report an overflown buffer.
 
Transaction allocateResult (size_t numElements)
 Allocate a transaction.
 
 BufferSet (size_t index, size_t capacity)
 
template<typename T >
size_t commit (const agxData::AbstractArray &target, const T &vector)
 
template<typename T >
size_t commit (const agxData::AbstractArray &target, const T &vector, Index sortIndex)
 
size_t commit (const agxData::AbstractArray &target, size_t numElements, const void *localResult)
 
size_t commit (const agxData::AbstractArray &target, size_t numElements, const void *localResult, Index sortIndex)
 Convenience wrapper to perform a complete transaction, this consists of:
 
void commitRanges (const IndexRangeVector &ranges)
 Commit partial result to final buffers.
 
bool didOverflow () const
 
BufferSet * getActiveSet ()
 
size_t getCapacity () const
 
IndexRangeVector & getFailedTransactions ()
 
size_t getIndex () const
 
agx::Mutex & getMutex ()
 
agx::UInt getNumOverflows () const
 
VectorPOD< OverflowBuffer > & getOverflows ()
 
void init (size_t index, size_t capacity)
 Initialize a buffer set.
 
void prepareResultSorting (size_t numJobs)
 
- Public Member Functions inherited from agx::Object
 Object (const Name &name=Name(), Model *model=Object::ClassModel())
 
void addListener (EventListener *listener)
 
virtual void buildNavigationTree (agxJson::Value &eNode) const
 
virtual void configure (TiXmlElement *)
 
agx::String fullName () const
 
agx::String fullPath () const
 
agx::String fullPath (const agx::Object *root) const
 
template<typename T >
T * getAutoScopedResource (const agx::Path &path)
 
template<typename T >
const T * getAutoScopedResource (const agx::Path &path) const
 
agx::Object * getAutoScopedResource (const agx::Path &path, agx::Model *model=nullptr)
 
const agx::Object * getAutoScopedResource (const agx::Path &path, agx::Model *model=nullptr) const
 
agx::Object * getContext ()
 
template<typename T >
T * getContext ()
 
const agx::Object * getContext () const
 
template<typename T >
const T * getContext () const
 
agx::UInt32 getId () const
 
const agx::Name & getImplementationName () const
 
agx::Model * getModel ()
 
const agx::Model * getModel () const
 
const agx::Name & getName () const
 
agx::Object * getNextSibling ()
 
const agx::Object * getNextSibling () const
 
agx::Path getPath () const
 
agx::Path getPath (const agx::Object *root) const
 
template<typename T >
T * getResource (const agx::Path &path)
 
template<typename T >
const T * getResource (const agx::Path &path) const
 
agx::Object * getResource (const agx::Path &path, agx::Model *model=nullptr)
 
const agx::Object * getResource (const agx::Path &path, agx::Model *model=nullptr) const
 
virtual agx::Object * getResourceImpl (const agx::Path &path, agx::Model *model)
 
agx::Object * getRootContext ()
 
const agx::Object * getRootContext () const
 
bool hasListener (EventListener *listener)
 
bool hasParent (const agx::Object *node) const
 
bool isUnique () const
 
virtual void printSubtree () const
 
virtual void rebind ()
 
void removeListener (EventListener *listener)
 
virtual void save (TiXmlElement *) const
 
virtual void setContext (agx::Object *context)
 
void setId (UInt32 id)
 
void setModel (agx::Model *model)
 Set the object model (handled automatically).
 
void setName (const agx::Name &name)
 Set the name of the object.
 
virtual void snapshot (TiXmlNode *, const String &) const
 
- Public Member Functions inherited from agx::Referenced
 Referenced ()
 Default constructor.
 
 Referenced (const Referenced &)
 
template<typename T >
T * as ()
 Subclass casting.
 
template<typename T >
const T * as () const
 
template<typename T >
T * asSafe ()
 Safe subclass casting, return nullptr if template type does not match.
 
template<typename T >
const T * asSafe () const
 
int getReferenceCount () const
 
template<typename T >
bool is () const
 Subclass test.
 
Referenced & operator= (const Referenced &)
 Assignment operator. Will increment the number of references to the referenced object.
 
void reference (void *ptr=nullptr) const
 Explicitly increment the reference count by one, indicating that this object has another pointer which is referencing it.
 
void unreference (void *ptr=nullptr) const
 Decrement the reference count by one, indicating that a pointer to this object is referencing it.
 
void unreference_nodelete () const
 Decrement the reference count by one, indicating that a pointer to this object is referencing it.
 

Protected Member Functions

virtual ~BufferSet ()
 
virtual ~GlobalResult ()
 
size_t calculateIncreasedCapacity (size_t currentCapacity, size_t overflowSize)
 
template<typename T >
size_t calculateInitialCapacity (const T *target)
 
BufferSet * createNewSet (size_t capacity)
 
void finalizeResultSorting (IndexRange range)
 
void finalizeTransactions ()
 
virtual void handleOverflow (size_t overflowSize)=0
 
void init (const IndexRange &range)
 
void reportCompletedTransaction (Transaction *transaction)
 
void reportFailedTransaction (const IndexRange &transactionRange, BufferSet *startSet)
 
BufferSet * reportFailedTransaction (Transaction *transaction)
 
virtual void sortResult (const agxData::IndexArray &permutation)=0
 
- Protected Member Functions inherited from agx::Object
virtual ~Object ()
 
- Protected Member Functions inherited from agx::Referenced
virtual ~Referenced ()
 Destructor.
 
void allocateObserverVector () const
 
void deleteUsingDeleteHandler () const
 

Protected Attributes

BufferSetRef m_activeSet
 
Vector< BufferSetRef > m_bufferSets
 
std::atomic< size_t > m_capacity
 
std::atomic< agx::Int32 > m_head
 
size_t m_initialSize
 
agx::Mutex m_mutex
 
std::atomic< agx::Int32 > m_numCompletedTransactions
 
UInt m_numOverflows
 
std::atomic< agx::Int32 > m_numTransactions
 
agxData::Buffer * m_resultOrderBuffer
 
UInt m_settings
 
Real m_smoothed
 
VectorPOD< IndexRange > m_sortedRanges
 
VectorPOD< Transaction > m_transactions
 
- Protected Attributes inherited from agx::Referenced
Mutex m_mutex
 
ObserverContainer m_observers
 
AtomicValue m_refCount
 

Additional Inherited Members

- Static Public Member Functions inherited from agx::Object
static agx::Model * ClassModel ()
 
static agx::String generateName (const agx::String &bindPath)
 
static const HashSet< Object * > & getActiveObjects ()
 
static bool getEnableRebind ()
 Should rebinding be allowed? Right now a global setting.
 
static Object * load (const String &path, Device *device, const String &type, const String &attribute, const String &value)
 
template<typename T >
static T * load (const String &path, Device *device, const String &type, const String &attribute, const String &value)
 
static Object * load (const String &path, Device *device, const String &type="", size_t instance=0)
 
template<typename T >
static T * load (const String &path, Device *device, const String &type="", size_t instance=0)
 
static void load (const String &path, Device *device, ObjectPtrVector &loadedObjects)
 
static Object * load (TiXmlElement *eObject, Device *device)
 
template<typename T >
static T * load (TiXmlElement *eObject, Device *device)
 
static TiXmlDocument openDocument (const String &path)
 
static void setEnableRebind (bool flag)
 Sets if rebinding of objects should be allowed (Right now a global setting).
 
- Static Public Member Functions inherited from agx::Referenced
template<typename T >
static bool ValidateCast (const Referenced *object)
 
- Static Protected Member Functions inherited from agx::Referenced
static DeleteHandler * getDeleteHandler ()
 
static void setDeleteHandler (DeleteHandler *handler)
 Internal: Set a DeleteHandler to which deletion of all referenced counted objects will be delegated to.
 

Detailed Description

GlobalResult is used by kernels to generate result data from different threads.

The set of active buffers in a GlobalResult.

The initial result size estimation may be insufficient in which case the GlobalResult must be reallocated. Transactions are used to handle overflows in a thread safe manner.

Definition at line 51 of file GlobalResult.h.

Member Typedef Documentation

◆ BufferSetConstObserver

◆ BufferSetConstRef

Definition at line 54 of file GlobalResult.h.

◆ BufferSetObserver

◆ BufferSetRef

Member Enumeration Documentation

◆ Settings

Enumerator
TRUNCATE 
APPEND 

Clear the target data set before the kernel executes.

ORDER 

Append to the existing data.

SORT 

Build a permutation table for deterministic ordering of result data.

Definition at line 56 of file GlobalResult.h.

Constructor & Destructor Documentation

◆ GlobalResult()

agx::GlobalResult::GlobalResult ( UInt  settings,
const Path &  bindPath 
)

◆ ~GlobalResult()

virtual agx::GlobalResult::~GlobalResult ( )
protectedvirtual

◆ ~BufferSet()

virtual agx::GlobalResult::~BufferSet ( )
inlineprotectedvirtual

Definition at line 251 of file GlobalResult.h.

Member Function Documentation

◆ addFailedTransaction()

void agx::GlobalResult::addFailedTransaction ( const IndexRange &  transactionRange)

Report a failed transaction.

◆ addOverflow()

void agx::GlobalResult::addOverflow ( const OverflowBuffer &  buffer)

Report an overflown buffer.

◆ allocateResult()

Transaction agx::GlobalResult::allocateResult ( size_t  numElements)

Allocate a transaction.

Parameters
numElementsThe number of elements to be written
Returns
A transaction handle that must be committed after writing the result data

◆ BufferSet()

agx::GlobalResult::BufferSet ( size_t  index,
size_t  capacity 
)

◆ calculateIncreasedCapacity()

size_t agx::GlobalResult::calculateIncreasedCapacity ( size_t  currentCapacity,
size_t  overflowSize 
)
protected

◆ calculateInitialCapacity()

template<typename T >
size_t agx::GlobalResult::calculateInitialCapacity ( const T *  target)
protected

◆ commit() [1/4]

template<typename T >
size_t agx::GlobalResult::commit ( const agxData::AbstractArray &  target,
const T &  vector 
)

Definition at line 403 of file GlobalResult.h.

References commit(), and agxData::AbstractArray::size().

◆ commit() [2/4]

template<typename T >
size_t agx::GlobalResult::commit ( const agxData::AbstractArray &  target,
const T &  vector,
Index  sortIndex 
)

Definition at line 397 of file GlobalResult.h.

References commit(), and agxData::AbstractArray::size().

◆ commit() [3/4]

size_t agx::GlobalResult::commit ( const agxData::AbstractArray &  target,
size_t  numElements,
const void *  localResult 
)

◆ commit() [4/4]

size_t agx::GlobalResult::commit ( const agxData::AbstractArray &  target,
size_t  numElements,
const void *  localResult,
Index  sortIndex 
)

Convenience wrapper to perform a complete transaction, this consists of:

  1. Init the transaction
  2. Copy the data to global result
  3. Commit transaction, go back to step 2 if commit fails
Parameters
numElementsThe number of elements to be written
targetThe target buffer
localResultThe local result buffer to copy data from
sortIndexA sort index used to build a deterministic ordering of the result data
Returns
The offset where the data was committed

Referenced by commit().

◆ commitRanges()

void agx::GlobalResult::commitRanges ( const IndexRangeVector &  ranges)

Commit partial result to final buffers.

◆ createNewSet()

BufferSet * agx::GlobalResult::createNewSet ( size_t  capacity)
protected

◆ didOverflow()

bool agx::GlobalResult::didOverflow ( ) const
Returns
True if the GlobalResult did overflow during the last result session.

Definition at line 386 of file GlobalResult.h.

References m_numOverflows.

◆ finalizeResultSorting()

void agx::GlobalResult::finalizeResultSorting ( IndexRange  range)
protected

◆ finalizeTransactions()

void agx::GlobalResult::finalizeTransactions ( )
protected

◆ getActiveSet()

GlobalResult::BufferSet * agx::GlobalResult::getActiveSet ( )

Definition at line 385 of file GlobalResult.h.

References m_activeSet.

◆ getCapacity()

size_t agx::GlobalResult::getCapacity ( ) const
Returns
The capacity of the set

◆ getFailedTransactions()

IndexRangeVector & agx::GlobalResult::getFailedTransactions ( )
Returns
The list of failed transaction

◆ getIndex()

size_t agx::GlobalResult::getIndex ( ) const
Returns
The index of the set

◆ getMutex()

agx::Mutex & agx::GlobalResult::getMutex ( )

Definition at line 391 of file GlobalResult.h.

References m_mutex.

◆ getNumOverflows()

agx::UInt agx::GlobalResult::getNumOverflows ( ) const
Returns
The number of overflows during the last result session.

Definition at line 387 of file GlobalResult.h.

References m_numOverflows.

◆ getOverflows()

VectorPOD< OverflowBuffer > & agx::GlobalResult::getOverflows ( )
Returns
The list of overflows

◆ handleOverflow()

virtual void agx::GlobalResult::handleOverflow ( size_t  overflowSize)
protectedpure virtual

◆ init() [1/2]

void agx::GlobalResult::init ( const IndexRange &  range)
protected

◆ init() [2/2]

void agx::GlobalResult::init ( size_t  index,
size_t  capacity 
)

Initialize a buffer set.

◆ prepareResultSorting()

void agx::GlobalResult::prepareResultSorting ( size_t  numJobs)

◆ reportCompletedTransaction()

void agx::GlobalResult::reportCompletedTransaction ( Transaction *  transaction)
protected

◆ reportFailedTransaction() [1/2]

void agx::GlobalResult::reportFailedTransaction ( const IndexRange &  transactionRange,
BufferSet *  startSet 
)
protected

◆ reportFailedTransaction() [2/2]

BufferSet * agx::GlobalResult::reportFailedTransaction ( Transaction *  transaction)
protected

◆ sortResult()

virtual void agx::GlobalResult::sortResult ( const agxData::IndexArray &  permutation)
protectedpure virtual

Member Data Documentation

◆ m_activeSet

BufferSetRef agx::GlobalResult::m_activeSet
protected

Definition at line 198 of file GlobalResult.h.

Referenced by getActiveSet().

◆ m_bufferSets

Vector<BufferSetRef> agx::GlobalResult::m_bufferSets
protected

Definition at line 199 of file GlobalResult.h.

◆ m_capacity

std::atomic<size_t> agx::GlobalResult::m_capacity
protected

Definition at line 201 of file GlobalResult.h.

◆ m_head

std::atomic<agx::Int32> agx::GlobalResult::m_head
protected

Definition at line 205 of file GlobalResult.h.

◆ m_initialSize

size_t agx::GlobalResult::m_initialSize
protected

Definition at line 202 of file GlobalResult.h.

◆ m_mutex

agx::Mutex agx::GlobalResult::m_mutex
protected

Definition at line 206 of file GlobalResult.h.

Referenced by getMutex().

◆ m_numCompletedTransactions

std::atomic<agx::Int32> agx::GlobalResult::m_numCompletedTransactions
protected

Definition at line 209 of file GlobalResult.h.

◆ m_numOverflows

UInt agx::GlobalResult::m_numOverflows
protected

Definition at line 210 of file GlobalResult.h.

Referenced by didOverflow(), and getNumOverflows().

◆ m_numTransactions

std::atomic<agx::Int32> agx::GlobalResult::m_numTransactions
protected

Definition at line 208 of file GlobalResult.h.

◆ m_resultOrderBuffer

agxData::Buffer* agx::GlobalResult::m_resultOrderBuffer
protected

Definition at line 213 of file GlobalResult.h.

◆ m_settings

UInt agx::GlobalResult::m_settings
protected

Definition at line 197 of file GlobalResult.h.

◆ m_smoothed

Real agx::GlobalResult::m_smoothed
protected

Definition at line 203 of file GlobalResult.h.

◆ m_sortedRanges

VectorPOD<IndexRange> agx::GlobalResult::m_sortedRanges
protected

Definition at line 212 of file GlobalResult.h.

Referenced by agx::GlobalResult::Transaction::commit().

◆ m_transactions

VectorPOD<Transaction> agx::GlobalResult::m_transactions
protected

Definition at line 207 of file GlobalResult.h.


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