
#9669: Long compile time/high memory usage for modules with many deriving clauses -------------------------------------+------------------------------------- Reporter: snoyberg | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.3 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 Type of failure: Compile-time | (amd64) performance bug | Test Case: Blocked By: | Blocking: Related Tickets: #75 | Differential Revisions: -------------------------------------+------------------------------------- Changes (by bgamari): * related: => #75 Comment: I suspect this will be positively affected by my recent work on #7450 (which focussed on compile time of datatypes with large numbers of constructors). This work has thusfar produced two fixes (Phab:D1012 and Phab:D1041). Let's characterize their effect on this and a couple of other related testcases with 7.11. This test will start with 7a3d85e705665fbf2c28f83bb3997e8979f2b88c, the parent commit of the merge of D1012 (4681f55970cabc6e33591d7e698621580818f9a2), as the base commit. I will also test D1041 (which I have yet to land) applied directly on top of this. I will look at the "maximum residency", "MUT time", "Total time", and "allocated in the heap" statistics from `+RTS -s`. ||= testcase =||= commit =||= max residency =||= MUT time =||= total time =||= allocated =|| ||= T9669 =|| base commit || 410 MB || 46.0 s || 79.4 s || 81.0 GB || || || + D1012 || 438 MB || 46.0 s || 79.7 s || 80.9 GB || || || + D1041 || 438 MB || 46.2 s || 79.9 s || 80.8 GB || ||= T7450 =|| base commit || 404 MB || 35.5 s || 48.4 s || 61.0 GB || || || + D1012 || 460 MB || 23.0 s || 35.0 s || 38.3 GB || || || + D1041 || 438 MB || 22.3 s || 35.0 s || 37.0 GB || ||= T7450-2k =|| base commit || 919 MB || 112.1 s || 140.0 s || 191.5 GB || || || + D1012 || 961 MB || 57.7 s || 84.1 s || 102.0 GB || || || + D1041 || 986 MB || 54.6 s || 82.1 s || 91.9 GB || ||= T7450-4k =|| base commit || not tested || || || || || || + D1012 || 2.4 GB || 174.0 s || 235.0 s || 338.3 GB || || || + D1041 || 1.9 GB || 158.8 s || 219.3 s || 254.5 GB || ||= T7258 =|| base commit || 191 MB || 30.5 s || 42.0 s || 49.5 GB || || || + D1012 || 171 MB || 31.4 s || 41.3 s || 49.5 GB || || || + D1041 || 179 MB || 31.2 s || 43.0 s || 49.5 GB || Here the `T9696` testcase refers to the `Bar.hs` produced by `generate.hs` on this ticket. The `T7258` case is the `W2.hs` on #7458 which features a large number of fields in a single record constructor. The `T7450` case refers to program like that described in #7450(comment:18) defining a single type with 1024 constructors deriving `Read`. The `T7450-2k` case is identical to `T7450` but with 2096 constructors. `T7450-4k` is again identical but with 4096 constructors. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9669#comment:13 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler