-
Notifications
You must be signed in to change notification settings - Fork 23
Closed
Description
When I run this program with -s:
module Main where
import Control.Parallel.Strategies
main :: IO ()
main = do let xs = take 1000 $ product . take 1000 . repeat <$> [1..]
x = product (xs `using` parList rseq)
putStrLn (show x)
Sparks are created:
SPARKS: 1000 (993 converted, 0 overflowed, 0 dud, 6 GC'd, 1 fizzled)
If I change parList to parTraversable
x = product (xs `using` parTraversable rseq)
no sparks are created:
SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)
If I change rseq to rdeepseq:
main = do let xs = (take 1000 $ product . take 1000 . repeat <$> [1..]) :: [Integer]
x = product (xs `using` parList rdeepseq)
putStrLn (show x)
No sparks are created
SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)
If I use parTraversable over a Map:
main :: IO ()
main = do let xs = (take 1000 $ take 1000 . repeat <$> [1..]) :: [[Integer]]
m = Map.fromList $ zip [0..] xs
x = product (fmap product m `using` parTraversable rseq)
putStrLn (show x)
No sparks are created
SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)
using rdeepseq results in the same behavior.
My cabal file has the following ghc options:
-O1 -threaded -rtsopts -with-rtsopts=-N4
I am using the stack resolver nightly-2017-10-06 which has parallel-3.2.1.1 and ghc-8.2.1
I originally asked about this on stackoverflow and the behavior was confirmed by another user.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels