[Haskell-cafe] Re: parallel matrix multiply (dph, par/pseq)

Johannes Waldmann waldmann at imn.htwk-leipzig.de
Tue Jan 19 06:08:27 EST 2010

> ... use Array (Int,Int) Double, as it accesses its elements in O(1). 

thanks for the comments.

I don't need O(dim^0) element access - 
I need O(dim^reasonable) addition and multiplication.

Modelling a matrix as [[Element]] should be nearly fine 
(for sequential execution), I think these are quadratic/cubic:

a * b = zipWith (zipWith (+)) a b  
a * b = for a $ \ row -> 
        for ( transpose b ) $ \ col -> 
            sum $ zipWith (*) row col

The only problem with this code is that 'transpose b'
(assuming the compiler lifts it to outer scope)
allocates memory that later becomes garbage,
but not immediately, since it is needed several times.

( in the above, for = flip map  , 
which is missing from the standard libs?
by analogy to  forM = flip mapM )

Best regards, J.W.

More information about the Haskell-Cafe mailing list