[Haskell] Re: Profiling Feedback to Optimize Memoization Caching

apfelmus at quantentunnel.de apfelmus at quantentunnel.de
Fri Feb 23 15:16:02 EST 2007

Tom Hawkins wrote:
> After programming in Haskell for about a year now, I have found it
> allows we to quickly develop initial programs; thanks to the
> expressiveness of the language and type system.  But due to
> performance concerns, I typically have to restructure the initial
> program, guided by profiling, to reduce time or memory consumption.
> Many times, this refactoring process helps illuminate a better
> strategic approach to the program.  But very often, only a few
> inefficient functions need to be equipped with memoization.
> I can certainly speed up these functions with explicit memoization,
> usually by threading a Map or Set through the recursive decent.  But
> doing so always degrades the legibility of the original function.  Are
> there any tools to automate this process, so as not to clutter the
> code with "Have-I-been-here-before?" tests and supporting data
> structures?  To what extent do Haskell compilers use memoization?  Is
> there any way to guide automatic memoization?
> Also, do any compilers use profiling data to enable or re-adjust
> memoization caches of the worst offenders?  In ECAD, we would call
> this an in-place optimization (IPO).

Memoization and lazy evaluation go hand in hand. Unless you need to do
different things depending on the answer of the question
"Have-I-been-here-before?" (most prominent example: depth first search),
it is unlikely that you need to carry around a Data.Map at all. It can
be filled "statically" by a circular program.

Anyway, the ultimate way to exploit sharing of sub-computations and
pruning search tree is to use equational reasoning. IMHO, the following
talk and paper make a good introduction:

   Richard Bird. How to Write a Functional Pearl.
   ICFP 2006

   Graham Hutton. The countdown problem.
   Journal of Functional Programming, 12(6):609-616, November 2002


More information about the Haskell mailing list