Skip to content

small SPECIALIZE INLINE program taking gigabytes of memory to compile

I have a small program that is taking 1+ GB of memory to compile.

I've distilled the troublesome input down to the following:

{-# LANGUAGE BangPatterns #-}
import Data.Vector

knot :: Vector Double -> Int -> Double
knot vs k = vs ! idx0
  where
  !idx0 = abs k `mod` 16
{-# SPECIALIZE INLINE knot :: Vector Double -> Int -> Double #-}

noise :: Vector Double -> Int -> Double
noise vs k =
  knot vs k + knot vs k + knot vs k + knot vs k +
  knot vs k + knot vs k + knot vs k + knot vs k

Compiled with ghc -fprof-auto -prof -O2 -Wall. As far as I can tell, prof-auto, prof, and optimizations of at least -O1 are required to trigger it.

I'm using ghc-7.8.2 64bit for Windows. vector is version 0.10.9.1 (currently the latest on hackage). Same code worked fine on ghc 7.6.2.

Also worth noting: Even though the SPECIALIZE isn't needed, if you remove the SPECIALIZE or the INLINE the problem goes away. If you remove even one of the duplicated calls to knot vs k in the body of noise then the amount of memory required drops dramatically. Add more to increase the requirements. I've been able to push it up around 10 GB, but I don't have enough memory to test beyond that!

Thanks!

Trac metadata
Trac field Value
Version 7.8.2
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information