
GHC profiling is not that hard. There are a few tutorials on the Internet that can help you (try Real World Haskell, ch 25http://book.realworldhaskell.org/read/profiling-and-optimization.html) Running your code with "+RTS -pa -sstderr" can give you some hints on where it is hogging memory. Regards. Rafael On Wed, Apr 27, 2011 at 15:25, Patrick LeBoutillier < patrick.leboutillier@gmail.com> wrote:
Felipe,
I tried the $! bit, but I get the same result. I guess there's another leak somewhere...
Patrick
On Wed, Apr 27, 2011 at 11:20 AM, Felipe Almeida Lessa
wrote: On Wed, Apr 27, 2011 at 11:52 AM, Patrick LeBoutillier
wrote: How do I figure out why the program needs a lot of stack?
Usually it is because you are building a large thunk.
Also, is there an easy way to increace performance?
Getting rid of the thunks should increase performance as well.
I've had just a quick look on your code, but here are some suggestions:
record :: (Ord n) => n -> Distrib n -> Distrib n record n (Distrib m rs) = Distrib (M.alter f slot m) rs where f (Just n) = Just $ n + 1 f Nothing = Just 1 slot = findSlot n rs findSlot x (r@(Range a b):rs) | x >= a && x < b = r | otherwise = findSlot x rs findSlot x [] = OutOfBounds
Try changing "Just $ n + 1" to "Just $! n + 1". It is possible that this change alone removes the leak (it is the only obvious leak I'm seeing right now).
Also, for findSlot you may want to do a binary search, but that isn't related to the leak at all.
Cheers,
-- Felipe.
-- ===================== Patrick LeBoutillier Rosemère, Québec, Canada
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
-- Rafael Gustavo da Cunha Pereira Pinto