source: trunk/ADOL-C/include/adolc/taping.h @ 522

Last change on this file since 522 was 522, checked in by kulshres, 5 years ago

allow users to skip clearing trace files at exit

in case trace files were created using a different
program, and the user wants to keep them persistent

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

  • Property svn:keywords set to Author Date Id Revision
File size: 4.9 KB
Line 
1/*----------------------------------------------------------------------------
2 ADOL-C -- Automatic Differentiation by Overloading in C++
3 File:     taping.h
4 Revision: $Id: taping.h 522 2014-07-08 08:55:35Z kulshres $
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/common.h>
20
21BEGIN_C_DECLS
22
23enum 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    STAT_SIZE                     /* represents the size of the stats vector */
42};
43
44enum TapeRemovalType {
45    ADOLC_REMOVE_FROM_CORE,
46    ADOLC_REMOVE_COMPLETELY
47};
48
49/* Returns statistics on the tape "tag". Use enumeration StatEntries for
50 * accessing the individual elements of the vector "tape_stats"! */
51ADOLC_DLL_EXPORT void tapestats(short tag, size_t *tape_stats);
52
53/* An all-in-one tape stats printing routine */
54ADOLC_DLL_EXPORT void printTapeStats(FILE *stream, short tag);
55
56ADOLC_DLL_EXPORT int removeTape(short tapeID, short type);
57
58ADOLC_DLL_EXPORT void enableBranchSwitchWarnings();
59ADOLC_DLL_EXPORT void disableBranchSwitchWarnings();
60
61ADOLC_DLL_EXPORT void ensureContiguousLocations(size_t n);
62
63ADOLC_DLL_EXPORT void enableMinMaxUsingAbs();
64ADOLC_DLL_EXPORT void disableMinMaxUsingAbs();
65/*
66 * free location block sorting/consolidation upon calls to ensureContiguousLocations
67 * happens when  the ratio between allocated and used locations exceeds gcTriggerRatio or
68 * the allocated locations exceed gcTriggerMaxSize
69 */
70ADOLC_DLL_EXPORT void setStoreManagerControl(double gcTriggerRatio, size_t gcTriggerMaxSize);
71
72END_C_DECLS
73
74/**
75 * Normally, theKeeper would take care of the initialization and finalization
76 * of ADOL-C. However, some compilers do not include the keeper code when
77 * linking. "initADOLC" should be called right after main(...), in this case.
78 * "initADOLC" will not initialize memory, but is only necessary to reference
79 * "theKeeper", such that this static instance is used at least once. :-(
80 */
81ADOLC_DLL_EXPORT void initADOLC();
82
83#if defined(__cplusplus)
84
85/* Initialization for the taping process. Creates buffers for this tape, sets
86 * files names, and calls appropriate setup routines.
87 * This functions return value is different from zero if a tape with with ID
88 * tnum is available only in core. The old tape gets overwritten by the new
89 * one in this case. */
90ADOLC_DLL_EXPORT int trace_on(short tnum, int keepTaylors = 0);
91
92/* special version including buffersize customization
93 *      obs - size of the operation buffer (number of elements)
94 *      lbs - size of the location buffer (number of elements)
95 *      vbs - size of the value buffer (number of elements)
96 *      tbs - size of the taylor buffer (number of elements)
97 * trace_on is the last point in time we want to allow the change of buffer
98 * sizes for a given tape */
99ADOLC_DLL_EXPORT int trace_on(short tnum, int keepTaylors,
100        uint obs, uint lbs, uint vbs, uint tbs, int skipFileCleanup=0);
101
102/* Stop Tracing. Cleans up, and turns off trace_flag. Flag not equal zero
103 * enforces writing of the three main tape files (op+loc+val). */
104ADOLC_DLL_EXPORT void trace_off(int flag = 0);
105
106ADOLC_DLL_EXPORT bool isTaping();
107
108ADOLC_DLL_EXPORT void skip_tracefile_cleanup(short tnum);
109
110#endif
111
112#endif /* ADOLC_TAPING_H */
Note: See TracBrowser for help on using the repository browser.