1 /*---------------------------------------------------------------------------- 2 ADOL-C -- Automatic Differentiation by Overloading in C++ 3 File: taping.h 4 Revision: $Id: taping.h 764 2019-01-30 14:44:40Z mbanovic $ 5 Contents: all C functions directly accessing at least one of the four tapes 6 (operations, locations, constants, value stack) 7 8 Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, 9 Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel 10 11 This file is part of ADOL-C. This software is provided as open source. 12 Any use, reproduction, or distribution of the software constitutes 13 recipient's acceptance of the terms of the accompanying license file. 14 15 ----------------------------------------------------------------------------*/ 16 #if !defined(ADOLC_TAPING_H) 17 #define ADOLC_TAPING_H 1 18 19 #include <adolc/internal/common.h> 20 21 BEGIN_C_DECLS 22 23 enum StatEntries { 24 NUM_INDEPENDENTS, /* # of independent variables */ 25 NUM_DEPENDENTS, /* # of dependent variables */ 26 NUM_MAX_LIVES, /* max # of live variables */ 27 TAY_STACK_SIZE, /* # of values in the taylor (value) stack */ 28 OP_BUFFER_SIZE, /* # of operations per buffer == OBUFSIZE (usrparms.h) */ 29 NUM_OPERATIONS, /* overall # of operations */ 30 OP_FILE_ACCESS, /* operations file written or not */ 31 NUM_LOCATIONS, /* overall # of locations */ 32 LOC_FILE_ACCESS, /* locations file written or not */ 33 NUM_VALUES, /* overall # of values */ 34 VAL_FILE_ACCESS, /* values file written or not */ 35 LOC_BUFFER_SIZE, /* # of locations per buffer == LBUFSIZE (usrparms.h) */ 36 VAL_BUFFER_SIZE, /* # of values per buffer == CBUFSIZE (usrparms.h) */ 37 TAY_BUFFER_SIZE, /* # of taylors per buffer <= TBUFSIZE (usrparms.h) */ 38 NUM_EQ_PROD, /* # of eq_*_prod for sparsity pattern */ 39 NO_MIN_MAX, /* no use of min_op, deferred to abs_op for piecewise stuff */ 40 NUM_SWITCHES, /* # of abs calls that can switch branch */ 41 NUM_PARAM, /* no of parameters (doubles) interchangable without retaping */ 42 STAT_SIZE /* represents the size of the stats vector */ 43 }; 44 45 enum TapeRemovalType { 46 ADOLC_REMOVE_FROM_CORE, 47 ADOLC_REMOVE_COMPLETELY 48 }; 49 50 enum LocationMgrType { 51 ADOLC_LOCATION_BLOCKS, /* can allocate contiguous location blocks */ 52 ADOLC_LOCATION_SINGLETONS /* only singleton locations, no blocks */ 53 }; 54 55 ADOLC_DLL_EXPORT void skip_tracefile_cleanup(short tnum); 56 57 /* Returns statistics on the tape "tag". Use enumeration StatEntries for 58 * accessing the individual elements of the vector "tape_stats"! */ 59 ADOLC_DLL_EXPORT void tapestats(short tag, size_t *tape_stats); 60 61 ADOLC_DLL_EXPORT void set_nested_ctx(short tag, char nested); 62 63 ADOLC_DLL_EXPORT char currently_nested(short tag); 64 /* An all-in-one tape stats printing routine */ 65 ADOLC_DLL_EXPORT void printTapeStats(FILE *stream, short tag); 66 67 ADOLC_DLL_EXPORT void cleanUp(); 68 69 ADOLC_DLL_EXPORT int removeTape(short tapeID, short type); 70 71 ADOLC_DLL_EXPORT void enableBranchSwitchWarnings(); 72 ADOLC_DLL_EXPORT void disableBranchSwitchWarnings(); 73 74 ADOLC_DLL_EXPORT void enableMinMaxUsingAbs(); 75 ADOLC_DLL_EXPORT void disableMinMaxUsingAbs(); 76 /* 77 * free location block sorting/consolidation upon calls to ensureContiguousLocations 78 * happens when the ratio between allocated and used locations exceeds gcTriggerRatio or 79 * the allocated locations exceed gcTriggerMaxSize 80 */ 81 ADOLC_DLL_EXPORT void setStoreManagerType(unsigned char loctypes); 82 83 ADOLC_DLL_EXPORT void setStoreManagerControl(double gcTriggerRatio, size_t gcTriggerMaxSize); 84 85 END_C_DECLS 86 87 /** 88 * Normally, theKeeper would take care of the initialization and finalization 89 * of ADOL-C. However, some compilers do not include the keeper code when 90 * linking. "initADOLC" should be called right after main(...), in this case. 91 * "initADOLC" will not initialize memory, but is only necessary to reference 92 * "theKeeper", such that this static instance is used at least once. :-( 93 */ 94 ADOLC_DLL_EXPORT void initADOLC(); 95 96 #if defined(__cplusplus) 97 98 /* Initialization for the taping process. Creates buffers for this tape, sets 99 * files names, and calls appropriate setup routines. 100 * This functions return value is different from zero if a tape with with ID 101 * tnum is available only in core. The old tape gets overwritten by the new 102 * one in this case. */ 103 ADOLC_DLL_EXPORT int trace_on(short tnum, int keepTaylors = 0); 104 105 /* special version including buffersize customization 106 * obs - size of the operation buffer (number of elements) 107 * lbs - size of the location buffer (number of elements) 108 * vbs - size of the value buffer (number of elements) 109 * tbs - size of the taylor buffer (number of elements) 110 * trace_on is the last point in time we want to allow the change of buffer 111 * sizes for a given tape */ 112 ADOLC_DLL_EXPORT int trace_on(short tnum, int keepTaylors, 113 uint obs, uint lbs, uint vbs, uint tbs, int skipFileCleanup=0); 114 115 /* Stop Tracing. Cleans up, and turns off trace_flag. Flag not equal zero 116 * enforces writing of the three main tape files (op+loc+val). */ 117 ADOLC_DLL_EXPORT void trace_off(int flag = 0); 118 119 ADOLC_DLL_EXPORT bool isTaping(); 120 121 #include <vector> 122 ADOLC_DLL_EXPORT void cachedTraceTags(std::vector<short>& result); 123 124 #endif 125 126 #endif /* ADOLC_TAPING_H */ 127