[GHC] #13360: Add a flag to enable inferring HasCallStack constraints

GHC ghc-devs at haskell.org
Fri Nov 10 13:42:31 UTC 2017


#13360: Add a flag to enable inferring HasCallStack constraints
-------------------------------------+-------------------------------------
        Reporter:  gridaphobe        |                Owner:  (none)
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:  8.4.1
       Component:  Compiler          |              Version:  8.0.1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by saurabhnanda):

 > These two versions should perform the same, do they?

 They seem to be performing almost the same (benchmarks are called
 `explicit callstack` below) -- in fact, the explicitly managed callstack
 is performing slightly worse.


 > Next I would try shrinking the contents of the user-level CallStack

 This seems to be the **biggest cost** (benchmarks are called `explicit
 callstack (mini)` below. In fact, with the "minified contents" the perf-
 penalty is **~1.2x vis-a-vis ~3-4x** in the regular callstack.


 [https://github.com/vacationlabs/hascallstack-
 benchmarks/blob/7e32c2d95f6fd82b0afbf0436a895f9edf1913e0/app/Main.hs:
 Benchmark code]


 {{{
 benchmarking recur/no callstack/10
 time                 837.4 ns   (826.7 ns .. 850.3 ns)
                      0.999 R²   (0.998 R² .. 1.000 R²)
 mean                 829.8 ns   (824.7 ns .. 838.4 ns)
 std dev              20.68 ns   (11.06 ns .. 33.00 ns)
 variance introduced by outliers: 33% (moderately inflated)

 benchmarking recur/HasCallStack/10
 time                 2.773 μs   (2.763 μs .. 2.787 μs)
                      0.999 R²   (0.999 R² .. 1.000 R²)
 mean                 2.797 μs   (2.775 μs .. 2.846 μs)
 std dev              105.8 ns   (38.93 ns .. 174.7 ns)
 variance introduced by outliers: 50% (severely inflated)

 benchmarking recur/explicit callstack/10
 time                 4.103 μs   (4.086 μs .. 4.131 μs)
                      1.000 R²   (0.999 R² .. 1.000 R²)
 mean                 4.147 μs   (4.114 μs .. 4.210 μs)
 std dev              157.9 ns   (107.7 ns .. 233.9 ns)
 variance introduced by outliers: 50% (moderately inflated)

 benchmarking recur/explicit callstack (mini)/10
 time                 1.027 μs   (1.024 μs .. 1.031 μs)
                      1.000 R²   (0.999 R² .. 1.000 R²)
 mean                 1.048 μs   (1.037 μs .. 1.068 μs)
 std dev              52.87 ns   (35.62 ns .. 76.73 ns)
 variance introduced by outliers: 67% (severely inflated)

 benchmarking recur/no callstack/100
 time                 8.290 μs   (7.961 μs .. 8.558 μs)
                      0.995 R²   (0.993 R² .. 1.000 R²)
 mean                 8.061 μs   (7.992 μs .. 8.224 μs)
 std dev              312.9 ns   (154.9 ns .. 482.3 ns)
 variance introduced by outliers: 48% (moderately inflated)

 benchmarking recur/HasCallStack/100
 time                 32.06 μs   (31.89 μs .. 32.23 μs)
                      1.000 R²   (0.999 R² .. 1.000 R²)
 mean                 32.05 μs   (31.96 μs .. 32.17 μs)
 std dev              368.3 ns   (299.5 ns .. 449.9 ns)

 benchmarking recur/explicit callstack/100
 time                 48.52 μs   (47.12 μs .. 49.92 μs)
                      0.997 R²   (0.995 R² .. 1.000 R²)
 mean                 47.70 μs   (47.39 μs .. 48.28 μs)
 std dev              1.334 μs   (750.2 ns .. 2.156 μs)
 variance introduced by outliers: 28% (moderately inflated)

 benchmarking recur/explicit callstack (mini)/100
 time                 9.225 μs   (9.111 μs .. 9.423 μs)
                      0.998 R²   (0.996 R² .. 1.000 R²)
 mean                 9.188 μs   (9.121 μs .. 9.306 μs)
 std dev              291.6 ns   (160.9 ns .. 459.9 ns)
 variance introduced by outliers: 38% (moderately inflated)
 }}}

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13360#comment:24>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list