Assembly Ivy桥上RDRAND指令的延迟和吞吐量是多少?

Assembly Ivy桥上RDRAND指令的延迟和吞吐量是多少?,assembly,intel,rdrand,Assembly,Intel,Rdrand,我找不到有关指令延迟或吞吐量的任何信息。然而,这个处理器是存在的,所以信息必须在那里 编辑:事实上,最新的优化手册提到了这个说明。它被记录为您可以在中找到一些相关信息 逐字引用如下: 测量吞吐量: Up to 70 million RDRAND invocations per second 500+ million bytes of random data per second Throughput ceiling is insensitive to the number of contendi

我找不到有关指令延迟或吞吐量的任何信息。然而,这个处理器是存在的,所以信息必须在那里


编辑:事实上,最新的优化手册提到了这个说明。它被记录为您可以在中找到一些相关信息

逐字引用如下:

测量吞吐量:

Up to 70 million RDRAND invocations per second
500+ million bytes of random data per second
Throughput ceiling is insensitive to the number of contending parallel threads

我使用Intel的包装器在一个实际的常春藤网桥i7-3770上做了一些初步的吞吐量测试,它在一个内核上每秒生成3300-3500万个32位数字


这个来自英特尔的7000万数字大约是8核;一方面,他们报告的数据只有1000万左右,所以我的测试结果要好3倍多:-/

我写了librdrand。使用RdRand指令用随机数填充缓冲区是一组非常基本的例程

我们在IDF上展示的性能数据来自我编写的测试软件,该软件在Linux中使用pthreads生成了许多线程。每个线程使用RdRand用随机数填充内存缓冲区。该程序测量平均速度,可以在改变线程数的同时进行迭代

由于从每个核心到共享DRNG以及从共享DRNG到共享DRNG的往返通信延迟比在DRNG上生成随机数所需的时间要长,因此,随着线程的增加,平均性能明显提高,直到达到最大吞吐量为止。IVB上DRNG的物理最大吞吐量为800MBytes/s。带有8个线程的4核IVB可以管理780Mbytes/s的数据。使用更少的线程和内核,可以实现更少的数量。500MB/s的数字有些保守,但当您试图诚实地宣称性能时,您必须这样做

由于DRNG以固定频率(800MHz)运行,而核心频率可能会变化,因此每个RdRand的核心时钟周期数会变化,这取决于核心频率和同时访问DRNG的其他核心的数量。IDF演示文稿中给出的曲线真实地反映了预期结果。核心时钟频率对系统的总体性能影响不大,但影响不大。线程的数量占主导地位

在测量RdRand性能时,要小心实际“使用”RdRand结果。如果你没有,也就是说,是你干的。。RdRand R6,RdRand R6,…,RdRand R6重复多次,性能会被解读为人为的高。由于数据在被覆盖之前不被使用,CPU管道在发出下一条指令之前不会等待数据从DRNG返回。我们编写的测试将结果数据写入内存,内存将位于片上缓存中,因此管道暂停等待数据。这也是为什么使用RdRand进行超线程读取比使用其他类型的代码更有效的原因


IDF幻灯片中给出了特定平台、时钟速度、Linux版本和GCC版本的详细信息。我记不起头顶上的数字了。有的芯片速度较慢,有的芯片速度较快。我们为给出的数字以下是我从rdrand获得的一些性能数据:

在i5-3210M(2.5GHz)Ivybridge(2个核,4个线程)上,我得到每秒约9960万64位随机数的峰值,其中4个线程相当于每秒约63.74亿位


8线程i7-3770(3.4GHz)Ivybridge(4核,8线程)我在3个线程上达到了每秒9960万64位rdrands的峰值吞吐量。

我不知道答案,没有运行基准测试,但作为一个感兴趣的人,我可以问“你希望它有多快?”即什么应用程序需要大量rdrands?顺便说一句,这里有两个独立的问题:(a)指令在延迟和吞吐量方面有多快,但(b)它的读取速度是否能超过熵池的累积速度?也就是说,你能耗尽熵池,然后只运行伪随机数吗?我能想到为什么有人会关心的唯一原因是决定是直接使用还是通过PRNG使用
RDRAND
。在这两种情况下,你会得到相同的可观察到的行为,但其中一种可能比另一种要快得多,而且现在还不清楚哪一种是可以观察到的。(克拉齐格勒:你的
b
有点不相关。这就像在圣水变成水之前问你得到了多少圣水。两者之间没有明显的区别,在这种情况下,这种区别基本上是没有意义的。)@KrazyGlew一个用例为GPU上的统计抽样生成随机数。相关:有一个针对
std::mt19937
PRNG的基准。如果有什么区别的话,RDRAND可能比该测试慢,因为他们不使用结果(正如David的回答所解释的,asm中存在问题)。IvB吞吐量:每104-117个时钟一个。SKL吞吐量:每460个时钟一个。(但如果DRNG以恒定的时钟运行,这可能取决于核心时钟速度。不过,Agner在i7-3770k上进行了测试,因此IvB的时钟不应该非常低,使RDRAND看起来很快。除非它处于空闲时钟速度?或者他的测试也没有使用结果,IvB比SKL更好地挤压“死”UOP。)@user434507-包含相关位总是好的。这种联系可能会中断,这个答案将变得毫无意义。这一次我帮你做了:)引用:
这有一个效果,就是将熵提取到更集中的样本中
。太棒了,不是吗?@ArjunShankar,你说得对,我也考虑过这么做,但文章中还有很多有趣的图表。
7000万次每秒调用
。钟速是多少?这一点也很重要。如果有人读了最后一条评论,不,不会,因为DRNG以800 MHz的速度运行,不管CPU速度如何(在常春藤桥上),请参阅添加一个指向IDF演示文稿的链接。“我写了librdrand”-”nuf说。所以
rdrand