Reuse index manager with a many-to-one relation between tapes and index manager. More...
#include <reuseIndexManager.hpp>
Public Types | |
using | Base = ReuseIndexManagerBase<Index, ReuseIndexManager> |
Base class abbreviation. | |
using | Index = T_Index |
See ReuseIndexManager. | |
Public Types inherited from codi::ReuseIndexManagerBase< T_Index, ReuseIndexManager< T_Index > > | |
using | Base |
Base class abbreviation. | |
using | Impl |
See ReuseIndexManagerBase. | |
using | Index |
See ReuseIndexManagerBase. | |
using | Position |
See EmptyData. | |
Public Types inherited from codi::IndexManagerInterface< T_Index > | |
using | Index = T_Index |
See IndexManagerInterface. | |
Public Types inherited from codi::EmptyData | |
using | InternalPosHandle = size_t |
Will always be zero. | |
using | NestedData = void |
No nested data. | |
using | Position = EmptyPosition |
No positional data. | |
Public Types inherited from codi::DataInterface< T_NestedData, T_InternalPosHandle > | |
using | InternalPosHandle = T_InternalPosHandle |
See DataInterface. | |
using | NestedData = T_NestedData |
See DataInterface. | |
using | Position = EmptyPosition |
Contains position data for this DataInterface and all nested interfaces. | |
Public Member Functions | |
ReuseIndexManager (Index const &reservedIndices) | |
Constructor. | |
~ReuseIndexManager () | |
Destructor. | |
IndexManagerInterface: Methods | |
void | addToTapeValues (TapeValues &values) const |
Add storage and other information to the tape values. | |
Index | getLargestCreatedIndex () const |
Returns the largest created index. | |
Public Member Functions inherited from codi::ReuseIndexManagerBase< T_Index, ReuseIndexManager< T_Index > > | |
ReuseIndexManagerBase () | |
~ReuseIndexManagerBase () | |
Destructor. | |
bool | assignIndex (Index &index) |
Call on assignment of a primal value, e.g. on w for w = a + b . | |
bool | assignUnusedIndex (Index &index) |
Call on registering input values. | |
void | copyIndex (Index &lhs, Index const &rhs) |
Call on copy of a primal value, e.g. w = a . | |
void | freeIndex (Index &index) |
Call on destruction of a primal value. Usually called from the destructor. | |
void | reset () |
Reset for a new recording. | |
void | addToTapeValues (TapeValues &values) const |
Add storage and other information to the tape values. | |
Public Member Functions inherited from codi::IndexManagerInterface< T_Index > | |
void | addToTapeValues (TapeValues &values) const |
Add storage and other information to the tape values. | |
Index | getLargestCreatedIndex () const |
Returns the largest created index. | |
template<typename Tape > | |
bool | assignIndex (Index &index) |
Call on assignment of a primal value, e.g. on w for w = a + b . | |
template<typename Tape > | |
bool | assignUnusedIndex (Index &index) |
Call on registering input values. | |
template<typename Tape > | |
void | copyIndex (Index &lhs, Index const &rhs) |
Call on copy of a primal value, e.g. w = a . | |
template<typename Tape > | |
void | freeIndex (Index &index) |
Call on destruction of a primal value. Usually called from the destructor. | |
void | reset () |
Reset for a new recording. | |
Public Member Functions inherited from codi::EmptyData | |
void | pushData () |
Add data to the storage allocated by the implementation. The method can only be called after a call to reserveItems and only as often as the number of reserved items. | |
void | getDataPointers () |
Get pointers to the data from the storage implementation. The method can only be called after a call to reserveItems() and data can only be accessed from 0 to the number given by reserveItems (excluding). Afterwards, addDataSize() needs to be called with the actual number of elements that have been written. | |
void | addDataSize (size_t size) |
Add this many items to the data stream, after the data has been manipulated via pointers obtained from getDataPointers(). | |
InternalPosHandle | reserveItems (size_t const &items) |
Reserve this many items on the data stream. See pushData for details. | |
void | resize (size_t const &totalSize) |
void | reset () |
void | resetHard () |
void | resetTo (Position const &pos) |
void | erase (Position const &start, Position const &end, bool recursive=true) |
size_t | getDataSize () const |
Position | getPosition () const |
size_t | getPushedDataCount (InternalPosHandle const &startPos) |
Position | getZeroPosition () const |
void | addToTapeValues (TapeValues &values) const |
Add amount of stored data to the TapeValues object. Not called on the nested vector. | |
template<typename = void> | |
Position | extractPosition (Position const &pos) const |
Extract the position of a nested DataInterface from the global position object provide by this interface. | |
void | setNested (NestedData *v) |
void | swap (DataInterface &other) |
template<int selectedDepth = -1, typename FunctionObject , typename... Args> | |
void | evaluateForward (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
Evaluates the function object with segments of continuous and valid data for all nested DataInterfaces. | |
template<int selectedDepth = -1, typename FunctionObject , typename... Args> | |
void | evaluateReverse (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
Evaluates the function object with segments of continuous and valid data for all nested DataInterfaces. | |
template<typename FunctionObject , typename... Args> | |
void | forEachChunk (FunctionObject &function, bool recursive, Args &&... args) |
Calls the function object for each continuous segment of data. | |
template<typename FunctionObject , typename... Args> | |
void | forEachForward (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
Calls the function object for each item in the data stream. This call is not recursive. | |
template<typename FunctionObject , typename... Args> | |
void | forEachReverse (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
Calls the function object for each item in the data stream. This call is not recursive. | |
Public Member Functions inherited from codi::DataInterface< T_NestedData, T_InternalPosHandle > | |
void | addDataSize (size_t const &size) |
Add this many items to the data stream, after the data has been manipulated via pointers obtained from getDataPointers(). | |
template<typename... Data> | |
void | getDataPointers (Data *&... pointers) |
Get pointers to the data from the storage implementation. The method can only be called after a call to reserveItems() and data can only be accessed from 0 to the number given by reserveItems (excluding). Afterwards, addDataSize() needs to be called with the actual number of elements that have been written. | |
template<typename... Data> | |
void | pushData (Data const &... data) |
Add data to the storage allocated by the implementation. The method can only be called after a call to reserveItems and only as often as the number of reserved items. | |
InternalPosHandle | reserveItems (size_t const &items) |
Reserve this many items on the data stream. See pushData for details. | |
void | resize (size_t const &totalSize) |
void | reset () |
void | resetHard () |
void | resetTo (Position const &pos) |
void | erase (Position const &start, Position const &end, bool recursive=true) |
size_t | getDataSize () const |
Position | getPosition () const |
size_t | getPushedDataCount (InternalPosHandle const &startPos) |
Position | getZeroPosition () const |
void | addToTapeValues (TapeValues &values) const |
Add amount of stored data to the TapeValues object. Not called on the nested vector. | |
template<typename TargetPosition > | |
TargetPosition | extractPosition (Position const &pos) const |
Extract the position of a nested DataInterface from the global position object provide by this interface. | |
void | setNested (NestedData *v) |
void | swap (DataInterface &other) |
template<int selectedDepth = -1, typename FunctionObject , typename... Args> | |
void | evaluateForward (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
Evaluates the function object with segments of continuous and valid data for all nested DataInterfaces. | |
template<int selectedDepth = -1, typename FunctionObject , typename... Args> | |
void | evaluateReverse (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
Evaluates the function object with segments of continuous and valid data for all nested DataInterfaces. | |
template<typename FunctionObject , typename... Args> | |
void | forEachChunk (FunctionObject &function, bool recursive, Args &&... args) |
Calls the function object for each continuous segment of data. | |
template<typename FunctionObject , typename... Args> | |
void | forEachForward (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
Calls the function object for each item in the data stream. This call is not recursive. | |
template<typename FunctionObject , typename... Args> | |
void | forEachReverse (Position const &start, Position const &end, FunctionObject function, Args &&... args) |
Calls the function object for each item in the data stream. This call is not recursive. | |
Public Attributes | |
friend | Base |
Allow the base class to call protected and private methods. | |
Static Public Attributes | |
IndexManagerInterface: Constants | |
static bool constexpr | CopyNeedsStatement |
No copy optimization is implemented. | |
static bool constexpr | IsLinear |
< See ReuseIndexManagerBase. | |
static bool constexpr | NeedsStaticStorage |
< See ReuseIndexManagerBase. | |
Static Public Attributes inherited from codi::ReuseIndexManagerBase< T_Index, ReuseIndexManager< T_Index > > | |
static bool constexpr | CopyNeedsStatement |
No copy optimization is implemented. | |
static bool constexpr | IsLinear |
Identifiers are not coupled to statements. | |
static bool constexpr | NeedsStaticStorage |
Identifiers are managed globally. | |
Static Public Attributes inherited from codi::IndexManagerInterface< T_Index > | |
static Index constexpr | InactiveIndex = Index(0) |
Default inactive index for all index managers. | |
static Index constexpr | InvalidIndex |
Default invalid index for all index mangers (max value for unsigned types). | |
static bool constexpr | CopyNeedsStatement |
True if no copy optimization is implemented. See IndexManagerInterface. | |
static bool constexpr | IsLinear |
True if identifiers are coupled to the statements. See IndexManagerInterface. | |
static bool constexpr | NeedsStaticStorage = false |
True if the index manager is specific to a tape type (and not a tape instance). See IndexManagerInterface. | |
Additional Inherited Members | |
Protected Attributes inherited from codi::ReuseIndexManagerBase< T_Index, ReuseIndexManager< T_Index > > | |
size_t | indexSizeIncrement |
Block size for index pool enlargement. | |
std::vector< Index > | unusedIndices |
Pool of indices that have not been used in this recording yet. | |
size_t | unusedIndicesPos |
Number of remaining unused indices. | |
std::vector< Index > | usedIndices |
Pool of indices that have already been used in this recording. | |
size_t | usedIndicesPos |
Number of remaining used indices. | |
bool | valid |
Prevent index free after destruction. | |
Reuse index manager with a many-to-one relation between tapes and index manager.
This is the classical implementation of the reuse index management strategy. For the details of reuse index management, see ReuseIndexManagerBase.
This index manager is not thread-safe.
T_Index | Type for the identifier, usually an integer type. |
|
inline |
Add storage and other information to the tape values.
[in,out] | values | Will only create new data entries and no new section. Implementation: Adds max live indices, cur live indices. |
|
inline |
Returns the largest created index.
This is the largest entry in the adjoint vectors created by the tapes. The following properties are specific to the ReuseIndexManager and inherited by the MultiUseIndexManager: