Re: [GHC] #6166: Performance regression in mwc-random since 7.0.x

#6166: Performance regression in mwc-random since 7.0.x -------------------------------------+------------------------------------- Reporter: bos | Owner: Type: bug | Status: new Priority: normal | Milestone: 8.0.1 Component: Compiler | Version: 7.4.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: x86_64 Type of failure: Runtime | (amd64) performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Description changed by bgamari: Old description:
I've had a report that the performance of the mwc-random package has regressed seriously after upgrading from GHC 7.0 to 7.4. It turns out that 7.2 also has the regression.
Here's a sample program.
{{{ import qualified Data.Vector.Unboxed as U
import qualified System.Random.MWC as R import System.Random.MWC.Distributions (standard)
count = 1000 * 1000
fast gen = standard gen
slow gen = standard gen >>= return
-- Edit this to choose fast or slow. which gen = slow gen
main = do gen <- R.create v <- U.replicateM count (which gen) print (U.last v) }}}
With GHC 7.0.3 -O2, this runs in 0.294 sec, regardless of whether `fast` or `slow` is used.
Under 7.4, `fast` runs in 0.062 sec (a nice speedup!), but `slow` now takes 9.2 sec (yikes!).
Roman suggested compiling the `slow` version with `-fno-state-hack`, which brings performance back up to 0.062 sec.
New description: I've had a report that the performance of the mwc-random package has regressed seriously after upgrading from GHC 7.0 to 7.4. It turns out that 7.2 also has the regression. Here's a sample program. {{{#!hs import qualified Data.Vector.Unboxed as U import qualified System.Random.MWC as R import System.Random.MWC.Distributions (standard) count = 1000 * 1000 fast gen = standard gen slow gen = standard gen >>= return -- Edit this to choose fast or slow. which gen = slow gen main = do gen <- R.create v <- U.replicateM count (which gen) print (U.last v) }}} With GHC 7.0.3 -O2, this runs in 0.294 sec, regardless of whether `fast` or `slow` is used. Under 7.4, `fast` runs in 0.062 sec (a nice speedup!), but `slow` now takes 9.2 sec (yikes!). Roman suggested compiling the `slow` version with `-fno-state-hack`, which brings performance back up to 0.062 sec. -- -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/6166#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC