Loop unrolling + fusion ?

Roman Leshchinskiy rl at cse.unsw.edu.au
Mon Mar 9 00:16:25 EDT 2009


On 07/03/2009, at 09:26, Claus Reinke wrote:

> My preferred spec would be roughly
>
> {-# NOINLINE f #-}
>   as now
>
> {-# INLINE f #-}    works as now, which is for non-recursive f only  
> (might in future
>   be taken as go-ahead for analysis-based recursion unfolding)
>
> {-# INLINE f PEEL n #-}
>   inline calls *into* recursive f (called loop peeling for loops)
> {-# INLINE f UNROLL m #-}
>   inline recursive calls to f *inside* f (called loop unrolling for  
> loops)
>
> {-# INLINE f PEEL n UNROLL m #-}
>   combine the previous two

The problem here is that this only works for directly recursive  
functions which I, for instance, don't normally use in high- 
performance code. Most of my loops are pipelines of collective  
combinators like map, filter, fold etc. because these are the ones  
that can be fused automatically. Unless I'm misunderstanding  
something, this approach doesn't handle such cases.

Roman




More information about the Glasgow-haskell-users mailing list