Faster Array#/MutableArray# copies

Simon Marlow marlowsd at gmail.com
Mon Feb 28 18:01:22 CET 2011


On 18/02/2011 19:42, Nathan Howell wrote:
> On Fri, Feb 18, 2011 at 12:54 AM, Roman Leshchinskiy <rl at cse.unsw.edu.au
> <mailto:rl at cse.unsw.edu.au>> wrote:
>
>     Max Bolingbroke wrote:
>      > On 18 February 2011 01:18, Johan Tibell <johan.tibell at gmail.com
>     <mailto:johan.tibell at gmail.com>> wrote:> It seems like a sufficient
>     solution for your needs would be for us to
>      > use the LTO support in LLVM to inline across module boundaries - in
>      > particular to inline primop implementations into their call
>     sites. LLVM
>      > would then probably deal with unrolling small loops with
>     statically known
>      > bounds.
>
>     Could we simply use this?
>
>     http://llvm.org/docs/LangRef.html#int_memcpy
>
>
> Might be easier to implement a PrimOp inlining pass, and to run it
> before LLVM's built-in MemCpyOptimization pass [0]. This wouldn't
> generally be as good as LTO but would work without gold.
>
> [0] http://llvm.org/doxygen/MemCpyOptimizer_8cpp_source.html

Ideally you'd want the heap check in the primop to be aggregated into 
the calling function's heap check, and the primop should allocate 
directly from the heap instead of calling out to the RTS allocate(). 
All this is a bit much to expect LLVM to do, but we could do it in the 
Glorious New Code Generator...

For small arrays like this maybe we should have a new array type that 
leaves out all the card-marking stuff too (or just use tuples, as Roman 
suggested).

Cheers,
	Simon



More information about the Glasgow-haskell-users mailing list