‹ BackHN Continuity

Thread

AMD's random number generator can't generate a 0?

288 points · 220 comments · BruceEel

  1. jstanley · · focus · HN ↗
    This is not the first RNG bug on Zen 2, I recall after I first got mine that some application or other would quit immediately at startup because rdrand always returned -1, i.e. all 1s. It was fixed with a microcode update.

    Do we now learn that they fixed "always generate all 1s" with "never generate all 0s"??

    EDIT: I've been unable to reproduce the problem on my CPU, FWIW. It's a Ryzen 5 3600.

    EDIT2: OK, update, I can reproduce it with rdrand16, rdrand32 is fine but rdrand16 can never generate all 0s. So my CPU does have this problem!

    1. peri-cl · · focus · HN ↗
      Zen 4 reporting in. I'm unable to reproduce it (7840U).

         $ ./a.out | rg '\b\-?\d\b' | sort -n | uniq -c
         15281 -2
         15192 -1
         15273 0
         15243 1
         15269 2
      
      I used the GCC intrinsic ( _rdrand16_step ),

          #include <immintrin.h>
          
          short rdrand16() {     // gcc -mrdrnd
              short ret;
              while (1 != _rdrand16_step(&ret)) { }    
              return ret;
          }
Open on Hacker News to reply ↗

Unofficial Hacker News client; not affiliated with Y Combinator.