在查看了英特尔数字随机数生成器 (DRNG) 软件实施指南RDRAND
后,我对调用生成器的内部状态会发生什么有一些疑问。不幸的是,答案似乎不在指南中。
根据该指南,在 DRNG 内部有四个 128 位缓冲区,用于提供随机位以
RDRAND
进行排空。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 位随机性,我应该经历使用 16 位寄存器而不是 64 位寄存器的麻烦吗?这会对 DRNG 的吞吐量产生任何影响吗?我想避免消耗不必要的随机性。
该指南说进位标志将在
RDRAND
执行后设置: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
调用过快耗尽那些 128 位缓冲区而无法使用?或者不可用是否意味着 DRNG 未通过健康检查并且无法生成任何新数据?RDRAND
基本上,我试图了解 CF=0 是否会因为调用时缓冲区碰巧(暂时)为空而发生。
注意:我已经查看了有关 RDRAND 吞吐量和延迟的问题的答案,但我正在寻找不同的信息。
谢谢!