[Haskell-cafe] Freeze/thaw fusion

Anthony Cowley acowley at seas.upenn.edu
Tue Aug 4 16:22:07 UTC 2015

Back in 2010 I did some work to leverage freeze/thaw fusion in
computer vision pipelines for a project at work. The aim was to speed
up compositional style so that "foo . bar . baz" would be bracketed by
a single thaw/freeze rather than a bracket around each function. The
code lives on in my HOpenCV fork at
<https://github.com/acowley/HOpenCV>, with the ugly fusing rewrites
all here <https://github.com/acowley/HOpenCV/blob/master/src/OpenCV/Core/CVOp.hs>.

I briefly spoke about the way this works at the NYHUG a while back.
The relevant part of the video starts about 27 minutes in


On Fri, Jul 31, 2015 at 11:56 PM, William Yager <will.yager at gmail.com> wrote:
> Has anyone done any research into fusing operations that involve thawing
> some data, mutating it, and then freezing it again?
> Data.Vector does something similar; it turns vectors into streams, operates
> on the streams, and then turns them back into vectors. It can fuse these
> operations by removing intermediate  However, I've done a bit of preliminary
> work on a fusion system that works on operations of the form
>     runST $ do
>         x' <- thaw x
>         foo x'
>         freeze x'
> and yields promising results in some cases. This could be useful for data
> structures that aren't stream-able, but suffer from lots of unnecessary
> freezing and unfreezing.
> This seems like the sort of thing that someone would have already done, so I
> wanted to check if anyone knew of any previous work on this.
> Cheers,
> Will
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe

More information about the Haskell-Cafe mailing list