2#ifndef ADOLC_VALUETAPE_H
3#define ADOLC_VALUETAPE_H
28#include <shared_mutex>
37#pragma warning(disable : 4251)
84 size_t ext_diff_fct_index_{0};
85 std::shared_mutex mutex_;
86 std::atomic<bool> statsNeedReload_{
false};
87 std::mutex statsLoadMutex_;
88 std::optional<std::unique_lock<std::shared_mutex>> writeLock_;
89 enum class DataAccess { Exclusive, Shared };
97 struct DataAccessModeGuard {
98 std::shared_mutex mutex_;
99 DataAccess mode_{DataAccess::Exclusive};
101 explicit DataAccessModeGuard(DataAccess mode) : mode_(mode) {}
104 DataAccessModeGuard accessMode_{DataAccess::Exclusive};
105 bool containsExtDiff_{
false};
107#define EDFCTS_BLOCK_SIZE 10
130 explicit ValueTape(
short tapeId) : tapeInfos_(tapeId, readConfigFile()) {}
137 : recordCtx_(std::move(other.recordCtx_)),
138 globalTapeVars_(std::move(other.globalTapeVars_)),
139 tapeInfos_(std::move(other.tapeInfos_)),
140 perTapeInfos_(std::move(other.perTapeInfos_)),
141 ext_diff_fct_index_(other.ext_diff_fct_index_),
143 other.statsNeedReload_.exchange(
false, std::memory_order_relaxed)),
144 accessMode_(other.accessMode_.mode_),
145 containsExtDiff_(other.containsExtDiff_),
146 ext_buffer_(std::move(other.ext_buffer_)),
147 ext2_buffer_(std::move(other.ext2_buffer_)),
148 cp_buffer_(std::move(other.cp_buffer_))
151 sJInfos_(std::move(other.sJInfos_)), sHInfos_(std::move(other.sHInfos_))
157 if (
this != &other) {
158 recordCtx_ = std::move(other.recordCtx_);
159 tapeInfos_ = std::move(other.tapeInfos_);
160 globalTapeVars_ = std::move(other.globalTapeVars_);
161 perTapeInfos_ = std::move(other.perTapeInfos_);
162 ext_diff_fct_index_ = other.ext_diff_fct_index_;
163 statsNeedReload_.store(
164 other.statsNeedReload_.exchange(
false, std::memory_order_relaxed),
165 std::memory_order_release);
166 accessMode_.mode_ = other.accessMode_.mode_;
167 containsExtDiff_ = other.containsExtDiff_;
168 ext_buffer_ = std::move(other.ext_buffer_);
169 ext2_buffer_ = std::move(other.ext2_buffer_);
170 cp_buffer_ = std::move(other.cp_buffer_);
172 sJInfos_ = std::move(other.sJInfos_);
173 sHInfos_ = std::move(other.sHInfos_);
180 return accessMode_.mode_ == DataAccess::Exclusive;
183 std::shared_lock<std::shared_mutex> lock(accessMode_.mutex_);
184 return accessMode_.mode_ == DataAccess::Exclusive;
190 void setMode_(DataAccess mode) {
194 std::unique_lock<std::shared_mutex> dataAccessLock(accessMode_.mutex_);
195 if (accessMode_.mode_ == mode) {
200 FailInfo{.info1 = tapeId()});
202 accessMode_.mode_ = mode;
218 statsNeedReload_.store(
true, std::memory_order_release);
232 sJInfos_ = std::move(sJInfos);
235 sHInfos_ = std::move(sHInfos);
325 void tapestats(std::array<size_t, TapeInfos::STAT_SIZE> stats) {
326 std::copy(tapeInfos_.
stats.cbegin(), tapeInfos_.
stats.cend(),
330 std::copy(tapeInfos_.
stats.cbegin(), tapeInfos_.
stats.cend(), stats);
334 std::array<size_t, TapeInfos::STAT_SIZE>
tapestats()
const {
335 return tapeInfos_.
stats;
338 void deg_save(
int val) { recordCtx_.deg_save = val; }
339 int deg_save()
const {
return recordCtx_.deg_save; }
347 recordCtx_.tayBuffer_.numOnTape(recordCtx_.tayBuffer_.numOnTape() + 1);
350 recordCtx_.tayBuffer_.numOnTape(recordCtx_.tayBuffer_.numOnTape() + val);
357 recordCtx_.tayBuffer_.numOnTape(recordCtx_.tayBuffer_.numOnTape() - 1);
366 size_t numInds()
const {
return recordCtx_.numInds; }
369 size_t numDeps()
const {
return recordCtx_.numDeps; }
393 return recordCtx_.put_op(op, loc_fileName(), op_fileName(), val_fileName(),
394 reserveExtraLocations);
397 void put_loc(
size_t loc) {
return recordCtx_.put_loc(loc); };
399 void put_val(
const double val) { recordCtx_.valBuffer_.writeAndAdvance(val); }
402 return recordCtx_.put_vals_writeBlock(reals, numReals, op_fileName(),
407 return recordCtx_.put_vals_notWriteBlock(reals, numReals);
412 return recordCtx_.get_val_space(op_fileName(), val_fileName());
416 return recordCtx_.upd_resloc(temp, lhs);
419 return recordCtx_.upd_resloc_check(temp);
422 return recordCtx_.upd_resloc_inc_prod(temp, newlhs, newop);
430 double *
signature()
const {
return recordCtx_.signature; }
431 void signature(
double *buffer) { recordCtx_.signature = buffer; }
435 template <ADOLC::detail::EvalOrRecordContextType Context>
483 std::unique_lock lock(mutex_);
491 std::unique_lock lock(mutex_);
504 globalTapeVars_.
storeManagerPtr->setStoreManagerControl(gcTriggerRatio,
536 if (globalTapeVars_.
store)
537 globalTapeVars_.
store[loc] = coval;
541 globalTapeVars_.
pStore[loc] = coval;
544#if defined(ADOLC_TRACK_ACTIVITY)
545 char get_active_value(
size_t loc)
const {
546 return globalTapeVars_.actStore[loc];
548 void set_active_value(
size_t loc,
char coval) {
549 globalTapeVars_.actStore[loc] = coval;
555 void store(
double *buffer) { globalTapeVars_.
store = buffer; }
558 double store(
size_t idx) {
return globalTapeVars_.
store[idx]; }
594 recordCtx_.write_scaylor(val, tay_fileName());
599 globalTapeVars_.
store[loc] = recordCtx_.tayBuffer_.retreatAndRead();
608 template <
typename Info>
const char *
fileName()
const {
609 return tapeInfos_.
fileNames[Info::fileIndex];
638 template <InfoType<TapeEvaluationContext, ErrorType> Info>
640 size_t blockSize = 0;
641 auto &buffer = Info::getBuffer(evalCtx);
643 buffer.openFile(fileName<Info>(),
"rb");
649 blockSize =
tapestats(Info::num) - blockSize;
651 buffer.numOnTape(blockSize);
652 Info::prepareForwardPosition(evalCtx, tapeInfos_.
stats[Info::bufferSize]);
667 template <InfoType<TapeEvaluationContext, ErrorType> Info>
671 auto offset =
static_cast<long>(number *
sizeof(
typename Info::value_type));
672 auto &buffer = Info::getBuffer(evalCtx);
673 buffer.openFile(fileName<Info>(),
"rb");
674 fseek(buffer.file(), offset, SEEK_SET);
693 template <InfoType<TapeEvaluationContext, ErrorType> Info>
696 auto &buffer = Info::getBuffer(evalCtx);
698 setFilePosition<Info>(evalCtx);
704 buffer.numOnTape(
tapestats(Info::num) - blockSize);
705 buffer.position(blockSize);
713 template <InfoType<TapeEvaluationContext, ErrorType>... Infos>
716 requires(
requires { Infos::fileAccess; } && ...)
718 (prepare_for<Infos>(evalCtx), ...);
726 template <InfoType<TapeEvaluationContext, ErrorType>... Infos>
729 requires(
requires { Infos::fileAccess; } && ...)
731 (prepare_rev<Infos>(evalCtx), ...);
745 initTapeBuffers(evalCtx);
748 if constexpr (std::is_same_v<Mode, Forward>) {
750#ifdef ADOLC_AMPI_SUPPORT
751 TAPE_AMPI_resetBottom();
753 }
else if constexpr (std::is_same_v<Mode, Reverse>) {
754 prepare_rev_all(evalCtx, AllInfoTypes{});
755#ifdef ADOLC_AMPI_SUPPORT
756 TAPE_AMPI_resetTop();
759 static_assert(!std::is_same_v<Mode, Mode>,
"Mode not implemented!");
763 template <
typename Mode>
765 initSweepKeep(std::shared_lock<std::shared_mutex> &&dataAccessLock) {
766 std::unique_lock<std::shared_mutex> lock(mutex_);
769 std::move(dataAccessLock));
770 prepareSweep<Mode>(evalCtx);
774 template <
typename Mode>
776 initSweepNoKeep(std::shared_lock<std::shared_mutex> &&dataAccessLock) {
777 std::shared_lock<std::shared_mutex> lock(mutex_);
778 if (containsExtDiff_) {
784 std::move(dataAccessLock));
785 prepareSweep<Mode>(evalCtx);
808 std::shared_lock<std::shared_mutex> lock(accessMode_.mutex_);
809 if (keep || accessMode_.mode_ == DataAccess::Exclusive) {
810 return initSweepKeep<Mode>(std::move(lock));
812 return initSweepNoKeep<Mode>(std::move(lock));
880 return std::numeric_limits<double>::quiet_NaN();
884 static double make_inf() {
return std::numeric_limits<double>::infinity(); }
#define CURRENT_LOCATION
Definition adolcerror.h:26
#define ADOLC_API
Definition adolcexport.h:16
Block-based storage for registered external-function descriptors.
Definition buffer_temp.h:36
T * append()
Definition buffer_temp.h:110
T * getElement(size_t index) const
Definition buffer_temp.h:140
Owns one recorded function and the state required to evaluate it.
Definition valuetape.h:79
void ensureContiguousLocations(size_t n)
Definition valuetape.h:496
void forodec_nax(int nax)
Definition valuetape.h:297
char branchSwitchWarning() const
Definition valuetape.h:559
void forodec_z(double *z)
Definition valuetape.h:300
ADOLC::CP::detail::Infos * cp_getElement(size_t index)
Definition valuetape.h:569
void taylorBufferSize(size_t size)
Definition valuetape.h:464
void jacSolv_xold(double *xold)
Definition valuetape.h:288
void prepare_rev(TapeEvaluationContext &evalCtx)
Prepare for reverse sweep.
Definition valuetape.h:694
void add_numTays_Tape(size_t val)
Definition valuetape.h:349
void end_sweep(TapeEvaluationContext &evalCtx)
TapeEvaluationContext init_sweep(int keep=0)
Initialize a tape sweep.
Definition valuetape.h:807
void nestedReverseEval(bool flag)
Definition valuetape.h:427
size_t get_val_space()
Definition valuetape.h:411
void forodec_y(double *y)
Definition valuetape.h:299
void locationBufferSize(size_t size)
Definition valuetape.h:456
void put_vals_notWriteBlock(double *reals, size_t numReals)
Definition valuetape.h:406
void free_all_taping_params()
Definition valuetape.h:872
static constexpr size_t maxLocsPerOp()
Definition valuetape.h:390
void ext_diff_fct_index(size_t index)
Definition valuetape.h:384
void disableMinMaxUsingAbs()
Definition valuetape.h:487
static double make_nan()
Definition valuetape.h:879
void jacSolv_nax(int nax)
Definition valuetape.h:285
void checkInitialStoreSize()
Definition valuetape.h:472
char * val_fileName() const
Definition valuetape.h:261
void tapestats(std::array< size_t, TapeInfos::STAT_SIZE > stats)
Definition valuetape.h:325
void setStoreManagerControl(double gcTriggerRatio, size_t gcTriggerMaxSize)
Definition valuetape.h:503
void delete_scaylor(size_t loc)
Definition valuetape.h:598
void setFilePosition(TapeEvaluationContext &evalCtx)
Position the tape file at the beginning of the last on-disk block.
Definition valuetape.h:668
ADOLC::CP::detail::Infos * get_cp_fct(size_t index) const
Definition valuetape.h:886
ext_diff_fct * ext_diff_append()
Definition valuetape.h:573
size_t get_num_param()
Definition valuetape.h:424
void loc_fileName(char *name)
Definition valuetape.h:270
void pStore(double *buffer)
Definition valuetape.h:557
void tay_numInds(size_t val)
Definition valuetape.h:371
size_t numInds() const
Definition valuetape.h:366
size_t valueBufferSize() const
Definition valuetape.h:460
int keepTaylors() const
Definition valuetape.h:341
size_t no_min_max()
Definition valuetape.h:382
ext_diff_fct_v2 * ext_diff_v2_getElement(size_t index)
Definition valuetape.h:578
size_t tapestats(size_t stat) const
Definition valuetape.h:332
size_t numLives() const
Definition valuetape.h:543
size_t p_next_loc()
Definition valuetape.h:522
void add_num_eq_prod(size_t val)
Definition valuetape.h:363
void statsNeedReload()
Definition valuetape.h:217
size_t numparam() const
Definition valuetape.h:344
void write_scaylor(double val)
Definition valuetape.h:593
void tapestats(size_t stat, size_t val)
Definition valuetape.h:333
void p_free_loc(size_t loc) const
Definition valuetape.h:530
void deg_save(int val)
Definition valuetape.h:338
double ** jacSolv_J() const
Definition valuetape.h:283
bool isExclusiveLocking()
Definition valuetape.h:182
void keepTaylors(int val)
Definition valuetape.h:342
std::shared_ptr< ValueTape > getTapeInfos(short tapeId)
void readParams(double *&targetStore)
void close_tape(int flag)
void tapestats(size_t *stats)
Definition valuetape.h:329
void jacSolv_ci(int *ci)
Definition valuetape.h:290
int jacSolv_nax() const
Definition valuetape.h:278
void val_fileName(char *name)
Definition valuetape.h:273
void lastTayBlockInCore(char val)
Definition valuetape.h:353
void initTapeBuffers(Context &ctx)
Definition valuetape.h:436
double ** jacSolv_I() const
Definition valuetape.h:282
double get_ad_value(size_t loc) const
Definition valuetape.h:534
void put_op(OPCODES op, size_t reserveExtraLocations=0)
Definition valuetape.h:392
void prepare_rev_all(TapeEvaluationContext &evalCtx, AllTypes< Infos... >)
Run prepare_for() for all tape types listed in AllTypes.
Definition valuetape.h:727
void nextBufferNumber(size_t num)
Definition valuetape.h:386
void decrement_numTays_Tape()
Definition valuetape.h:356
int deg_save() const
Definition valuetape.h:339
void set_ad_value(size_t loc, double coval)
Definition valuetape.h:535
size_t storeSize() const
Definition valuetape.h:553
void prepare_for(TapeEvaluationContext &evalCtx)
Prepare for a forward sweep.
Definition valuetape.h:639
void set_pd_value(size_t loc, double coval)
Definition valuetape.h:540
unsigned int nominmaxFlag() const
Definition valuetape.h:474
void increment_num_eq_prod()
Definition valuetape.h:362
void increment_numSwitches()
Definition valuetape.h:379
void forodec_Z(double **Z)
Definition valuetape.h:301
ADOLC::CP::detail::Infos * cp_append()
Definition valuetape.h:568
int keepTape() const
Definition valuetape.h:276
bool containsExtDiff() const
Definition valuetape.h:187
char * tay_fileName() const
Definition valuetape.h:252
void registerExtDiff()
Definition valuetape.h:186
void jacSolv_ri(int *ri)
Definition valuetape.h:291
double * pStore() const
Definition valuetape.h:556
void jacSolv_I(double **I)
Definition valuetape.h:286
void setExclusiveMode()
Restores the default single-evaluation mode with reusable owned buffers.
Definition valuetape.h:215
static double make_inf()
Definition valuetape.h:884
bool nestedReverseEval() const
Definition valuetape.h:429
size_t tay_numDeps() const
Definition valuetape.h:375
bool isExclusiveNonLocking()
Definition valuetape.h:179
void valueBufferSize(size_t size)
Definition valuetape.h:461
size_t initalStoreSize() const
Definition valuetape.h:468
void taylor_begin(int degreeSave)
Initialize Taylor-stack recording for the current tape.
void put_vals_writeBlock(double *reals, size_t numReals)
Definition valuetape.h:401
ValueTape(const ValueTape &other)=delete
int forodec_nax() const
Definition valuetape.h:292
void put_loc(size_t loc)
Definition valuetape.h:397
int skipFileCleanup() const
Definition valuetape.h:250
size_t numDeps() const
Definition valuetape.h:369
void stop_trace(int flag)
size_t tay_numInds() const
Definition valuetape.h:372
char inParallelRegion() const
Definition valuetape.h:565
void operationBufferSize(size_t size)
Definition valuetape.h:449
int * jacSolv_ri() const
Definition valuetape.h:280
void numSwitches(size_t num)
Definition valuetape.h:377
std::shared_mutex & accessMutex() noexcept
Definition valuetape.h:221
void initialStoreSize(size_t size)
Definition valuetape.h:469
void increment_numTays_Tape()
Definition valuetape.h:346
void op_fileName(char *name)
Definition valuetape.h:267
std::array< std::string, 4 > readConfigFile()
size_t next_loc()
Definition valuetape.h:520
void decrement_nextBufferNumber()
Definition valuetape.h:388
void put_val(const double val)
Definition valuetape.h:399
int upd_resloc_check(size_t temp)
Definition valuetape.h:418
double * forodec_z() const
Definition valuetape.h:295
double * signature() const
Definition valuetape.h:430
void setStoreManagerType(unsigned char type)
Definition valuetape.h:508
int forodec_dax() const
Definition valuetape.h:293
ValueTape(short tapeId)
Definition valuetape.h:130
void keepTape(int flag)
Definition valuetape.h:277
void setParamVec(std::span< const double > paramvec)
Update parameter values used by subsequent evaluations.
void initTapeInfos_keep()
char * loc_fileName() const
Definition valuetape.h:258
void free_loc(size_t loc) const
Definition valuetape.h:525
size_t ensureContiguousLocations_(size_t n)
Definition valuetape.h:499
void skipFileCleanup(int skipFileCleanup)
Definition valuetape.h:247
void compare_adolc_ids(const ADOLC_ID &id1, const ADOLC_ID &id2)
void prepare_for_all(TapeEvaluationContext &evalCtx, AllTypes< Infos... >)
Run prepare_for() for all tape types listed in AllTypes.
Definition valuetape.h:714
char * op_fileName() const
Definition valuetape.h:255
size_t num_eq_prod() const
Definition valuetape.h:360
size_t operationBufferSize() const
Definition valuetape.h:446
int upd_resloc_inc_prod(size_t temp, size_t newlhs, unsigned char newop)
Definition valuetape.h:421
double ** forodec_Z() const
Definition valuetape.h:296
int * jacSolv_ci() const
Definition valuetape.h:279
void num_eq_prod(size_t num)
Definition valuetape.h:361
void jacSolv_modeold(int mode)
Definition valuetape.h:289
void end_sweep(TapeEvaluationContext &&evalCtx)
double * forodec_y() const
Definition valuetape.h:294
void increment_numDeps()
Definition valuetape.h:368
double get_pd_value(size_t loc) const
Definition valuetape.h:539
size_t locationBufferSize() const
Definition valuetape.h:453
size_t taylorBufferSize() const
Definition valuetape.h:463
ext_diff_fct_v2 * ext_diff_v2_append()
Definition valuetape.h:577
void jacSolv_J(double **J)
Definition valuetape.h:287
void enableMinMaxUsingAbs()
Definition valuetape.h:479
void enableBranchSwitchWarnings()
Definition valuetape.h:475
ValueTape & operator=(ValueTape &&other) noexcept
Definition valuetape.h:156
const char * fileName() const
Return the tape file name associated with the given Info adapter.
Definition valuetape.h:608
size_t ext_diff_fct_index() const
Definition valuetape.h:383
void tay_fileName(char *name)
Definition valuetape.h:264
ext_diff_fct * ext_diff_getElement(size_t index)
Definition valuetape.h:574
void tapeBaseNames(size_t loc, const std::string &baseName)
Definition valuetape.h:244
short tapeId() const
Definition valuetape.h:381
size_t nextBufferNumber() const
Definition valuetape.h:387
int upd_resloc(size_t temp, size_t lhs)
Definition valuetape.h:415
void setSharedMode()
Enables concurrent no-keep evaluations of this tape.
Definition valuetape.h:212
void forodec_dax(int dax)
Definition valuetape.h:298
char lastTayBlockInCore() const
Definition valuetape.h:354
int jacSolv_modeold() const
Definition valuetape.h:284
void increment_numInds()
Definition valuetape.h:365
double * store() const
Definition valuetape.h:554
bool isRecording() const noexcept
Definition valuetape.h:223
void branchSwitchWarning(char val)
Definition valuetape.h:562
double store(size_t idx)
Definition valuetape.h:558
ValueTape(ValueTape &&other) noexcept
Definition valuetape.h:136
ValueTape & operator=(const ValueTape &other)=delete
double * jacSolv_xold() const
Definition valuetape.h:281
void tay_numDeps(size_t val)
Definition valuetape.h:374
void signature(double *buffer)
Definition valuetape.h:431
void initTapeBuffers()
Definition valuetape.h:441
void store(double *buffer)
Definition valuetape.h:555
std::array< size_t, TapeInfos::STAT_SIZE > tapestats() const
Definition valuetape.h:334
size_t numSwitches() const
Definition valuetape.h:378
void disableBranchSwitchWarnings()
Definition valuetape.h:476
Concept describing the required interface of a tape Info adapter.
Definition infotype.h:43
ErrorType
Definition adolcerror.h:89
@ DISABLE_MINMAX_USING_ABS
@ TAPING_TAPE_STILL_IN_USE
@ ENABLE_MINMAX_USING_ABS
void ADOLC_API fail(ErrorType error, const source_location LocInfo, const FailInfo &failinfo=FailInfo())
Definition bufferstate.h:12
OPCODES
Definition oplate.h:23
Additional typed fields used when formatting an ADOL-C failure.
Definition adolcerror.h:225
short info1
Definition adolcerror.h:226
size_t info5
Definition adolcerror.h:230
Internal checkpointing state shared between the public context and the recorded external function.
Definition checkpointing.h:69
Cached sparse Hessian recovery data stored on a tape.
Definition sparseinfos.h:131
Cached sparse Jacobian recovery data stored on a tape.
Definition sparseinfos.h:21
Adapter for the locations tape (loc tape).
Definition infotype.h:159
Adapter for the operations tape (op tape).
Definition infotype.h:132
Per-sweep state used while evaluating a recorded tape.
Definition tapeevaluationcontext.h:32
void loadBlockIntoBuffer(size_t blockSize)
Definition tapeevaluationcontext.h:249
double * paramstore
Definition tapeevaluationcontext.h:106
Mutable buffers and bookkeeping used while recording a tape.
Definition taperecordingcontext.h:20
Adapter for the values tape (val tape).
Definition infotype.h:202
Per-tape active-value stores and location allocators.
Definition globaltapevarscl.h:15
void checkInitialStoreSize()
Definition globaltapevarscl.h:37
char inParallelRegion
Definition globaltapevarscl.h:61
std::unique_ptr< StoreManager > paramStoreMgrPtr
Definition globaltapevarscl.h:70
uint nominmaxFlag
Definition globaltapevarscl.h:65
size_t valueBufferSize
Definition globaltapevarscl.h:57
size_t numparam
Definition globaltapevarscl.h:66
size_t initialStoreSize
Definition globaltapevarscl.h:69
void reallocStore(unsigned char type)
size_t taylorBufferSize
Definition globaltapevarscl.h:58
size_t operationBufferSize
Definition globaltapevarscl.h:55
size_t storeSize
Definition globaltapevarscl.h:48
double * pStore
Definition globaltapevarscl.h:68
std::unique_ptr< StoreManager > storeManagerPtr
Definition globaltapevarscl.h:71
double * store
Definition globaltapevarscl.h:43
size_t numLives
Definition globaltapevarscl.h:49
char branchSwitchWarning
Definition globaltapevarscl.h:64
size_t locationBufferSize
Definition globaltapevarscl.h:56
Reusable scratch storage retained by higher-level tape drivers.
Definition persistanttapeinfos.h:12
double ** jacSolv_J
Definition persistanttapeinfos.h:28
double ** jacSolv_I
Definition persistanttapeinfos.h:29
int jacSolv_nax
Definition persistanttapeinfos.h:33
int jacSolv_modeold
Definition persistanttapeinfos.h:34
double * jacSolv_xold
Definition persistanttapeinfos.h:30
double * forodec_y
Definition persistanttapeinfos.h:25
double ** forodec_Z
Definition persistanttapeinfos.h:27
int forodec_dax
Definition persistanttapeinfos.h:24
int * jacSolv_ri
Definition persistanttapeinfos.h:31
int forodec_nax
Definition persistanttapeinfos.h:23
int * jacSolv_ci
Definition persistanttapeinfos.h:32
double * forodec_z
Definition persistanttapeinfos.h:26
Identity, statistics, file names, and recording metadata of one tape.
Definition tapeinfos.h:24
std::array< std::string, 4 > tapeBaseNames_
Definition tapeinfos.h:106
std::array< char *, 4 > fileNames
Definition tapeinfos.h:104
int skipFileCleanup
Definition tapeinfos.h:117
@ NUM_PARAM
Definition tapeinfos.h:45
@ VAL_BUFFER_SIZE
Definition tapeinfos.h:40
@ NO_MIN_MAX
Definition tapeinfos.h:43
@ LOC_BUFFER_SIZE
Definition tapeinfos.h:39
@ OP_BUFFER_SIZE
Definition tapeinfos.h:32
@ OPERATIONS_FILE
Definition tapeinfos.h:49
@ LOCATIONS_FILE
Definition tapeinfos.h:49
@ TAYLORS_FILE
Definition tapeinfos.h:49
@ VALUES_FILE
Definition tapeinfos.h:49
StatArray stats
Definition tapeinfos.h:103
int keepTape
Definition tapeinfos.h:114
static constexpr size_t maxLocsPerOp
Definition tapeinfos.h:109
short tapeId_
Definition tapeinfos.h:107
Compile-time list used to prepare tape buffers for forward and reverse sweeps.
Definition valuetape.h:614
Selects forward-order tape traversal.
Definition valuetape.h:737
Base tag for the direction selected by init_sweep().
Definition valuetape.h:735
Selects reverse-order tape traversal.
Definition valuetape.h:739
Callback descriptor for a block-structured external function.
Definition externfcts2.h:68
Callback descriptor for an externally differentiated function.
Definition externfcts.h:106
ADOLC_API std::array< size_t, TapeInfos::STAT_SIZE > tapestats(short tapeId)
Writes the tapestats of the tape into an array.
Definition tape_interface.h:115
std::vector< RecordingFrame > & currentTapeStack()
Returns a thread-local stack holding pointers to ValueTape instances.
Definition taperegistry.h:46