Skip to content

Commit 1456fbb

Browse files
committed
WIP
1 parent 64cece7 commit 1456fbb

File tree

1 file changed

+37
-39
lines changed

1 file changed

+37
-39
lines changed

benchmarks/FineGrained.hs

Lines changed: 37 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -98,70 +98,58 @@ bUnionDisjoint =
9898
let (trues, falses) = Data.List.partition (flip testBit (31 :: Int)) ints
9999
return (keysToMap trues, keysToMap falses)
100100

101-
bUnionEqual :: [Benchmark]
102-
bUnionEqual =
103-
[ bgroup "Bytes" [env (bytesEnv s) (bench' s) | s <- defaultSizes],
104-
bgroup "Int" [env (intsEnv s) (bench' s) | s <- defaultSizes]
105-
]
106-
where
107-
bench' s = bench (show s) . whnf (\m -> HM.union m m)
108-
bytesEnv s = do
109-
g <- newIOGenM defaultGen
110-
ks <- Key.Bytes.genNBytes s bytesLength g
111-
return (keysToMap ks)
112-
intsEnv s = do
113-
g <- newIOGenM defaultGen
114-
ks <- genInts s g
115-
return (keysToMap ks)
116-
117101
-- TODO: Separate benchmarks for overlap with pointer eq?!
118102
bUnionOverlap :: [Benchmark]
119103
bUnionOverlap =
120-
[ bgroup "Bytes" [env (bytesEnv s) (bench' s) | s <- defaultSizes],
121-
bgroup "Int" [env (intsEnv s) (bench' s) | s <- defaultSizes]
104+
[ bgroup "Bytes" [env' s setupBytes run | s <- defaultSizes],
105+
bgroup "Int" [env' s setupInts run | s <- defaultSizes]
122106
]
123107
where
124-
bench' s tup = bench (show s) $ whnf (\(as, bs) -> HM.union as bs) tup
125-
bytesEnv s = do
126-
g <- newIOGenM defaultGen
127-
(trues, falses) <- Key.Bytes.genDisjoint s bytesLength g
108+
run :: (Hashable a) => (HashMap a Int, HashMap a Int) -> Benchmarkable
109+
run = whnf (\(as, bs) -> HM.union as bs)
110+
setupBytes s gen = do
111+
(trues, falses) <- Key.Bytes.genDisjoint s bytesLength gen
128112
let (a_sep, b_sep) = splitAt (s `div` 4) trues
129113
return
130114
( keysToMap falses `HM.union` keysToMap a_sep,
131115
keysToMap falses `HM.union` keysToMap b_sep
132116
)
133-
intsEnv s = do
134-
g <- newIOGenM defaultGen
117+
setupInts s gen = do
135118
let s_overlap = s `div` 2
136119
let s_a_sep = (s - s_overlap) `div` 2
137120
let s_b_sep = s - s_overlap - s_a_sep
138-
overlap <- genInts s_overlap g
139-
a_sep <- genInts s_a_sep g
140-
b_sep <- genInts s_b_sep g
121+
overlap <- genInts s_overlap gen
122+
a_sep <- genInts s_a_sep gen
123+
b_sep <- genInts s_b_sep gen
141124
return
142125
( keysToMap overlap `HM.union` keysToMap a_sep,
143126
keysToMap overlap `HM.union` keysToMap b_sep
144127
)
145128

146-
keysToMap :: (Hashable k) => [k] -> HashMap k Int
147-
keysToMap = HM.fromList . map (,1)
148-
149-
genInts ::
150-
(StatefulGen g m) =>
151-
Int ->
152-
g ->
153-
m [Int]
154-
genInts n = do
155-
replicateM n . uniformM
129+
bUnionEqual :: [Benchmark]
130+
bUnionEqual =
131+
[ bgroup "Bytes" [env' s setupBytes run | s <- defaultSizes],
132+
bgroup "Int" [env' s setupInts run | s <- defaultSizes]
133+
]
134+
where
135+
run :: (Hashable a) => HashMap a Int -> Benchmarkable
136+
run = whnf (\m -> HM.union m m)
137+
setupBytes s gen = do
138+
ks <- Key.Bytes.genNBytes s bytesLength gen
139+
return (keysToMap ks)
140+
setupInts s gen = do
141+
ks <- genInts s gen
142+
return (keysToMap ks)
156143

157144
bSetFromList :: Benchmark
158145
bSetFromList =
159146
bgroup
160147
"fromList"
161-
[ bgroup "Bytes" (b bytesEnv),
162-
bgroup "Int" (b intsEnv)
148+
[ bg "Bytes" bytesEnv,
149+
bg "Int" intsEnv
163150
]
164151
where
152+
bg name e = bgroup name (b e)
165153
b e = [env (e s) (bench' s) | s <- defaultSizes]
166154
bench' s = bench (show s) . whnf Data.HashSet.fromList
167155
bytesEnv s = do
@@ -171,6 +159,16 @@ bSetFromList =
171159
g <- newIOGenM defaultGen
172160
genInts s g
173161

162+
keysToMap :: (Hashable k) => [k] -> HashMap k Int
163+
keysToMap = HM.fromList . map (,1)
164+
165+
genInts ::
166+
(StatefulGen g m) =>
167+
Int ->
168+
g ->
169+
m [Int]
170+
genInts n = replicateM n . uniformM
171+
174172
{-
175173
bFromList = matrix defaultSizes e' b'
176174
where

0 commit comments

Comments
 (0)