parallel icon indicating copy to clipboard operation
parallel copied to clipboard

parBuffer doesn't use all cores when told to.

Open noahmartinwilliams opened this issue 2 years ago • 0 comments

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:

threadscope-parbuffer-test

I'm pretty sure that it should be using all of the cores consistently, shouldn't it?

noahmartinwilliams avatar Nov 21 '23 20:11 noahmartinwilliams