Improve tridiag benchmark a bit
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 24 May 2010 04:44:38 +0000 (04:44 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 24 May 2010 04:44:38 +0000 (04:44 +0000)
benchmarks/Algo/Tridiag.hs

index 1238666..7668dea 100644 (file)
@@ -5,16 +5,12 @@ import Data.Vector.Unboxed as V
 tridiag :: (Vector Double, Vector Double, Vector Double, Vector Double)
             -> Vector Double
 {-# NOINLINE tridiag #-}
-tridiag (as,bs,cs,ds) = xs
+tridiag (as,bs,cs,ds) = V.prescanr' (\(c,d) x' -> d - c*x') 0
+                      $ V.prescanl' modify (0,0)
+                      $ V.zip (V.zip as bs) (V.zip cs ds)
     where
-      (cs',ds') = V.unzip
-                $ V.prescanl' modify (0,0)
-                $ V.zip (V.zip as bs) (V.zip cs ds)
-
       modify (c',d') ((a,b),(c,d)) = 
                    let id = 1 / (b - c'*a)
                    in
                    id `seq` (c*id, (d-d'*a)*id)
 
-      xs = V.prescanr' (\(c,d) x' -> d - c*x') 0 (V.zip cs' ds')
-