std rand random talk
play

std::rand::random::<Talk>() Huon Wilson December 18, 2014 - PowerPoint PPT Presentation

std::rand::random::<Talk>() Huon Wilson December 18, 2014 http://huonw.github.io/rand-dec14 Digital Randomness Digital Randomness A sequence of bits, e.g. 3 11011110 11111000 01001010 00111100 . . . , Digital Randomness A sequence


  1. std::rand::random::<Talk>() Huon Wilson December 18, 2014 http://huonw.github.io/rand-dec14 

  2. Digital Randomness

  3. Digital Randomness A sequence of bits, e.g. 3 11011110 11111000 01001010 00111100 . . . ,

  4. Digital Randomness A sequence of bits, e.g. Usually generated/consumed in chunks. 3 11011110 11111000 01001010 00111100 . . . , � �� � � �� � � �� � � �� � 222 248 74 60

  5. Why?

  6. Why? Lots of uses for randomness: All want “high quality” random numbers. 5 ▶ simulations: scientifjc, testing ▶ games: shuffming cards, collecting loot ▶ security: keys, session IDs

  7. What is quality?

  8. What is quality? It depends! Usually: guessed base on the value of others 7 ▶ uniformity: every bit has 50 % chance of being 0 or 1 ▶ unpredictability: the value of a bit can’t be

  9. How can a deterministic machine be random?

  10. How can a deterministic machine be random? Conventional computer RNGs follow patterns. initial seed … random number random number update update The seed controls which pattern. 9 state 0 state 1 state 2

  11. How can a deterministic machine be random? Compute the seed (or state), and you know the full stream. RNGs for cryptography need to ensure the seed/state is hard to compute. (Or be true random number generators, e.g. measure nuclear decay.) Bad: XorShift. Good: ChaCha. 10

  12. Rust

  13. Rust Thread-safety (by default)

  14. Rust Thread-safety Often a pervasive use of a single global RNG. Languages like C, R, Julia (recently improved in e.g. JuliaLang/julia#8832  ). Automatically guaranteed this isn’t a problem in Rust! 13

  15. Rust SIMD: dSFMT

  16. Rust r->si = v; https://github.com/Grieverheart/dsfmt-rs  *u = y; *r = v; let v = (y >> SSE2_SR) ^ (y & SSE2_PARAMS_MASK) ^ a; let y = (a << SSE2_SL) ^ b ^ y; // ... http://www.math.sci.hiroshima-u.ac.jp/~ m-mat/MT/SFMT/  u->si = y; 15 SIMD: dSFMT x = a->si; // ... __m128i v, w, x, y, z; z = _mm_slli_epi64(x, DSFMT_SL1); z = _mm_xor_si128(z, b->si); y = _mm_xor_si128(y, z); v = _mm_srli_epi64(y, DSFMT_SR); w = _mm_and_si128(y, sse2_param_mask.i128); v = _mm_xor_si128(v, x); v = _mm_xor_si128(v, w);

  17. Rust r->si = v; https://github.com/Grieverheart/dsfmt-rs  *u = y; *r = v; let v = (y >> SSE2_SR) ^ (y & SSE2_PARAMS_MASK) ^ a; let y = (a << SSE2_SL) ^ b ^ y; // ... http://www.math.sci.hiroshima-u.ac.jp/~ m-mat/MT/SFMT/  u->si = y; 15 SIMD: dSFMT x = a->si; // ... __m128i v, w, x, y, z; z = _mm_slli_epi64(x, DSFMT_SL1); z = _mm_xor_si128(z, b->si); y = _mm_xor_si128(y, z); v = _mm_srli_epi64(y, DSFMT_SR); w = _mm_and_si128(y, sse2_param_mask.i128); v = _mm_xor_si128(v, x); v = _mm_xor_si128(v, w);

  18. Rust SIMD: dSFMT Creates essentially the same ASM. Benchmark: let mut rng: dsfmt::DSFMTRng = SeedableRng::from_seed(12345 u32 ); let mut sum = 0_ f64 ; for _ in range(0 u32 , 1_000_000_000) { } println!("{}", sum) C 500014293.513722 User time: 1.86s Rust 500014293.513722 User time: 1.93s 16 sum += rng.gen()

  19. Rust Traits

  20. Rust Traits impl Rand for u8 impl Rand for u16 // ... Get an number with a random value: use std::rand; let x: u8 = rand::random(); let y: u16 = rand::random(); 18

  21. Rust Traits impl Rand for XorShiftRng impl Rand for ChaChaRng // ... Get an RNG with a random seed: use std::rand; let x: rand::XorShiftRng = rand::random(); let y: rand::ChaChaRng = rand::random(); 19

  22. Rust Community!

  23. Rust Community! E.g. /dev/[u]random (http://cr.yp.to/chacha.html  , sneves: #17387  ) getrandom(2) syscall on Linux, when available (strcat and klutzy: #18664  ) 21 ▶ Careful analysis of documentation/use of ▶ Implement Bernstein’s ChaCha RNG ▶ Update std::rand to use the new, better

  24. Questions?

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend