Commit a5b6a9f
authored
Auto merge of #37312 - arthurprs:sip-smaller, r=alexcrichton
Small improvement to SipHasher
Very small but constant improvement, the objective is to lower latency for u16, u32 and small strings.
CC #35735
```
➜ siphash-bench git:(master) ✗ sudo nice -n -20 target/release/foo-648738a54f390643 --bench | tee benches.txt
[sudo] password for arthurprs:
running 62 tests
test _same ... bench: 0 ns/iter (+/- 0)
test _warmup ... bench: 0 ns/iter (+/- 0)
test rust_siphash13::int_u16 ... bench: 12 ns/iter (+/- 1)
test rust_siphash13::int_u32 ... bench: 14 ns/iter (+/- 0)
test rust_siphash13::int_u64 ... bench: 11 ns/iter (+/- 1)
test rust_siphash13::int_u8 ... bench: 11 ns/iter (+/- 1)
test rust_siphash13::slice::_10 ... bench: 18 ns/iter (+/- 1)
test rust_siphash13::slice::_100 ... bench: 42 ns/iter (+/- 2)
test rust_siphash13::slice::_11 ... bench: 19 ns/iter (+/- 1)
test rust_siphash13::slice::_12 ... bench: 21 ns/iter (+/- 3)
test rust_siphash13::slice::_2 ... bench: 16 ns/iter (+/- 2)
test rust_siphash13::slice::_200 ... bench: 68 ns/iter (+/- 3)
test rust_siphash13::slice::_3 ... bench: 17 ns/iter (+/- 3)
test rust_siphash13::slice::_4 ... bench: 18 ns/iter (+/- 1)
test rust_siphash13::slice::_5 ... bench: 19 ns/iter (+/- 4)
test rust_siphash13::slice::_6 ... bench: 19 ns/iter (+/- 1)
test rust_siphash13::slice::_7 ... bench: 20 ns/iter (+/- 1)
test rust_siphash13::slice::_8 ... bench: 16 ns/iter (+/- 1)
test rust_siphash13::slice::_9 ... bench: 18 ns/iter (+/- 2)
test rust_siphash13::str_::_10 ... bench: 18 ns/iter (+/- 1)
test rust_siphash13::str_::_100 ... bench: 41 ns/iter (+/- 2)
test rust_siphash13::str_::_11 ... bench: 19 ns/iter (+/- 1)
test rust_siphash13::str_::_12 ... bench: 20 ns/iter (+/- 2)
test rust_siphash13::str_::_2 ... bench: 16 ns/iter (+/- 1)
test rust_siphash13::str_::_200 ... bench: 68 ns/iter (+/- 3)
test rust_siphash13::str_::_3 ... bench: 17 ns/iter (+/- 1)
test rust_siphash13::str_::_4 ... bench: 18 ns/iter (+/- 2)
test rust_siphash13::str_::_5 ... bench: 19 ns/iter (+/- 6)
test rust_siphash13::str_::_6 ... bench: 20 ns/iter (+/- 5)
test rust_siphash13::str_::_7 ... bench: 23 ns/iter (+/- 1)
test rust_siphash13::str_::_8 ... bench: 15 ns/iter (+/- 1)
test rust_siphash13::str_::_9 ... bench: 17 ns/iter (+/- 1)
test sip1b::int_u16 ... bench: 10 ns/iter (+/- 1)
test sip1b::int_u32 ... bench: 9 ns/iter (+/- 1)
test sip1b::int_u64 ... bench: 12 ns/iter (+/- 1)
test sip1b::int_u8 ... bench: 7 ns/iter (+/- 0)
test sip1b::slice::_10 ... bench: 12 ns/iter (+/- 1)
test sip1b::slice::_100 ... bench: 33 ns/iter (+/- 2)
test sip1b::slice::_11 ... bench: 13 ns/iter (+/- 0)
test sip1b::slice::_12 ... bench: 12 ns/iter (+/- 1)
test sip1b::slice::_2 ... bench: 10 ns/iter (+/- 0)
test sip1b::slice::_200 ... bench: 62 ns/iter (+/- 2)
test sip1b::slice::_3 ... bench: 10 ns/iter (+/- 1)
test sip1b::slice::_4 ... bench: 9 ns/iter (+/- 0)
test sip1b::slice::_5 ... bench: 10 ns/iter (+/- 1)
test sip1b::slice::_6 ... bench: 10 ns/iter (+/- 0)
test sip1b::slice::_7 ... bench: 11 ns/iter (+/- 0)
test sip1b::slice::_8 ... bench: 11 ns/iter (+/- 1)
test sip1b::slice::_9 ... bench: 12 ns/iter (+/- 1)
test sip1b::str_::_10 ... bench: 15 ns/iter (+/- 1)
test sip1b::str_::_100 ... bench: 37 ns/iter (+/- 3)
test sip1b::str_::_11 ... bench: 16 ns/iter (+/- 1)
test sip1b::str_::_12 ... bench: 14 ns/iter (+/- 1)
test sip1b::str_::_2 ... bench: 13 ns/iter (+/- 1)
test sip1b::str_::_200 ... bench: 67 ns/iter (+/- 5)
test sip1b::str_::_3 ... bench: 14 ns/iter (+/- 2)
test sip1b::str_::_4 ... bench: 12 ns/iter (+/- 1)
test sip1b::str_::_5 ... bench: 13 ns/iter (+/- 1)
test sip1b::str_::_6 ... bench: 13 ns/iter (+/- 0)
test sip1b::str_::_7 ... bench: 16 ns/iter (+/- 1)
test sip1b::str_::_8 ... bench: 14 ns/iter (+/- 1)
test sip1b::str_::_9 ... bench: 15 ns/iter (+/- 1)
test result: ok. 0 passed; 0 failed; 0 ignored; 62 measured
➜ siphash-bench git:(master) ✗ cargo benchcmp rust_siphash13:: sip1b:: benches.txt
name rust_siphash13:: ns/iter sip1b:: ns/iter diff ns/iter diff %
int_u16 12 10 -2 -16.67%
int_u32 14 9 -5 -35.71%
int_u64 11 12 1 9.09%
int_u8 11 7 -4 -36.36%
slice::_10 18 12 -6 -33.33%
slice::_100 42 33 -9 -21.43%
slice::_11 19 13 -6 -31.58%
slice::_12 21 12 -9 -42.86%
slice::_2 16 10 -6 -37.50%
slice::_200 68 62 -6 -8.82%
slice::_3 17 10 -7 -41.18%
slice::_4 18 9 -9 -50.00%
slice::_5 19 10 -9 -47.37%
slice::_6 19 10 -9 -47.37%
slice::_7 20 11 -9 -45.00%
slice::_8 16 11 -5 -31.25%
slice::_9 18 12 -6 -33.33%
str_::_10 18 15 -3 -16.67%
str_::_100 41 37 -4 -9.76%
str_::_11 19 16 -3 -15.79%
str_::_12 20 14 -6 -30.00%
str_::_2 16 13 -3 -18.75%
str_::_200 68 67 -1 -1.47%
str_::_3 17 14 -3 -17.65%
str_::_4 18 12 -6 -33.33%
str_::_5 19 13 -6 -31.58%
str_::_6 20 13 -7 -35.00%
str_::_7 23 16 -7 -30.43%
str_::_8 15 14 -1 -6.67%
str_::_9 17 15 -2 -11.76%
```
from a modified hash-rs suite (preallocating maps and adding having slice/str variants)
graph version: http://imgur.com/a/DuoI4
```
➜ hash-rs git:(rfc-extend-hasher) ✗ cargo benchcmp sip13:: sip13opt:: benches.txt
name sip13:: ns/iter sip13opt:: ns/iter diff ns/iter diff %
slice::mapcountdense_000000001 27,343 (36 MB/s) 26,401 (37 MB/s) -942 -3.45%
slice::mapcountdense_000000002 28,982 (69 MB/s) 26,807 (74 MB/s) -2,175 -7.50%
slice::mapcountdense_000000003 29,304 (102 MB/s) 27,360 (109 MB/s) -1,944 -6.63%
slice::mapcountdense_000000004 30,411 (131 MB/s) 25,888 (154 MB/s) -4,523 -14.87%
slice::mapcountdense_000000005 32,625 (153 MB/s) 27,486 (181 MB/s) -5,139 -15.75%
slice::mapcountdense_000000006 34,920 (171 MB/s) 27,204 (220 MB/s) -7,716 -22.10%
slice::mapcountdense_000000007 33,497 (208 MB/s) 28,330 (247 MB/s) -5,167 -15.43%
slice::mapcountdense_000000008 31,153 (256 MB/s) 28,617 (279 MB/s) -2,536 -8.14%
slice::mapcountdense_000000009 30,745 (292 MB/s) 29,666 (303 MB/s) -1,079 -3.51%
slice::mapcountdense_000000010 31,509 (317 MB/s) 29,804 (335 MB/s) -1,705 -5.41%
slice::mapcountdense_000000011 32,526 (338 MB/s) 30,520 (360 MB/s) -2,006 -6.17%
slice::mapcountdense_000000012 32,981 (363 MB/s) 28,739 (417 MB/s) -4,242 -12.86%
slice::mapcountdense_000000013 34,713 (374 MB/s) 30,348 (428 MB/s) -4,365 -12.57%
slice::mapcountdense_000000014 34,635 (404 MB/s) 29,974 (467 MB/s) -4,661 -13.46%
slice::mapcountdense_000000015 35,924 (417 MB/s) 30,584 (490 MB/s) -5,340 -14.86%
slice::mapcountdense_000000016 31,939 (500 MB/s) 30,564 (523 MB/s) -1,375 -4.31%
slice::mapcountdense_000000032 36,545 (875 MB/s) 34,833 (918 MB/s) -1,712 -4.68%
slice::mapcountdense_000000064 44,691 (1432 MB/s) 43,912 (1457 MB/s) -779 -1.74%
slice::mapcountdense_000000128 67,210 (1904 MB/s) 64,630 (1980 MB/s) -2,580 -3.84%
slice::mapcountdense_000000256 110,320 (2320 MB/s) 108,713 (2354 MB/s) -1,607 -1.46%
slice::mapcountsparse_000000001 29,686 (33 MB/s) 28,673 (34 MB/s) -1,013 -3.41%
slice::mapcountsparse_000000002 32,073 (62 MB/s) 30,519 (65 MB/s) -1,554 -4.85%
slice::mapcountsparse_000000003 33,184 (90 MB/s) 31,208 (96 MB/s) -1,976 -5.95%
slice::mapcountsparse_000000004 34,344 (116 MB/s) 30,242 (132 MB/s) -4,102 -11.94%
slice::mapcountsparse_000000005 34,536 (144 MB/s) 30,552 (163 MB/s) -3,984 -11.54%
slice::mapcountsparse_000000006 35,791 (167 MB/s) 30,813 (194 MB/s) -4,978 -13.91%
slice::mapcountsparse_000000007 36,773 (190 MB/s) 31,362 (223 MB/s) -5,411 -14.71%
slice::mapcountsparse_000000008 33,101 (241 MB/s) 32,399 (246 MB/s) -702 -2.12%
slice::mapcountsparse_000000009 34,025 (264 MB/s) 33,065 (272 MB/s) -960 -2.82%
slice::mapcountsparse_000000010 34,755 (287 MB/s) 33,152 (301 MB/s) -1,603 -4.61%
slice::mapcountsparse_000000011 35,682 (308 MB/s) 33,631 (327 MB/s) -2,051 -5.75%
slice::mapcountsparse_000000012 36,422 (329 MB/s) 32,604 (368 MB/s) -3,818 -10.48%
slice::mapcountsparse_000000013 37,561 (346 MB/s) 32,978 (394 MB/s) -4,583 -12.20%
slice::mapcountsparse_000000014 38,476 (363 MB/s) 33,376 (419 MB/s) -5,100 -13.26%
slice::mapcountsparse_000000015 39,202 (382 MB/s) 33,750 (444 MB/s) -5,452 -13.91%
slice::mapcountsparse_000000016 34,898 (458 MB/s) 33,621 (475 MB/s) -1,277 -3.66%
slice::mapcountsparse_000000032 39,767 (804 MB/s) 38,013 (841 MB/s) -1,754 -4.41%
slice::mapcountsparse_000000064 47,810 (1338 MB/s) 46,332 (1381 MB/s) -1,478 -3.09%
slice::mapcountsparse_000000128 64,519 (1983 MB/s) 63,322 (2021 MB/s) -1,197 -1.86%
slice::mapcountsparse_000000256 101,042 (2533 MB/s) 99,754 (2566 MB/s) -1,288 -1.27%
str_::mapcountdense_000000001 27,183 (36 MB/s) 24,007 (41 MB/s) -3,176 -11.68%
str_::mapcountdense_000000002 28,940 (69 MB/s) 24,574 (81 MB/s) -4,366 -15.09%
str_::mapcountdense_000000003 29,000 (103 MB/s) 24,687 (121 MB/s) -4,313 -14.87%
str_::mapcountdense_000000004 29,822 (134 MB/s) 24,377 (164 MB/s) -5,445 -18.26%
str_::mapcountdense_000000005 31,962 (156 MB/s) 25,184 (198 MB/s) -6,778 -21.21%
str_::mapcountdense_000000006 32,218 (186 MB/s) 25,020 (239 MB/s) -7,198 -22.34%
str_::mapcountdense_000000007 35,482 (197 MB/s) 27,705 (252 MB/s) -7,777 -21.92%
str_::mapcountdense_000000008 28,643 (279 MB/s) 25,563 (312 MB/s) -3,080 -10.75%
str_::mapcountdense_000000009 30,112 (298 MB/s) 26,773 (336 MB/s) -3,339 -11.09%
str_::mapcountdense_000000010 31,554 (316 MB/s) 27,607 (362 MB/s) -3,947 -12.51%
str_::mapcountdense_000000011 32,062 (343 MB/s) 27,770 (396 MB/s) -4,292 -13.39%
str_::mapcountdense_000000012 32,258 (372 MB/s) 25,612 (468 MB/s) -6,646 -20.60%
str_::mapcountdense_000000013 33,544 (387 MB/s) 26,908 (483 MB/s) -6,636 -19.78%
str_::mapcountdense_000000014 34,681 (403 MB/s) 27,267 (513 MB/s) -7,414 -21.38%
str_::mapcountdense_000000015 37,883 (395 MB/s) 30,226 (496 MB/s) -7,657 -20.21%
str_::mapcountdense_000000016 30,299 (528 MB/s) 27,960 (572 MB/s) -2,339 -7.72%
str_::mapcountdense_000000032 34,372 (930 MB/s) 32,736 (977 MB/s) -1,636 -4.76%
str_::mapcountdense_000000048 38,610 (1243 MB/s) 36,437 (1317 MB/s) -2,173 -5.63%
str_::mapcountdense_000000064 43,052 (1486 MB/s) 41,269 (1550 MB/s) -1,783 -4.14%
str_::mapcountdense_000000128 64,059 (1998 MB/s) 62,007 (2064 MB/s) -2,052 -3.20%
str_::mapcountdense_000000256 109,608 (2335 MB/s) 107,184 (2388 MB/s) -2,424 -2.21%
str_::mapcountsparse_000000001 29,155 (34 MB/s) 26,151 (38 MB/s) -3,004 -10.30%
str_::mapcountsparse_000000002 31,536 (63 MB/s) 27,787 (71 MB/s) -3,749 -11.89%
str_::mapcountsparse_000000003 32,524 (92 MB/s) 27,861 (107 MB/s) -4,663 -14.34%
str_::mapcountsparse_000000004 33,535 (119 MB/s) 27,585 (145 MB/s) -5,950 -17.74%
str_::mapcountsparse_000000005 34,239 (146 MB/s) 27,520 (181 MB/s) -6,719 -19.62%
str_::mapcountsparse_000000006 35,485 (169 MB/s) 27,437 (218 MB/s) -8,048 -22.68%
str_::mapcountsparse_000000007 39,098 (179 MB/s) 30,465 (229 MB/s) -8,633 -22.08%
str_::mapcountsparse_000000008 30,882 (259 MB/s) 29,215 (273 MB/s) -1,667 -5.40%
str_::mapcountsparse_000000009 33,375 (269 MB/s) 29,301 (307 MB/s) -4,074 -12.21%
str_::mapcountsparse_000000010 33,531 (298 MB/s) 29,008 (344 MB/s) -4,523 -13.49%
str_::mapcountsparse_000000011 34,607 (317 MB/s) 29,800 (369 MB/s) -4,807 -13.89%
str_::mapcountsparse_000000012 35,700 (336 MB/s) 28,380 (422 MB/s) -7,320 -20.50%
str_::mapcountsparse_000000013 36,692 (354 MB/s) 29,350 (442 MB/s) -7,342 -20.01%
str_::mapcountsparse_000000014 37,326 (375 MB/s) 29,285 (478 MB/s) -8,041 -21.54%
str_::mapcountsparse_000000015 41,098 (364 MB/s) 33,073 (453 MB/s) -8,025 -19.53%
str_::mapcountsparse_000000016 33,046 (484 MB/s) 30,717 (520 MB/s) -2,329 -7.05%
str_::mapcountsparse_000000032 37,471 (853 MB/s) 35,542 (900 MB/s) -1,929 -5.15%
str_::mapcountsparse_000000048 41,324 (1161 MB/s) 39,332 (1220 MB/s) -1,992 -4.82%
str_::mapcountsparse_000000064 45,858 (1395 MB/s) 43,802 (1461 MB/s) -2,056 -4.48%
str_::mapcountsparse_000000128 62,471 (2048 MB/s) 60,683 (2109 MB/s) -1,788 -2.86%
str_::mapcountsparse_000000256 101,283 (2527 MB/s) 97,655 (2621 MB/s) -3,628 -3.58%
```2 files changed
+118
-50
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
| 18 | + | |
17 | 19 | | |
18 | 20 | | |
19 | 21 | | |
| |||
78 | 80 | | |
79 | 81 | | |
80 | 82 | | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | 83 | | |
121 | 84 | | |
122 | 85 | | |
| |||
132 | 95 | | |
133 | 96 | | |
134 | 97 | | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
135 | 139 | | |
136 | 140 | | |
137 | 141 | | |
| |||
220 | 224 | | |
221 | 225 | | |
222 | 226 | | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
223 | 258 | | |
224 | 259 | | |
225 | 260 | | |
| |||
262 | 297 | | |
263 | 298 | | |
264 | 299 | | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
265 | 315 | | |
266 | 316 | | |
267 | 317 | | |
| |||
271 | 321 | | |
272 | 322 | | |
273 | 323 | | |
| 324 | + | |
274 | 325 | | |
275 | | - | |
276 | 326 | | |
277 | 327 | | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
278 | 333 | | |
279 | | - | |
280 | | - | |
281 | | - | |
282 | | - | |
283 | | - | |
284 | | - | |
285 | | - | |
286 | | - | |
287 | 334 | | |
288 | 335 | | |
289 | 336 | | |
| |||
292 | 339 | | |
293 | 340 | | |
294 | 341 | | |
295 | | - | |
| 342 | + | |
296 | 343 | | |
297 | 344 | | |
298 | 345 | | |
| |||
301 | 348 | | |
302 | 349 | | |
303 | 350 | | |
304 | | - | |
| 351 | + | |
305 | 352 | | |
306 | 353 | | |
307 | 354 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| |||
327 | 328 | | |
328 | 329 | | |
329 | 330 | | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
330 | 351 | | |
331 | 352 | | |
332 | 353 | | |
| |||
0 commit comments