[GHC] #7091: DPH Matrix product memory usage
GHC
cvs-ghc at haskell.org
Sun Oct 14 19:43:54 CEST 2012
#7091: DPH Matrix product memory usage
--------------------------------------+-------------------------------------
Reporter: mblanco | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Data Parallel Haskell | Version: 7.4.1
Keywords: | Os: Linux
Architecture: x86 | Failure: Runtime performance bug
Difficulty: Unknown | Testcase:
Blockedby: | Blocking:
Related: |
--------------------------------------+-------------------------------------
Changes (by igloo):
* difficulty: => Unknown
Old description:
> This report is from the post at Haskell-cafe "DPH matrix product", I'm
> reporting it here so developers can define if it's a bug or not and its
> priority.
>
> On a (I think) standar implementation of matrix product on DPH I notice
> an excessive use of system memory.
> At execution time, on matrices of size 300*300 the program does finish
> (although it is very slow), but on 600*600 it consumes GBs of RAM until
> the process is aborted.
>
> This is the system information:
>
> - Ubuntu 12.04 32-bit
>
> - Intel® Core™2 Duo CPU T5270 @ 1.40GHz × 2
>
> - 2.9 GiB RAM
>
> GHC version:
>
> - GHC 7.4.1
>
> DPH libraries:
>
> - dph-base-0.6.1.1
>
> - (dph-lifted-base-0.6.1.1)
>
> - (dph-lifted-vseg-0.6.1.2)
>
> - (dph-prim-interface-0.6.1.1)
>
> - (dph-prim-par-0.6.1.1)
>
> - (dph-prim-seq-0.6.1.1)
>
> Compilation flags:
>
> I'm using two combinations of flags, taken from different sources. In
> both cases results are identical:
>
> - From https://github.com/ghc/packages-dph: -rtsopts -threaded -fllvm
> -optlo-O3 -Odph -fcpr-off -fno-liberate-case -package dph-lifted-vseg
>
> - From dph-examples: -rtsopts -threaded -fllvm -Odph -package dph-lifted-
> vseg -fcpr-off -fno-liberate-case -fsimpl-tick-factor=1000
>
> Execution flags:
>
> +RTS -N
>
> Tests:
>
> - Computing the product of two 400*400 matrices takes 6.037993 seconds.
>
> - Computing the product of two 600*600 matrices yields "out of memory
> (requested 1728053248 bytes)".
>
> DPH code:
>
> ----------------------------------------------------------------
> {-# LANGUAGE ParallelArrays, ParallelListComp #-}
>
> {-# OPTIONS -fvectorise #-}
>
> module DPH_mmult_wrapper (matMult_wrapper, Matrix_wrapper) where
>
> import qualified Prelude
>
> import Data.Array.Parallel
>
> import Data.Array.Parallel.Prelude.Double as D
>
> import Data.Array.Parallel.Prelude.Int as I
>
> type MMultType = Double
>
> type Matrix = [:[:MMultType:]:]
>
> type MVector = [:MMultType:]
>
> type Matrix_wrapper = PArray (PArray MMultType)
>
> -- matMult_wrapper assumes mB is already transposed
>
> {-# NOINLINE matMult_wrapper #-}
>
> matMult_wrapper :: Matrix_wrapper -> Matrix_wrapper -> Matrix_wrapper
>
> matMult_wrapper mA mB = toPArrayP (mapP toPArrayP (matMult
> (fromNestedPArrayP mA) (fromNestedPArrayP mB)))
>
> matMult :: Matrix -> Matrix -> Matrix
>
> matMult mA mB = mapP (\row -> mapP (\col -> dotp row col) mB) mA
>
> dotp :: MVector -> MVector -> MMultType
>
> dotp row col = D.sumP (zipWithP (D.*) row col)
>
> ----------------------------------------------------------------
>
> I'm reporting this as I think it is the kind of problems intended to be
> solved in the last definition of the internal DPH structure (the one from
> "Work Efficient Higher-Order Vectorisation" paper).
>
> If there is any information missing, please comment and I will update the
> report.
>
> Thanks.
New description:
This report is from the post at Haskell-cafe "DPH matrix product", I'm
reporting it here so developers can define if it's a bug or not and its
priority.
On a (I think) standar implementation of matrix product on DPH I notice an
excessive use of system memory.
At execution time, on matrices of size 300*300 the program does finish
(although it is very slow), but on 600*600 it consumes GBs of RAM until
the process is aborted.
This is the system information:
- Ubuntu 12.04 32-bit
- Intel® Core™2 Duo CPU T5270 @ 1.40GHz × 2
- 2.9 GiB RAM
GHC version:
- GHC 7.4.1
DPH libraries:
- dph-base-0.6.1.1
- (dph-lifted-base-0.6.1.1)
- (dph-lifted-vseg-0.6.1.2)
- (dph-prim-interface-0.6.1.1)
- (dph-prim-par-0.6.1.1)
- (dph-prim-seq-0.6.1.1)
Compilation flags:
I'm using two combinations of flags, taken from different sources. In both
cases results are identical:
- From https://github.com/ghc/packages-dph: -rtsopts -threaded -fllvm
-optlo-O3 -Odph -fcpr-off -fno-liberate-case -package dph-lifted-vseg
- From dph-examples: -rtsopts -threaded -fllvm -Odph -package dph-lifted-
vseg -fcpr-off -fno-liberate-case -fsimpl-tick-factor=1000
Execution flags:
+RTS -N
Tests:
- Computing the product of two 400*400 matrices takes 6.037993 seconds.
- Computing the product of two 600*600 matrices yields "out of memory
(requested 1728053248 bytes)".
DPH code:
{{{
{-# LANGUAGE ParallelArrays, ParallelListComp #-}
{-# OPTIONS -fvectorise #-}
module DPH_mmult_wrapper (matMult_wrapper, Matrix_wrapper) where
import qualified Prelude
import Data.Array.Parallel
import Data.Array.Parallel.Prelude.Double as D
import Data.Array.Parallel.Prelude.Int as I
type MMultType = Double
type Matrix = [:[:MMultType:]:]
type MVector = [:MMultType:]
type Matrix_wrapper = PArray (PArray MMultType)
-- matMult_wrapper assumes mB is already transposed
{-# NOINLINE matMult_wrapper #-}
matMult_wrapper :: Matrix_wrapper -> Matrix_wrapper -> Matrix_wrapper
matMult_wrapper mA mB = toPArrayP (mapP toPArrayP (matMult
(fromNestedPArrayP mA) (fromNestedPArrayP mB)))
matMult :: Matrix -> Matrix -> Matrix
matMult mA mB = mapP (\row -> mapP (\col -> dotp row col) mB) mA
dotp :: MVector -> MVector -> MMultType
dotp row col = D.sumP (zipWithP (D.*) row col)
}}}
I'm reporting this as I think it is the kind of problems intended to be
solved in the last definition of the internal DPH structure (the one from
"Work Efficient Higher-Order Vectorisation" paper).
If there is any information missing, please comment and I will update the
report.
Thanks.
--
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7091#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list