| 1 | {-# LANGUAGE PArr, ParallelListComp #-} |
|---|
| 2 | {-# OPTIONS -fvectorise #-} |
|---|
| 3 | |
|---|
| 4 | module TestMat where |
|---|
| 5 | |
|---|
| 6 | import qualified Prelude as P |
|---|
| 7 | import Data.Array.Parallel |
|---|
| 8 | import Data.Array.Parallel.Prelude |
|---|
| 9 | import Data.Array.Parallel.Prelude.Double as D |
|---|
| 10 | import Data.Array.Parallel.Prelude.Int as I |
|---|
| 11 | |
|---|
| 12 | snd (_, b) = b |
|---|
| 13 | |
|---|
| 14 | fst (a, _) = a |
|---|
| 15 | |
|---|
| 16 | type Vector = [:Double:] |
|---|
| 17 | type SparseMatrix = [:[:(Int, Double):]:] |
|---|
| 18 | type DenseMatrix = [:[:Double:]:] |
|---|
| 19 | |
|---|
| 20 | dotp :: Vector -> Vector -> Double |
|---|
| 21 | dotp v1 v2 = D.sumP (zipWithP (D.*) v1 v2) |
|---|
| 22 | |
|---|
| 23 | mvMult :: SparseMatrix -> Vector -> Vector |
|---|
| 24 | mvMult mat vec = [: D.sumP [: v D.* (vec !: n) | (n, v) <- v1 :] | v1 <- mat:] |
|---|
| 25 | |
|---|
| 26 | vp :: Vector -> Vector -> Vector |
|---|
| 27 | vp a b = zipWithP (D.+) a b |
|---|
| 28 | |
|---|
| 29 | vt :: Vector -> Vector -> Vector |
|---|
| 30 | vt a b = zipWithP (D.*) a b |
|---|
| 31 | |
|---|
| 32 | middle ib u1 ic u2 = vp (mvMult ib u1) (mvMult ic u2) |
|---|
| 33 | firstfn mv eta1 ib u1 ic u2 = vt (vp mv eta1) (middle ib u1 ic u2) |
|---|
| 34 | lastfn nv eta1 eta2 = vt (vp nv eta1) eta2 |
|---|
| 35 | |
|---|
| 36 | tmpfn mv eta1 ib u1 ic u2 nv eta2 = vp (firstfn mv eta1 ib u1 ic u2) (lastfn nv eta1 eta2) |
|---|