Intel Digital Random Number Generator (DRNG) Software Implementation Guide을 검토 한 결과 RDRAND
이 호출 될 때 발생 장치의 내부 상태에 대해 몇 가지 질문이 있습니다. 불행히도 대답은 가이드에없는 것 같습니다. 상기 안내에 따라 Ivy Bridge에서 RDRAND의 소모 특성은 무엇입니까?
- 상기 DRNG 내부
RDRAND
드레인위한 랜덤 비트를 제공 네 128 비트 버퍼가있다.RDRAND
자체를 제공 할 것 중 하나 (16), 목적지 레지스터의 폭에 따라 임의의 데이터가 32 또는 64 비트 :rdrand ax ; put 16 random bits in ax rdrand eax ; put 32 random bits in eax rdrand rax ; put 64 random bits in rax
큰 목적지 레지스터의 사용은 그 128 비트 버퍼가 더 빨리 비워 것인가? 예를 들어 2 비트의 난수가 필요한 경우 64 비트 레지스터를 통해 16 비트 레지스터를 사용하는 문제를 해결해야합니까? DRNG의 처리량에 어떤 차이가 있습니까? 나는 필요 이상으로 무작위성을 소비하는 것을 피하고 싶다.
CF = 1 Destination register valid. Non-zero random value available at time of execution. Result placed in register. CF = 0 Destination register all zeros. Random value not available at time of execution. May be retried.
"를 사용할 수 없습니다"는 무엇을 의미 하는가 :
가이드는
RDRAND
실행 후 캐리 플래그가 설정됩니다라고?RDRAND
호출이 이러한 128 비트 버퍼를 너무 빨리 소모 했으므로 임의의 데이터를 사용할 수 없습니까? 또는 DRNG가 건강 검진을받지 못하고 새로운 데이터를 생성 할 수 없다는 것을 의미합니까? 기본적으로, 나는RDRAND
이 호출 될 때 버퍼가 (일시적으로) 비어 있기 때문에 CF = 0이 발생할 수 있는지 이해하려고합니다.
참고 : 나는 answersthis question on throughput and latency of RDRAND에,하지만 난 찾고있어 서로 다른 정보를 검토했습니다.
감사합니다. 2에 대해서는
['rdrand' 처리량은 IvB에서 110 사이클마다 하나, Skylake에서 ~ 460 사이클당 하나씩입니다] (http://agner.org/optimize/).64bits를 얻고 동시에 여러 개의 작은 난수를 사용하는 경우, 또는 난수가 많이 필요한 경우 더 빠른 PRNG를 시드하려면'rdseed '를 사용하는 것이 좋습니다. 단지 16uops이지만 대기 시간은 길고 링크 된 질문에 대한 데이비드의 대답은 결과를 즉시 사용할 때 파이프 라인을 정지시키는 경향이 있음을 나타냅니다. 사람들은 숫자를 사용하는 계산에 미치는 영향이 아니라 RNG 처리량을 측정하는 것으로 보입니다. –