You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
53: switch gen_biguint to fill_bytes r=cuviper a=TheIronBorn
Changes `gen_biguint` from a `push(gen::<u32>)` method to rand's [`fill_bytes`](https://docs.rs/rand/0.5.0/rand/trait.RngCore.html#tymethod.fill_bytes). This should improve performance in most cases.
- For small PRNGs which only natively generate 64 bits (like Xorshift64 or [`splitmix64.c`](http://prng.di.unimi.it/splitmix64.c)), this will no longer throw away half the bits generated.
- For block PRNGs like `StdRng`, this should reduce overhead.
- For an SIMD PRNG (rust-random/rand#377), this would be a significant improvement.
```diff,ignore
name no_fill ns/iter fill ns/iter diff ns/iter diff % speedup
+rand_1009 256 222 -34 -13.28% x 1.15
+rand_131072 27,366 14,715 -12,651 -46.23% x 1.86
+rand_2048 459 357 -102 -22.22% x 1.29
-rand_256 93 130 37 39.78% x 0.72
+rand_4096 842 557 -285 -33.85% x 1.51
-rand_64 69 92 23 33.33% x 0.75
+rand_65536 13,625 7,382 -6,243 -45.82% x 1.85
+rand_8192 1,836 869 -967 -52.67% x 2.11
```
(i.e. `rand_1009` does `gen_biguint(1009)`. All benches are powers of two except `rand_1009`)
(Let me know if you want the `rand_` benches added)
Co-authored-by: TheIronBorn <>
Co-authored-by: Josh Stone <cuviper@gmail.com>
0 commit comments