2020/* Number of bytes to hash per iteration */
2121static const uint64_t BUFFER_SIZE = 1000 *1000 ;
2222
23- /* Hash BUFFER_SIZE bytes via different algos */
24-
2523static void HASH_1MB_RIPEMD160 (benchmark::Bench& bench)
2624{
2725 uint8_t hash[CRIPEMD160::OUTPUT_SIZE];
@@ -49,12 +47,30 @@ static void HASH_1MB_SHA256(benchmark::Bench& bench)
4947 });
5048}
5149
52- static void HASH_1MB_DSHA256 (benchmark::Bench& bench)
50+ static void HASH_1MB_SHA3_256 (benchmark::Bench& bench)
5351{
54- uint8_t hash[CSHA256 ::OUTPUT_SIZE];
52+ uint8_t hash[SHA3_256 ::OUTPUT_SIZE];
5553 std::vector<uint8_t > in (BUFFER_SIZE,0 );
5654 bench.batch (in.size ()).unit (" byte" ).minEpochIterations (10 ).run ([&] {
57- CHash256 ().Write (in).Finalize (hash);
55+ SHA3_256 ().Write (in).Finalize (hash);
56+ });
57+ }
58+
59+ static void HASH_SHA256_32b (benchmark::Bench& bench)
60+ {
61+ std::vector<uint8_t > in (32 ,0 );
62+ bench.run ([&] {
63+ CSHA256 ()
64+ .Write (in.data (), in.size ())
65+ .Finalize (in.data ());
66+ });
67+ }
68+
69+ static void HASH_SHA256D64_1024 (benchmark::Bench& bench)
70+ {
71+ std::vector<uint8_t > in (64 * 1024 , 0 );
72+ bench.minEpochIterations (1000 ).run ([&] {
73+ SHA256D64 (in.data (), in.data (), 1024 );
5874 });
5975}
6076
@@ -67,12 +83,100 @@ static void HASH_1MB_SHA512(benchmark::Bench& bench)
6783 });
6884}
6985
70- static void HASH_1MB_SHA3_256 (benchmark::Bench& bench)
86+ static void HASH_SipHash_32b (benchmark::Bench& bench)
7187{
72- uint8_t hash[SHA3_256::OUTPUT_SIZE];
88+ uint256 x;
89+ uint64_t k1 = 0 ;
90+ bench.run ([&] {
91+ *((uint64_t *)x.begin ()) = SipHashUint256 (0 , ++k1, x);
92+ });
93+ }
94+
95+ static void FastRandom_32bit (benchmark::Bench& bench)
96+ {
97+ FastRandomContext rng (true );
98+ bench.run ([&] {
99+ rng.rand32 ();
100+ });
101+ }
102+
103+ static void FastRandom_1bit (benchmark::Bench& bench)
104+ {
105+ FastRandomContext rng (true );
106+ bench.run ([&] {
107+ rng.randbool ();
108+ });
109+ }
110+
111+ static void MuHash (benchmark::Bench& bench)
112+ {
113+ MuHash3072 acc;
114+ unsigned char key[32 ] = {0 };
115+ uint32_t i = 0 ;
116+ bench.run ([&] {
117+ key[0 ] = ++i & 0xFF ;
118+ acc *= MuHash3072 (key);
119+ });
120+ }
121+
122+ static void MuHashMul (benchmark::Bench& bench)
123+ {
124+ MuHash3072 acc;
125+ FastRandomContext rng (true );
126+ MuHash3072 muhash{rng.randbytes (32 )};
127+
128+ bench.run ([&] {
129+ acc *= muhash;
130+ });
131+ }
132+
133+ static void MuHashDiv (benchmark::Bench& bench)
134+ {
135+ MuHash3072 acc;
136+ FastRandomContext rng (true );
137+ MuHash3072 muhash{rng.randbytes (32 )};
138+
139+ bench.run ([&] {
140+ acc /= muhash;
141+ });
142+ }
143+
144+ static void MuHashPrecompute (benchmark::Bench& bench)
145+ {
146+ MuHash3072 acc;
147+ FastRandomContext rng (true );
148+ std::vector<unsigned char > key{rng.randbytes (32 )};
149+
150+ bench.run ([&] {
151+ MuHash3072{key};
152+ });
153+ }
154+
155+ BENCHMARK (HASH_1MB_RIPEMD160);
156+ BENCHMARK (HASH_1MB_SHA1);
157+ BENCHMARK (HASH_1MB_SHA256);
158+ BENCHMARK (HASH_1MB_SHA512);
159+ BENCHMARK (HASH_1MB_SHA3_256);
160+
161+ BENCHMARK (HASH_SHA256_32b);
162+ BENCHMARK (HASH_SipHash_32b);
163+ BENCHMARK (HASH_SHA256D64_1024);
164+ BENCHMARK (FastRandom_32bit);
165+ BENCHMARK (FastRandom_1bit);
166+
167+ BENCHMARK (MuHash);
168+ BENCHMARK (MuHashMul);
169+ BENCHMARK (MuHashDiv);
170+ BENCHMARK (MuHashPrecompute);
171+
172+ /* --------------------------- Dash-specific tests start here --------------------------- */
173+
174+ static void HASH_1MB_DSHA256 (benchmark::Bench& bench)
175+ {
176+ uint8_t hash[CSHA256::OUTPUT_SIZE];
73177 std::vector<uint8_t > in (BUFFER_SIZE,0 );
74178 bench.batch (in.size ()).unit (" byte" ).minEpochIterations (10 ).run ([&] {
75- SHA3_256 ().Write (in).Finalize (hash);
179+ CHash256 ().Write (in).Finalize (hash);
76180 });
77181}
78182
@@ -86,7 +190,6 @@ static void HASH_1MB_X11(benchmark::Bench& bench)
86190}
87191
88192/* Hash different number of bytes via DSHA256 */
89-
90193static void HASH_DSHA256_0032b_single (benchmark::Bench& bench)
91194{
92195 uint8_t hash[CSHA256::OUTPUT_SIZE];
@@ -142,7 +245,6 @@ static void HASH_DSHA256_2048b_single(benchmark::Bench& bench)
142245}
143246
144247/* Hash different number of bytes via X11 */
145-
146248static void HASH_X11_0032b_single (benchmark::Bench& bench)
147249{
148250 uint256 hash;
@@ -197,105 +299,7 @@ static void HASH_X11_2048b_single(benchmark::Bench& bench)
197299 });
198300}
199301
200- /* Hash 32 bytes via SHA and SipHash */
201-
202- static void HASH_SHA256_32b (benchmark::Bench& bench)
203- {
204- std::vector<uint8_t > in (32 ,0 );
205- bench.run ([&] {
206- CSHA256 ()
207- .Write (in.data (), in.size ())
208- .Finalize (in.data ());
209- });
210- }
211-
212- static void HASH_SipHash_32b (benchmark::Bench& bench)
213- {
214- uint256 x;
215- uint64_t k1 = 0 ;
216- bench.run ([&] {
217- *((uint64_t *)x.begin ()) = SipHashUint256 (0 , ++k1, x);
218- });
219- }
220-
221- /* Hash 1024 blobs 64 bytes each via DSHA256 */
222-
223- static void HASH_SHA256D64_1024 (benchmark::Bench& bench)
224- {
225- std::vector<uint8_t > in (64 * 1024 , 0 );
226- bench.minEpochIterations (1000 ).run ([&] {
227- SHA256D64 (in.data (), in.data (), 1024 );
228- });
229- }
230-
231- /* FastRandom for uint32_t and bool */
232-
233- static void FastRandom_32bit (benchmark::Bench& bench)
234- {
235- FastRandomContext rng (true );
236- bench.run ([&] {
237- rng.rand32 ();
238- });
239- }
240-
241- static void FastRandom_1bit (benchmark::Bench& bench)
242- {
243- FastRandomContext rng (true );
244- bench.run ([&] {
245- rng.randbool ();
246- });
247- }
248-
249- static void MuHash (benchmark::Bench& bench)
250- {
251- MuHash3072 acc;
252- unsigned char key[32 ] = {0 };
253- uint32_t i = 0 ;
254- bench.run ([&] {
255- key[0 ] = ++i & 0xFF ;
256- acc *= MuHash3072 (key);
257- });
258- }
259-
260- static void MuHashMul (benchmark::Bench& bench)
261- {
262- MuHash3072 acc;
263- FastRandomContext rng (true );
264- MuHash3072 muhash{rng.randbytes (32 )};
265-
266- bench.run ([&] {
267- acc *= muhash;
268- });
269- }
270-
271- static void MuHashDiv (benchmark::Bench& bench)
272- {
273- MuHash3072 acc;
274- FastRandomContext rng (true );
275- MuHash3072 muhash{rng.randbytes (32 )};
276-
277- bench.run ([&] {
278- acc /= muhash;
279- });
280- }
281-
282- static void MuHashPrecompute (benchmark::Bench& bench)
283- {
284- MuHash3072 acc;
285- FastRandomContext rng (true );
286- std::vector<unsigned char > key{rng.randbytes (32 )};
287-
288- bench.run ([&] {
289- MuHash3072{key};
290- });
291- }
292-
293302BENCHMARK (HASH_1MB_DSHA256);
294- BENCHMARK (HASH_1MB_RIPEMD160);
295- BENCHMARK (HASH_1MB_SHA1);
296- BENCHMARK (HASH_1MB_SHA256);
297- BENCHMARK (HASH_1MB_SHA512);
298- BENCHMARK (HASH_1MB_SHA3_256);
299303BENCHMARK (HASH_1MB_X11);
300304
301305BENCHMARK (HASH_DSHA256_0032b_single);
@@ -304,22 +308,10 @@ BENCHMARK(HASH_DSHA256_0128b_single);
304308BENCHMARK (HASH_DSHA256_0512b_single);
305309BENCHMARK (HASH_DSHA256_1024b_single);
306310BENCHMARK (HASH_DSHA256_2048b_single);
311+
307312BENCHMARK (HASH_X11_0032b_single);
308313BENCHMARK (HASH_X11_0080b_single);
309314BENCHMARK (HASH_X11_0128b_single);
310315BENCHMARK (HASH_X11_0512b_single);
311316BENCHMARK (HASH_X11_1024b_single);
312317BENCHMARK (HASH_X11_2048b_single);
313-
314- BENCHMARK (HASH_SHA256_32b);
315- BENCHMARK (HASH_SipHash_32b);
316-
317- BENCHMARK (HASH_SHA256D64_1024);
318-
319- BENCHMARK (FastRandom_32bit);
320- BENCHMARK (FastRandom_1bit);
321-
322- BENCHMARK (MuHash);
323- BENCHMARK (MuHashMul);
324- BENCHMARK (MuHashDiv);
325- BENCHMARK (MuHashPrecompute);
0 commit comments