uvector-0.1: examples/simple/DotProd.hs
module DotProd
where
import Data.Array.Parallel.Unlifted
test :: UArr Float -> UArr Float -> Float
test v w = loopAcc
. loopU (\a (x:*:y) -> (a + x * y :*: (Nothing::Maybe ()))) 0
$ zipU v w
{- Inner loop:
poly_$wtrans_s15C :: forall s1_aZb.
GHC.Prim.Int#
-> GHC.Base.Int
-> GHC.Prim.Float#
-> GHC.Prim.State# s1_aZb
-> (# GHC.Prim.State# s1_aZb, (GHC.Float.Float, GHC.Base.Int) #)
[Arity 4]
poly_$wtrans_s15C =
\ (@ s1_X10d)
(ww_X164 :: GHC.Prim.Int#)
(w1_X167 :: GHC.Base.Int)
(ww1_X16b :: GHC.Prim.Float#)
(w2_X16e :: GHC.Prim.State# s1_X10d) ->
case GHC.Prim.==# ww_X164 wild2_B1 of wild4_XVx {
GHC.Base.False ->
poly_$wtrans_s15C
@ s1_X10d
(GHC.Prim.+# ww_X164 1)
w1_X167
(GHC.Prim.plusFloat#
ww1_X16b
(GHC.Prim.timesFloat#
(GHC.Prim.indexFloatArray# rb2_aXC (GHC.Prim.+# rb_aXx ww_X164))
(GHC.Prim.indexFloatArray# rb21_X11Y (GHC.Prim.+# rb11_X11T ww_X164))))
w2_X16e;
GHC.Base.True ->
case w1_X167 of tpl_aZj { GHC.Base.I# a1_aZk ->
(# w2_X16e, ((GHC.Float.F# ww1_X16b), tpl_aZj) #)
}
};
} in
-}