module Zip where import Random import System.Random.MWC import Data.Array.Unboxed as IArray import Data.Array.Accelerate as Acc hiding (min) -- Tests -- ----- zipAcc :: Vector Float -> Vector Int -> Acc (Vector (Float,Int)) zipAcc xs ys = Acc.zip (use xs) (use ys) zipRef :: UArray Int Float -> UArray Int Int -> IArray.Array Int (Float,Int) zipRef xs ys = let mn = bounds xs uv = bounds ys newSize = (0, (rangeSize mn `min` rangeSize uv) - 1) in listArray newSize $ Prelude.zip (elems xs) (elems ys) -- Main -- ---- run :: Int -> IO (() -> IArray.Array Int (Float,Int), () -> Acc (Vector (Float,Int))) run n = withSystemRandom $ \gen -> do xs <- randomUArrayR (-1,1) gen n ys <- randomUArrayR (-1,1) gen n xs' <- convertUArray xs ys' <- convertUArray ys return $ (\() -> zipRef xs ys, \() -> zipAcc xs' ys')