Re: [GHC] #3553: parallel gc suffers badly if one thread is descheduled

import Control.Parallel import Control.Parallel.Strategies (Strategy, withStrategy, rseq,
#3553: parallel gc suffers badly if one thread is descheduled -------------------------------------+------------------------------------ Reporter: simonmar | Owner: simonmar Type: bug | Status: closed Priority: normal | Milestone: 6.12.2 Component: Runtime System | Version: 6.10.4 Resolution: fixed | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: -------------------------------------+------------------------------------ Changes (by parcs): * cc: simonmar (added) Comment: I noticed that if I change `nofib/parallel/ray` to do its work in a separate thread (see diff), that this "last core slowdown" completely vanishes. Can anybody explain this massive variance? {{{ #!diff diff --git a/parallel/ray/Main.lhs b/parallel/ray/Main.lhs index a1a72e6..bcd020f 100644 --- a/parallel/ray/Main.lhs +++ b/parallel/ray/Main.lhs @@ -5,10 +5,15 @@ Michaelson for SML, converted to (parallel) Haskell by Kevin Hammond! parBuffer)
import System.Environment +> import Control.Concurrent
main = do -> [detail] <- fmap (map read) getArgs -> putStr (top detail 10.0 7.0 6.0 sc) +> v <- newEmptyMVar +> forkIO $ do +> [detail] <- fmap (map read) getArgs +> putStr (top detail 10.0 7.0 6.0 sc) +> putMVar v () +> takeMVar v
type Coord = (Double,Double,Double)
}}} Before patch: {{{ parcs@wolfgang:~/ghc/nofib/parallel/ray$ perf stat ./ray 3000 +RTS -N > /dev/null Performance counter stats for './ray 3000 +RTS -N': 94255.765778 task-clock # 6.343 CPUs utilized 2,686,596 context-switches # 0.029 M/sec 6,592 CPU-migrations # 0.000 M/sec 2,243 page-faults # 0.000 M/sec 338,901,646,069 cycles # 3.596 GHz <not supported> stalled-cycles-frontend <not supported> stalled-cycles-backend 264,852,020,580 instructions # 0.78 insns per cycle 48,676,712,628 branches # 516.432 M/sec 1,114,612,869 branch-misses # 2.29% of all branches 14.859603166 seconds time elapsed }}} After patch: {{{ parcs@wolfgang:~/ghc/nofib/parallel/ray$ perf stat ./ray 3000 +RTS -N > /dev/null Performance counter stats for './ray 3000 +RTS -N': 65701.145514 task-clock # 7.919 CPUs utilized 41,217 context-switches # 0.001 M/sec 101 CPU-migrations # 0.000 M/sec 2,274 page-faults # 0.000 M/sec 242,921,371,383 cycles # 3.697 GHz <not supported> stalled-cycles-frontend <not supported> stalled-cycles-backend 216,526,115,297 instructions # 0.89 insns per cycle 39,079,392,369 branches # 594.805 M/sec 840,462,837 branch-misses # 2.15% of all branches 8.296947901 seconds time elapsed }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/3553#comment:10 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC