
#9476: Implement late lambda-lifting -------------------------------------+------------------------------------- Reporter: simonpj | Owner: sgraf Type: feature request | Status: closed Priority: normal | Milestone: 8.8.1 Component: Compiler | Version: 7.8.2 Resolution: fixed | Keywords: LateLamLift Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: #8763 #13286 | Differential Rev(s): Phab:D5224 Wiki Page: LateLamLift | -------------------------------------+------------------------------------- Comment (by simonpj): Ah, I see. Thanks. It is indeed mysterious to me how allocating more less to less GC time. Paraffins is a reasonably small example, with a small inner loop, so there is some hope of finding out. With `+RTS -Sstderr` you'll get info on GC calls, including the residency numbers. With `-G1` (I think) you'll get just one generation, so every GC does a full sweep and you'll get accurate residency (= live data) info. That's useful as a way to avoid accidents such as the precise moment when major GC strikes. Does the improvement continue with one generation ? (I.e. both before and after with one generation.) With a program this small it must be possible to truly understand where the better GC numbers are coming from. It's be interesting to know if ignoring closure growth improves all programs (or at least does not make them worse). Even we didn't understand why, if it's generally true we can switch it off -- or just simplify the code by removing the analysis. One idea is this. After lambda-lifting, it's possible that `go` is strict in one of its new arguments, such as x, y, or z2. Ahh... but this lambda lifting occurs after strictness analysis, so it can't be that. OK, I'm at a loss. More info needed. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9476#comment:59 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler