Quand je lance ce programme avec -s
:parTraversable ne pas créer d'étincelles
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 sont créés:
SPARKS: 1000 (993 convertis, 0 débordait, 0 dud, 6 GC'd , 1 pétillé)
Si je change parList
-parTraversable
x = product (xs `using` parTraversable rseq)
pas d'étincelles sont créés:
SPARKS: 0 (0 converti, 0 débordait, 0 fringue, 0 GC'd, 0 pétillé)
Si je change rseq
-rdeepseq
:
main = do let xs = (take 1000 $ product . take 1000 . repeat <$> [1..]) :: [Integer]
x = product (xs `using` parList rdeepseq)
putStrLn (show x)
Aucun produit des étincelles
SPARKS: 0 (0 converti, 0 débordait, 0 fringue, 0 GC'd, 0 pétillé)
J'utilise en parallèle 3.2.1.1 et dans le code source, parList
est définie à l'aide parTraversable
!
parList :: Strategy a -> Strategy [a]
parList = parTraversable
Que manque-t-il?