  Checkpointing is a cornerstone of data-flow reversal in adjoint algorithmic
differentiation. Checkpointing is a storage/recomputation trade-off that can be
applied at different levels, one of which being the call tree. We are looking
for good placements of checkpoints onto the call tree of a given application,
to reduce run time and memory footprint of its adjoint. There is no known
optimal solution to this problem other than a combinatorial search on all
placements. We propose a heuristics based on run-time profiling of the adjoint
code. We describe implementation of this profiling tool in an existing
source-transformation AD tool. We demonstrate the interest of this approach on
test cases taken from the MITgcm ocean and atmospheric global circulation
model. We discuss the limitations of our approach and propose directions to
lift them.
