parallel
parallel copied to clipboard
parBuffer doesn't use all cores when told to.
I tried compiling the following code with ghc-9.2.8:
module Main (main) where
import Control.Parallel.Strategies
import GHC.Conc
import System.IO
import Text.Printf
sigmoid :: Double -> Double
sigmoid x = 1.0 / (1.0 + (exp (-x)))
genStuff :: [String]
genStuff = do
let ints = [0..]
doubles = map (\x -> fromIntegral x :: Double) ints
sigmoids = map (\x -> sigmoid x) doubles
strs = map (\x -> (printf "%.5F" x) ++ "\n") sigmoids
strs
main :: IO ()
main = do
hSetBuffering stdout LineBuffering
let stuff = genStuff `using` parBuffer numCapabilities rdeepseq
putStr (foldr (++) "" (take 100000 stuff))
And I compiled it with -threaded -rtsopts -eventlog and used threadscope to look at the results, and got this:
I'm pretty sure that it should be using all of the cores consistently, shouldn't it?