|
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: simonpj Type: bug | Status: new Priority: high | Milestone: 6.14.1 Component: Compiler | Version: 6.13 Keywords: | Difficulty: Os: Unknown/Multiple | Testcase: Architecture: Unknown/Multiple | Failure: Runtime performance bug ---------------------------------+------------------------------------------ The following program goes 25% slower with HEAD compared to 6.12.3: {{{ module Main (main) where import DeepSeq main :: IO () main = do rnf [ mk x | x <- [ 1 .. 1024 ] ] `seq` return () where mk :: Float -> [(Float,Float)] mk x = [ (x+i,x+i+1) | i <- [ 1 .. 2048] ] }}} using the attached `DeepSeq` module, or indeed the standard `Control.DeepSeq`. Simon and I diagnosed the problem to be the following dictionary for `NFData (Float,Float)` (this is HEAD): {{{ Main.main6 :: DeepSeq.NFData (GHC.Types.Float, GHC.Types.Float) Main.main6 = DeepSeq.$fNFData(,) @ GHC.Types.Float @ GHC.Types.Float DeepSeq.$fNFDataFloat DeepSeq.$fNFDataFloat }}} GHC has not inlined the dictionary function or the arguments here, even though this class is in fact just a single-method dictionary. With 6.12 we got: {{{ Main.main6 = \ (ds_dBc :: (GHC.Types.Float, GHC.Types.Float)) -> case ds_dBc of _ { (x_awr, y_aws) -> case x_awr of _ { GHC.Types.F# _ -> case y_aws of _ { GHC.Types.F# _ -> GHC.Unit.() } } } }}} i.e. everything fully inlined and a nice efficient definition. This is currently affecting parallel programs where we typically use `rnf` quite a lot. -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: simonpj Type: bug | Status: new Priority: high | Milestone: 6.14.1 Component: Compiler | Version: 6.13 Keywords: | Difficulty: Os: Unknown/Multiple | Testcase: Architecture: Unknown/Multiple | Failure: Runtime performance bug ---------------------------------+------------------------------------------ Changes (by kfrdbs): * cc: kfrdbs@… (added) -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:1> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: igloo Type: bug | Status: new Priority: high | Milestone: 7.0.1 Component: Compiler | Version: 6.13 Keywords: | Testcase: Blockedby: | Difficulty: Os: Unknown/Multiple | Blocking: Architecture: Unknown/Multiple | Failure: Runtime performance bug ---------------------------------+------------------------------------------ Changes (by simonpj): * owner: simonpj => igloo Comment: WIth HEAD (and hence STABLE I guess), the performance (looking at allocation) is the same as 6.12, so I declare this fixed. Ian: might you turn this into a performance test? Thanks Simon -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:1> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: igloo Type: bug | Status: new Priority: high | Milestone: 7.0.1 Component: Compiler | Version: 6.13 Keywords: | Testcase: Blockedby: | Difficulty: Os: Unknown/Multiple | Blocking: Architecture: Unknown/Multiple | Failure: Runtime performance bug ---------------------------------+------------------------------------------ Comment(by simonmar): IIRC the difference here doesn't show up in allocations, just in runtime. -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:2> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: igloo Type: bug | Status: new Priority: high | Milestone: 7.0.1 Component: Compiler | Version: 6.13 Keywords: | Testcase: Blockedby: | Difficulty: Os: Unknown/Multiple | Blocking: Architecture: Unknown/Multiple | Failure: Runtime performance bug ---------------------------------+------------------------------------------ Comment(by simonpj): Ahem, ok. Well, Ian can you see if it's still a problem and add a test anyway? -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:3> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: simonpj Type: bug | Status: new Priority: high | Milestone: 7.0.1 Component: Compiler | Version: 6.13 Keywords: | Testcase: Blockedby: | Difficulty: Os: Unknown/Multiple | Blocking: Architecture: Unknown/Multiple | Failure: Runtime performance bug ---------------------------------+------------------------------------------ Changes (by simonpj): * owner: igloo => simonpj -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:4> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: simonpj Type: bug | Status: new Priority: high | Milestone: 7.0.2 Component: Compiler | Version: 6.13 Keywords: | Testcase: Blockedby: | Difficulty: Os: Unknown/Multiple | Blocking: Architecture: Unknown/Multiple | Failure: Runtime performance bug ---------------------------------+------------------------------------------ Changes (by simonpj): * milestone: 7.0.1 => 7.0.2 -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:5> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: simonpj Type: bug | Status: new Priority: high | Milestone: 7.2.1 Component: Compiler | Version: 6.13 Keywords: | Testcase: Blockedby: | Difficulty: Os: Unknown/Multiple | Blocking: Architecture: Unknown/Multiple | Failure: Runtime performance bug ---------------------------------+------------------------------------------ Changes (by simonmar): * milestone: 7.0.2 => 7.2.1 Comment: We think the performance is almost back to where it was with 6.12, but not quite, and we'll take another look for 7.2.1. -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:6> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: igloo Type: bug | Status: new Priority: high | Milestone: 7.4.1 Component: Compiler | Version: 6.13 Keywords: | Testcase: Blockedby: | Difficulty: Os: Unknown/Multiple | Blocking: Architecture: Unknown/Multiple | Failure: Runtime performance bug ---------------------------------+------------------------------------------ Changes (by simonpj): * owner: simonpj => igloo Comment: Ian: could you see if this is ok now, and if not how not? Thanks Simon -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:7> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: igloo Type: bug | Status: new Priority: high | Milestone: 7.4.2 Component: Compiler | Version: 6.13 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Runtime performance bug Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Changes (by igloo): * difficulty: => Unknown * milestone: 7.4.1 => 7.4.2 -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:8> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: igloo Type: bug | Status: new Priority: high | Milestone: 7.6.1 Component: Compiler | Version: 6.13 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Runtime performance bug Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Changes (by igloo): * milestone: 7.4.2 => 7.6.1 -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:9> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: simonpj Type: bug | Status: new Priority: high | Milestone: 7.6.1 Component: Compiler | Version: 6.13 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Runtime performance bug Difficulty: Unknown | Testcase: T4138 Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Changes (by igloo): * owner: igloo => simonpj * testcase: => T4138 Comment: We're currently getting a strange middle result: {{{ \ (ds_dvm :: (GHC.Types.Float, GHC.Types.Float)) -> case ds_dvm of _ { (x_aux, y_auy) -> case x_aux of _ { GHC.Types.F# ipv_svw -> DeepSeq.$fNFDataFloat_$crnf y_auy } } }}} I'd have expected `$fNFDataFloat_$crnf` to have been inlined. I've added a test (`T4138`). Simon, I wonder if it would make sense to look at this at the same time as #6104? -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:10> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: simonpj Type: bug | Status: new Priority: high | Milestone: 7.6.1 Component: Compiler | Version: 6.13 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Runtime performance bug Difficulty: Unknown | Testcase: simplCore/shouldCompile/T4138 Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Changes (by simonpj): * testcase: T4138 => simplCore/shouldCompile/T4138 -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:11> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: simonpj Type: bug | Status: new Priority: high | Milestone: 7.6.1 Component: Compiler | Version: 6.13 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Runtime performance bug Difficulty: Unknown | Testcase: simplCore/shouldCompile/T4138 Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Comment(by simonpj): Why do you think `$fNFDataFloat_$crnf` should be inlined? It is not called in an interesting context; it is not applied to an argument we know something about. Inlining would duplicate a case expression to elimiate a single jump. Is this really the source of the regression, if any? Simon -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:12> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: simonpj Type: bug | Status: new Priority: high | Milestone: 7.6.1 Component: Compiler | Version: 6.13 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Runtime performance bug Difficulty: Unknown | Testcase: simplCore/shouldCompile/T4138 Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Comment(by igloo): I was only looking at the core generated, not looking at run-time, so if that is the expected core then we can just close this ticket. -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:13> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: simonpj Type: bug | Status: new Priority: high | Milestone: 7.6.1 Component: Compiler | Version: 6.13 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Runtime performance bug Difficulty: Unknown | Testcase: simplCore/shouldCompile/T4138 Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Comment(by simonpj): Well 17 months ago Simon M wrote "We think the performance is almost back to where it was with 6.12, but not quite, and we'll take another look for 7.2.1". Could you possibly check the performance as of today? It would be good to know whether we have a regression or not; and if so, whether it's due to this extra jump (which I rather doubt). Thanks -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:14> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: pcapriotti Type: bug | Status: new Priority: high | Milestone: 7.6.1 Component: Compiler | Version: 6.13 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Runtime performance bug Difficulty: Unknown | Testcase: simplCore/shouldCompile/T4138 Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Changes (by igloo): * owner: simonpj => pcapriotti Comment: Paolo, can you take a look at whether there is a performance issue here please? -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:15> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: pcapriotti Type: bug | Status: new Priority: high | Milestone: 7.6.1 Component: Compiler | Version: 6.13 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Runtime performance bug Difficulty: Unknown | Testcase: simplCore/shouldCompile/T4138 Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Comment(by pcapriotti): Here are some timings: ghc-6.12.3: 287 ms ghc-7.0.4: 316 ms ghc-7.2.1: 269 ms ghc-7.4.2: 265 ms ghc-HEAD: 267 ms It appears that the regression has been fixed sometime before 7.2. Before we close the ticket, should we remove the test case which checks whether `rnf` is inlined? -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:16> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
---------------------------------+------------------------------------------ Reporter: simonmar | Owner: pcapriotti Type: bug | Status: new Priority: high | Milestone: 7.6.1 Component: Compiler | Version: 6.13 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: Runtime performance bug Difficulty: Unknown | Testcase: simplCore/shouldCompile/T4138 Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Comment(by igloo): Just change it to check for 1 `F#` rather than 2 -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:17> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
|
In reply to this post by GHC
#4138: Performance regression in overloading
--------------------------------------------+------------------------------- Reporter: simonmar | Owner: pcapriotti Type: bug | Status: closed Priority: high | Milestone: 7.6.1 Component: Compiler | Version: 6.13 Resolution: fixed | Keywords: Os: Unknown/Multiple | Architecture: Unknown/Multiple Failure: Runtime performance bug | Difficulty: Unknown Testcase: simplCore/shouldCompile/T4138 | Blockedby: Blocking: | Related: --------------------------------------------+------------------------------- Changes (by pcapriotti): * status: new => closed * resolution: => fixed Comment: Pushed: {{{ commit 8f3d6a513ebba2c0a1fb15f835af78ad9e0023ff Author: Paolo Capriotti <[hidden email]> Date: Thu Jul 5 20:04:37 2012 +0100 Fix test case for #4138. As per the comments on that ticket, *not* inlining rnf is correct, so make this test pass. }}} Closing the ticket now. -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4138#comment:18> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler _______________________________________________ Glasgow-haskell-bugs mailing list [hidden email] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs |
| Powered by Nabble | Edit this page |
