  This paper presents a new functionality of the Automatic Differentiation (AD)
tool Tapenade. Tapenade generates adjoint codes which are widely used for
optimization or inverse problems. Unfortunately, for large applications the
adjoint code demands a great deal of memory, because it needs to store a large
set of intermediates values. To cope with that problem, Tapenade implements a
sub-optimal version of a technique called checkpointing, which is a trade-off
between storage and recomputation. Our long-term goal is to provide an optimal
checkpointing strategy for every code, not yet achieved by any AD tool. Towards
that goal, we first introduce modifications in Tapenade in order to give the
user the choice to select the checkpointing strategy most suitable for their
code. Second, we conduct experiments in real-size scientific codes in order to
gather hints that help us to deduce an optimal checkpointing strategy. Some of
the experimental results show memory savings up to 35% and execution time up to
90%.
