lol-0.2.0.0: benchmarks/ZqBenches.hs
{-# LANGUAGE DataKinds, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses,
NoImplicitPrelude, RankNTypes, TypeFamilies #-}
module ZqBenches (zqBenches) where
import Crypto.Lol
import Control.Applicative
import Control.Monad
import Control.Monad.Random
import qualified Data.Vector.Unboxed as U
import qualified Data.Array.Repa as R
import GHC.TypeLits
import Utils
import Gen
import Benchmarks
type Arr = R.Array R.U R.DIM1
zqBenches :: MonadRandom rnd => rnd Benchmark
zqBenches = benchGroup "ZqBasic" [
hideArgs bench_mul_unb (Proxy::Proxy (Zq 577)),
hideArgs bench_mul_repa $ (Proxy::Proxy (Zq 577))
]
bench_mul_repa :: (Ring zq, U.Unbox zq) => Arr zq -> Arr zq -> Bench zq
bench_mul_repa a b = bench (R.computeUnboxedS . R.zipWith (*) a) b
bench_mul_unb :: (Ring zq, U.Unbox zq) => U.Vector zq -> U.Vector zq -> Bench zq
bench_mul_unb a b = bench (U.zipWith (*) a) b
vecLen = 100 :: Int
instance (U.Unbox zq, Random zq, MonadRandom rnd) => Generatable rnd (Arr zq) where
genArg = R.fromListUnboxed (R.Z R.:. vecLen) <$> replicateM vecLen getRandom
instance (U.Unbox zq, Random zq, MonadRandom rnd) => Generatable rnd (U.Vector zq) where
genArg = U.fromList <$> replicateM vecLen getRandom