diff --git a/README.md b/README.md index ce0695f..1c096a4 100644 --- a/README.md +++ b/README.md @@ -95,75 +95,75 @@ Results on Intel Core i5-7300HQ: (with AVX2) ``` Time (s) PRNG -0.08816869 simd_rand::specific::avx2::xoshiro256plusplus::Xoshiro256PlusPlusX4 -0.08920241 simd_rand::portable::xoshiro256plusplusx4::Xoshiro256PlusPlusX4 -0.0916341 simd_rand::portable::xoshiro256plusx4::Xoshiro256PlusX4 -0.091638505 frand::Rand -0.09203979 simd_rand::portable::xoshiro256plusx8::Xoshiro256PlusX8 -0.09215377 simd_rand::specific::avx2::xoshiro256plus::Xoshiro256PlusX4 -0.10456483 fast_rands::RomuDuoJrRand -0.10739412 romu::Rng -0.10897199 fast_rands::RomuTrioRand -0.11360018 simd_rand::specific::avx2::shishua::Shishua<32768> -0.12551166 rand_xoshiro::xoshiro256plus::Xoshiro256Plus -0.12791388 simd_rand::portable::xoshiro256plusplusx8::Xoshiro256PlusPlusX8 -0.13942851 rand_xoshiro::xoshiro256starstar::Xoshiro256StarStar -0.14631735 rand_xoshiro::xoroshiro128plus::Xoroshiro128Plus -0.14701757 fast_rands::Xoshiro256PlusPlusRand -0.14716452 rand_xoshiro::xoshiro256plusplus::Xoshiro256PlusPlus -0.16382654 tinyrand::wyrand::Wyrand -0.16435602 shishua::core::ShiShuAState -0.16689982 wyrand::final_v4_2::wyrand::WyRand -0.16744553 fastrand::Rng -0.16864042 rand_xoshiro::xoroshiro128starstar::Xoroshiro128StarStar -0.16963984 wyhash::final3::traits::WyRng -0.17015934 wyhash::v1::traits::WyRng -0.17045826 rand::rngs::small::SmallRng -0.1716554 rand_xoshiro::xoroshiro128plusplus::Xoroshiro128PlusPlus -0.17414004 tinyrand::xorshift::Xorshift -0.17646453 fast_rands::Sfc64Rand -0.18034014 rand_xoshiro::splitmix64::SplitMix64 -0.18191795 tiny_prng::xorshift::Xorshift1024star -0.19055116 tiny_prng::xorshift::Xorshift128 -0.1933505 rand_xoshiro::xoshiro512plus::Xoshiro512Plus -0.2013804 tiny_prng::pcg::PcgXslRrMcg -0.2033752 rand_xoshiro::xoshiro512starstar::Xoshiro512StarStar -0.2053617 mcg59::MCG59 -0.20707493 fast_rands::Lehmer64Rand -0.21336877 rand_xoshiro::xoshiro512plusplus::Xoshiro512PlusPlus -0.22039062 tinyrand::splitmix::SplitMix -0.23350179 tiny_prng::pcg::PcgXslRr -0.23514548 bsd4random::BSD -0.23781174 fast_rands::XorShift64Rand -0.23798868 tiny_prng::xorshift::Xorshift64 -0.23917288 tiny_prng::xorshift::Xorshift64star -0.24470972 rand_xoshiro::xoshiro128plus::Xoshiro128Plus -0.2509169 tiny_prng::pcg::PcgXslRr6432Mcg -0.29076266 rand_xoshiro::xoshiro128starstar::Xoshiro128StarStar -0.3070184 rand_xoshiro::xoshiro128plusplus::Xoshiro128PlusPlus -0.31972992 aes_prng::AesRng -0.32094362 tiny_prng::pcg::PcgXshRs6432 -0.3234704 prng_mt::mt19937::MT19937_64 -0.33205837 tiny_prng::pcg::PcgXshRr6432 -0.3321641 rand_xoshiro::xoroshiro64star::Xoroshiro64Star -0.37840256 rand_xoshiro::xoroshiro64starstar::Xoroshiro64StarStar -0.42188576 quad_rand::RandGenerator -0.45290765 rand::rngs::std::StdRng -0.46695596 tiny_prng::xorshift::Xorshift32 -0.47651544 prng_mt::mt19937::MT19937 -0.47986245 nanorand::rand::wyrand::WyRand -0.5589406 tiny_prng::mt64::Mt19937 -0.6100908 nanorand::rand::pcg64::Pcg64 -1.146011 nanorand::rand::chacha::ChaCha<8> -1.442915 tiny_prng::mt::Mt19937 -1.7194357 shishua::rand::ShiShuARng -3.682478 acorn_prng::Acorn -15.616315 simplerand::Random +0.08826336 frand::Rand +0.0886573 simd_rand::specific::avx2::xoshiro256plusplus::Xoshiro256PlusPlusX4 +0.08876129 simd_rand::portable::xoshiro256plusplusx4::Xoshiro256PlusPlusX4 +0.089277595 simd_rand::portable::xoshiro256plusx4::Xoshiro256PlusX4 +0.09128572 simd_rand::specific::avx2::xoshiro256plus::Xoshiro256PlusX4 +0.09481453 simd_rand::portable::xoshiro256plusx8::Xoshiro256PlusX8 +0.10730715 fast_rands::RomuDuoJrRand +0.10897806 fast_rands::RomuTrioRand +0.10994133 simd_rand::specific::avx2::shishua::Shishua<32768> +0.11030309 romu::Rng +0.122153305 simd_rand::portable::xoshiro256plusplusx8::Xoshiro256PlusPlusX8 +0.12979501 rand_xoshiro::xoshiro256plus::Xoshiro256Plus +0.13618393 rand_xoshiro::xoshiro256starstar::Xoshiro256StarStar +0.14781812 rand_xoshiro::xoroshiro128plus::Xoroshiro128Plus +0.15827414 fast_rands::Xoshiro256PlusPlusRand +0.15854521 rand_xoshiro::xoshiro256plusplus::Xoshiro256PlusPlus +0.1587491 rand::rngs::small::SmallRng +0.16304855 shishua::core::ShiShuAState +0.1643057 rand_xoshiro::xoroshiro128plusplus::Xoroshiro128PlusPlus +0.16563393 tinyrand::wyrand::Wyrand +0.1673208 fastrand::Rng +0.16902256 wyhash::v1::traits::WyRng +0.16907188 wyrand::final_v4_2::wyrand::WyRand +0.16940956 wyhash::final3::traits::WyRng +0.17095926 rand_xoshiro::xoroshiro128starstar::Xoroshiro128StarStar +0.17670166 fast_rands::Sfc64Rand +0.17687643 tinyrand::xorshift::Xorshift +0.18041892 rand_xoshiro::splitmix64::SplitMix64 +0.18187234 tiny_prng::xorshift::Xorshift1024star +0.18540086 tiny_prng::pcg::PcgXslRrMcg +0.18792455 tiny_prng::xorshift::Xorshift128 +0.19410424 rand_xoshiro::xoshiro512plus::Xoshiro512Plus +0.20391174 fast_rands::Lehmer64Rand +0.2041288 mcg59::MCG59 +0.21445897 rand_xoshiro::xoshiro512plusplus::Xoshiro512PlusPlus +0.21997462 tinyrand::splitmix::SplitMix +0.22679603 rand_xoshiro::xoshiro512starstar::Xoshiro512StarStar +0.23136179 bsd4random::BSD +0.23638329 fast_rands::XorShift64Rand +0.23744445 tiny_prng::pcg::PcgXslRr +0.23768099 tiny_prng::xorshift::Xorshift64star +0.23874637 tiny_prng::xorshift::Xorshift64 +0.2519162 tiny_prng::pcg::PcgXslRr6432Mcg +0.2522125 rand_xoshiro::xoshiro128plus::Xoshiro128Plus +0.26618654 rand_xoshiro::xoshiro128starstar::Xoshiro128StarStar +0.31676543 rand_xoshiro::xoshiro128plusplus::Xoshiro128PlusPlus +0.32150853 tiny_prng::pcg::PcgXshRs6432 +0.3222107 prng_mt::mt19937::MT19937_64 +0.3227826 aes_prng::AesRng +0.32352522 rand_xoshiro::xoroshiro64star::Xoroshiro64Star +0.3316228 tiny_prng::pcg::PcgXshRr6432 +0.3506137 rand_xoshiro::xoroshiro64starstar::Xoroshiro64StarStar +0.42379355 nanorand::rand::wyrand::WyRand +0.42504936 quad_rand::RandGenerator +0.46230927 rand::rngs::std::StdRng +0.4671986 tiny_prng::xorshift::Xorshift32 +0.5528513 tiny_prng::mt64::Mt19937 +0.6312231 prng_mt::mt19937::MT19937 +0.6692442 nanorand::rand::pcg64::Pcg64 +1.2569348 nanorand::rand::chacha::ChaCha<8> +1.4407393 tiny_prng::mt::Mt19937 +2.0606635 shishua::rand::ShiShuARng +3.7855747 acorn_prng::Acorn +15.568359 simplerand::Random ``` -[FRand](https://crates.io/crates/frand) is the fastest, however it has no particular mathematical justification beyond the fact its parameters were found empirically to minimize bias. +[FRand](https://crates.io/crates/frand) is among the fastest, however it has no particular mathematical justification beyond the fact its parameters were found empirically to minimize bias. -[simd_rand](https://github.com/martinothamar/simd-rand) provides the fastest implementations of common PRNGs. The best on my computer (without AVX512) was a portable one, probably thanks to compiler autovectorization. Sadly this crate is not published on crates.io, only on GitHub. +[simd_rand](https://crates.io/crates/simd_rand) provides the fastest implementations of common PRNGs, both portable and SIMD-specific. [fast_rands](https://crates.io/crates/fast_rands) implements RomuDuoJr, the fastest after `simd_rand`. It is part of the Romu family which [has been studied](https://arxiv.org/pdf/2002.11331). It provides good quality up to at least 2^48 bytes. However this crate has too many dependencies that should not be necessary if you only want a PRNG, so copying the wanted functions can be an option.