[Haskell-beginners] parMap on multicore computers

Miguel Pignatelli miguel.pignatelli at uv.es
Fri May 22 17:38:18 EDT 2009


Hi all,

I'm experimenting a bit with the parallelization capabilities of  
Haskell.
What I am trying to do is to process in parallel all the lines of a  
text file, calculating the edit distance of each of these lines with a  
given string.
This is my testing code:


import System.IO
import Control.Monad
import Control.Parallel
import Control.Parallel.Strategies

edist :: String -> String -> Int
-- edist calculates the edit distance of 2 strings
-- see for example http://www.csse.monash.edu.au/~lloyd/tildeFP/Haskell/1998/Edit01/

getLines :: FilePath -> IO [Int]
getLines = liftM ((parMap rnf (edist longString)) . lines) . readFile

main :: IO ()
main = do
	list <- getLines "input.txt"
	mapM_ ( putStrLn . show ) list

I am testing this code in a 2xQuadCore linux (Ubuntu 8.10) machine (8  
cores in total).
The code has been compiled with

ghc --make -threaded mytest.hs

I've been trying input files of different lengths, but the more cores  
I try to use, the worst performance I am getting.
Here are some examples:

# input.txt -> 10 lines (strings) of ~1200 letters each
$ time ./mytest +RTS -N1 > /dev/null

real	0m4.775s
user	0m4.700s
sys	0m0.080s

$ time ./mytest +RTS -N4 > /dev/null

real	0m6.272s
user	0m8.220s
sys	0m0.290s

$ time ./mytest +RTS -N8 > /dev/null

real	0m7.090s
user	0m10.960s
sys	0m0.400s

# input.txt -> 100 lines (strings) of ~1200 letters each
$ time ./mytest +RTS -N1 > /dev/null

real	0m49.854s
user	0m49.730s
sys	0m0.120s

$ time ./mytest +RTS -N4 > /dev/null

real	1m11.303s
user	1m36.210s
sys	0m1.070s

$ time ./mytest +RTS -N8 > /dev/null

real	1m19.488s
user	2m6.250s
sys	0m1.270s


What is going wrong in this code? Is this a problem of the "grain  
size" of the parallelization?
Any help / advice would be very welcome,

M;
		
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/beginners/attachments/20090522/5bd5abc8/attachment-0001.html


More information about the Beginners mailing list