[Haskell-cafe] Parallel combinator, performance advice

Bulat Ziganshin bulat.ziganshin at gmail.com
Tue Apr 7 08:40:11 EDT 2009

Hello Neil,

Tuesday, April 7, 2009, 2:25:12 PM, you wrote:

> The problem I'm trying to solve is running system commands in
> parallel.

"system commands" means execution of external commands or just system
calls inside Haskell?

> Running a benchmark of issuing 1 million trivial tasks (create,
> modify, read and IO ref) the version without any parallelism is really
> fast (< 0.1 sec), and the version with parallelism is slow (> 10 sec).
> This could be entirely due to space leaks etc when queueing many
> tasks.

i think it's just because use of MVar/Chan is much slower than IORef
activity. once i checked that on 1GHz cpu and got 2 million withMVar-s
per second

i don't understood exactly what you need, but my first shot is
to create N threads executing commands from channel:

para xs = do
  done <- newEmptyMVar
  chan <- newChan
  writeList2Chan chan (map Just xs ++ [Nothing])
  replicateM_ numCapabilities $ do
    forkIO $ do
      forever $ do
        x <- readChan chan
        case x of
          Just cmd -> cmd
          Nothing -> putMVar done ()
  takeMVar done

Best regards,
 Bulat                            mailto:Bulat.Ziganshin at gmail.com

More information about the Haskell-Cafe mailing list