@@ -6,14 +6,10 @@ module Main (main) where
66import Control.Monad.ST
77import Criterion.Main
88import Data.Hashable
9- import Data.Hashable.SipHash
109import Data.Int
1110import Foreign.ForeignPtr
1211import GHC.Exts
1312import GHC.ST (ST (.. ))
14- import Data.Word
15- import Foreign.C.Types (CInt (.. ), CLong (.. ), CSize (.. ))
16- import Foreign.Ptr
1713import Data.ByteString.Internal
1814import GHC.Generics (Generic )
1915import qualified Data.ByteString.Lazy as BL
@@ -72,27 +68,9 @@ main = do
7268
7369 let k0 = 0x4a7330fae70f52e8
7470 k1 = 0x919ea5953a9a1ec9
75- sipHash = hashByteString 2 4 k0 k1
71+ 72+ hsSipHash :: ByteString -> HS. SipHash
7673 hsSipHash = HS. hash (HS. SipKey k0 k1)
77- cSipHash (PS fp off len) =
78- accursedUnutterablePerformIO . withForeignPtr fp $ \ ptr ->
79- return $! c_siphash 2 4 k0 k1 (ptr `plusPtr` off) (fromIntegral len)
80- cSipHash24 (PS fp off len) =
81- accursedUnutterablePerformIO . withForeignPtr fp $ \ ptr ->
82- return $! c_siphash24 k0 k1 (ptr `plusPtr` off) (fromIntegral len)
83- fnvHash (PS fp off len) =
84- accursedUnutterablePerformIO . withForeignPtr fp $ \ ptr ->
85- return $! fnv_hash (ptr `plusPtr` off) (fromIntegral len) 2166136261
86- #ifdef HAVE_SSE2
87- sse2SipHash (PS fp off len) =
88- accursedUnutterablePerformIO . withForeignPtr fp $ \ ptr ->
89- return $! sse2_siphash k0 k1 (ptr `plusPtr` off) (fromIntegral len)
90- #endif
91- #ifdef HAVE_SSE41
92- sse41SipHash (PS fp off len) =
93- accursedUnutterablePerformIO . withForeignPtr fp $ \ ptr ->
94- return $! sse41_siphash k0 k1 (ptr `plusPtr` off) (fromIntegral len)
95- #endif
9674
9775 withForeignPtr fp5 $ \ p5 ->
9876 withForeignPtr fp8 $ \ p8 ->
@@ -181,55 +159,6 @@ main = do
181159 , bench " Int64" $ whnf hash (0x7eadbeefdeadbeef :: Int64 )
182160 , bench " Double" $ whnf hash (0.3780675796601578 :: Double )
183161 ]
184- , bgroup " sipHash"
185- [ bench " 5" $ whnf sipHash bs5
186- , bench " 8" $ whnf sipHash bs8
187- , bench " 11" $ whnf sipHash bs11
188- , bench " 40" $ whnf sipHash bs40
189- , bench " 128" $ whnf sipHash bs128
190- , bench " 512" $ whnf sipHash bs512
191- , bench " 2^20" $ whnf sipHash bs1Mb
192- ]
193- , bgroup " cSipHash"
194- [ bench " 5" $ whnf cSipHash bs5
195- , bench " 8" $ whnf cSipHash bs8
196- , bench " 11" $ whnf cSipHash bs11
197- , bench " 40" $ whnf cSipHash bs40
198- , bench " 128" $ whnf cSipHash bs128
199- , bench " 512" $ whnf cSipHash bs512
200- , bench " 2^20" $ whnf cSipHash bs1Mb
201- ]
202- , bgroup " cSipHash24"
203- [ bench " 5" $ whnf cSipHash24 bs5
204- , bench " 8" $ whnf cSipHash24 bs8
205- , bench " 11" $ whnf cSipHash24 bs11
206- , bench " 40" $ whnf cSipHash24 bs40
207- , bench " 128" $ whnf cSipHash24 bs128
208- , bench " 512" $ whnf cSipHash24 bs512
209- , bench " 2^20" $ whnf cSipHash24 bs1Mb
210- ]
211- #ifdef HAVE_SSE2
212- , bgroup " sse2SipHash"
213- [ bench " 5" $ whnf sse2SipHash bs5
214- , bench " 8" $ whnf sse2SipHash bs8
215- , bench " 11" $ whnf sse2SipHash bs11
216- , bench " 40" $ whnf sse2SipHash bs40
217- , bench " 128" $ whnf sse2SipHash bs128
218- , bench " 512" $ whnf sse2SipHash bs512
219- , bench " 2^20" $ whnf sse2SipHash bs1Mb
220- ]
221- #endif
222- #ifdef HAVE_SSE41
223- , bgroup " sse41SipHash"
224- [ bench " 5" $ whnf sse41SipHash bs5
225- , bench " 8" $ whnf sse41SipHash bs8
226- , bench " 11" $ whnf sse41SipHash bs11
227- , bench " 40" $ whnf sse41SipHash bs40
228- , bench " 128" $ whnf sse41SipHash bs128
229- , bench " 512" $ whnf sse41SipHash bs512
230- , bench " 2^20" $ whnf sse41SipHash bs1Mb
231- ]
232- #endif
233162 , bgroup " pkgSipHash"
234163 [ bench " 5" $ whnf hsSipHash bs5
235164 , bench " 8" $ whnf hsSipHash bs8
@@ -239,22 +168,9 @@ main = do
239168 , bench " 512" $ whnf hsSipHash bs512
240169 , bench " 2^20" $ whnf hsSipHash bs1Mb
241170 ]
242- , bgroup " fnv"
243- [ bench " 5" $ whnf fnvHash bs5
244- , bench " 8" $ whnf fnvHash bs8
245- , bench " 11" $ whnf fnvHash bs11
246- , bench " 40" $ whnf fnvHash bs40
247- , bench " 128" $ whnf fnvHash bs128
248- , bench " 512" $ whnf fnvHash bs512
249- , bench " 2^20" $ whnf fnvHash bs1Mb
250- ]
251171 , bgroup " Int"
252172 [ bench " id32" $ whnf id (0x7eadbeef :: Int32 )
253173 , bench " id64" $ whnf id (0x7eadbeefdeadbeef :: Int64 )
254- , bench " wang32" $ whnf hash_wang_32 0xdeadbeef
255- , bench " wang64" $ whnf hash_wang_64 0xdeadbeefdeadbeef
256- , bench " jenkins32a" $ whnf hash_jenkins_32a 0xdeadbeef
257- , bench " jenkins32b" $ whnf hash_jenkins_32b 0xdeadbeef
258174 ]
259175 , bgroup " Generic"
260176 [ bench " product" $ whnf hash exP
@@ -271,31 +187,6 @@ new (I# n#) = unBA (runST $ ST $ \s1 ->
271187 (# s2, ary # ) -> case unsafeFreezeByteArray# ary s2 of
272188 (# s3, ba # ) -> (# s3, BA ba # ))
273189
274- foreign import ccall unsafe " hashable_siphash" c_siphash
275- :: CInt -> CInt -> Word64 -> Word64 -> Ptr Word8 -> CSize -> Word64
276- foreign import ccall unsafe " hashable_siphash24" c_siphash24
277- :: Word64 -> Word64 -> Ptr Word8 -> CSize -> Word64
278- #ifdef HAVE_SSE2
279- foreign import ccall unsafe " hashable_siphash24_sse2" sse2_siphash
280- :: Word64 -> Word64 -> Ptr Word8 -> CSize -> Word64
281- #endif
282- #ifdef HAVE_SSE41
283- foreign import ccall unsafe " hashable_siphash24_sse41" sse41_siphash
284- :: Word64 -> Word64 -> Ptr Word8 -> CSize -> Word64
285- #endif
286- 287- foreign import ccall unsafe " hashable_fnv_hash" fnv_hash
288- :: Ptr Word8 -> CLong -> CLong -> CLong
289- 290- foreign import ccall unsafe " hashable_wang_32" hash_wang_32
291- :: Word32 -> Word32
292- foreign import ccall unsafe " hashable_wang_64" hash_wang_64
293- :: Word64 -> Word64
294- foreign import ccall unsafe " hash_jenkins_32a" hash_jenkins_32a
295- :: Word32 -> Word32
296- foreign import ccall unsafe " hash_jenkins_32b" hash_jenkins_32b
297- :: Word32 -> Word32
298- 299190data PS
300191 = PS1 Int Char Bool
301192 | PS2 String ()
0 commit comments