我想知道是否有办法利用在英特尔沙桥 CPU 中发现的新的基于硬件的真数生成器?我读到英特尔的 MKL(数学内核库)公开了此功能,但这需要 MKL 套件和英特尔编译器,最终非常昂贵。
有没有其他方法可以在我的 C++ 代码中使用硬件随机数生成器? 例如,一个不错的、只有 header 的库?
最佳答案
英特尔已在 http://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide 发布了 rdrand
指令的手册、库和代码示例.
自述文件:
"Because the many of compiler toolchains do not support this new instruction, this library was created to facilitate easy access to it. The idea is simple: link to a built static library and enjoy the new feature!"
main.c
中有所有库调用的示例。
我能够在 Mac OS X 上用 gcc 编译静态库和测试程序。文档指出它也与 Linux 和 Windows 兼容。
请注意,rdrand
实际上是一个 128 位伪随机数生成器,具有硬件生成的熵。 (即将推出的 Broadwell 架构将提供一个 rdseed
指令来访问真正的随机数生成器。)差异的详细信息及其含义可以在 http://software.intel.com/en-us/blogs/2012/11/17/the-difference-between-rdrand-and-rdseed 的“长答案”标题下找到。 .
关于c++ - 利用 sandy bridge 的硬件真随机数生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901829/