[GHC] #14980: Runtime performance regression with binary operations on vectors

GHC ghc-devs at haskell.org
Mon Jun 25 09:25:56 UTC 2018


#14980: Runtime performance regression with binary operations on vectors
-------------------------------------+-------------------------------------
        Reporter:  ttylec            |                Owner:  bgamari
            Type:  bug               |               Status:  new
        Priority:  high              |            Milestone:  8.8.1
       Component:  Compiler          |              Version:  8.2.2
      Resolution:                    |             Keywords:  vector
                                     |  bitwise operations
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Runtime           |  Unknown/Multiple
  performance bug                    |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by tdammers):

 OK, some more experimenting.

 Changed the .cabal file to force `vector` to `0.12.0.1` (the latest
 version on hackage); no difference, results are still more or less the
 same on both compilers.

 Also managed to get things built with stack; the 8.2 results are also very
 similar:

 {{{
 "Generated"
 benchmarking 64 columns/raw unbox vectors
 time                 443.6 μs   (443.2 μs .. 443.9 μs)
                      1.000 R²   (1.000 R² .. 1.000 R²)
 mean                 441.6 μs   (441.2 μs .. 442.0 μs)
 std dev              1.364 μs   (1.092 μs .. 1.738 μs)

 benchmarking 64 columns/binary packed
 time                 51.35 μs   (51.29 μs .. 51.44 μs)
                      1.000 R²   (1.000 R² .. 1.000 R²)
 mean                 51.07 μs   (51.00 μs .. 51.18 μs)
 std dev              265.9 ns   (176.1 ns .. 453.5 ns)

 benchmarking 256 columns/raw unbox vectors
 time                 446.1 μs   (445.5 μs .. 447.2 μs)
                      1.000 R²   (1.000 R² .. 1.000 R²)
 mean                 443.9 μs   (443.4 μs .. 444.6 μs)
 std dev              1.883 μs   (1.337 μs .. 3.374 μs)

 benchmarking 256 columns/binary packed
 time                 291.2 μs   (286.2 μs .. 296.9 μs)
                      0.998 R²   (0.998 R² .. 0.999 R²)
 mean                 298.3 μs   (294.2 μs .. 301.2 μs)
 std dev              7.891 μs   (5.688 μs .. 10.20 μs)
 variance introduced by outliers: 15% (moderately inflated)
 }}}

 Stack-installed, with 8.0.2:

 {{{
 "Generated"
 benchmarking 64 columns/raw unbox vectors
 time                 412.3 μs   (411.7 μs .. 413.1 μs)
                      1.000 R²   (1.000 R² .. 1.000 R²)
 mean                 412.4 μs   (412.0 μs .. 413.1 μs)
 std dev              1.643 μs   (1.124 μs .. 2.815 μs)

 benchmarking 64 columns/binary packed
 time                 21.89 μs   (21.87 μs .. 21.90 μs)
                      1.000 R²   (1.000 R² .. 1.000 R²)
 mean                 21.90 μs   (21.89 μs .. 21.91 μs)
 std dev              38.13 ns   (26.94 ns .. 54.15 ns)

 benchmarking 256 columns/raw unbox vectors
 time                 417.6 μs   (416.0 μs .. 419.5 μs)
                      1.000 R²   (1.000 R² .. 1.000 R²)
 mean                 417.2 μs   (416.5 μs .. 419.1 μs)
 std dev              3.403 μs   (935.8 ns .. 6.896 μs)

 benchmarking 256 columns/binary packed
 time                 29.56 μs   (29.51 μs .. 29.63 μs)
                      1.000 R²   (1.000 R² .. 1.000 R²)
 mean                 29.52 μs   (29.51 μs .. 29.56 μs)
 std dev              71.00 ns   (36.37 ns .. 131.9 ns)
 }}}

 So apparently compiling with 8.0.2 through cabal gives different results
 than compiling though stack. Strange.

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


More information about the ghc-tickets mailing list