RDRAND命令のレイテンシまたはスループットに関する情報がagner.orgに見つかりません。ただし、このプロセッサは存在するため、情報はそこにある必要があります。
編集:実際には、最新の最適化マニュアルにこの指示が記載されています。Ivy Bridge で 200 サイクル未満、合計帯域幅が少なくとも 500MB/s であると文書化されています。しかし、レイテンシーとスループットは可変であるため、この命令に関するより詳細な統計情報が得られると役立ちます。
librdrandを書きました。RdRand命令を使用してバッファーを乱数で満たすのは、非常に基本的な一連のルーチンです。
IDFで示したパフォーマンスデータは、Linuxでpthreadを使用して多数のスレッドを生成する私が作成したテストソフトウェアからのものです。各スレッドは、RdRandを使用して、メモリバッファを乱数で埋めます。プログラムは平均速度を測定し、スレッド数を変えながら反復することができます。
各コアから共有DRNGへの往復通信遅延があり、DRNGで乱数を生成するのに必要な時間よりも長いため、スレッドを追加すると、最大スループットに達するまで、平均パフォーマンスが明らかに向上します。 。IVBでのDRNGの物理的な最大スループットは800MBytes/sです。8スレッドの4コアIVBは、780Mバイト/秒のオーダーを管理します。スレッドとコアが少ないほど、より少ない数が達成されます。500MB /秒の数値はやや控えめですが、正直なパフォーマンスを主張しようとするときは、そうしなければなりません。
DRNGは固定周波数(800MHz)で動作しますが、コア周波数は変動する可能性があるため、RdRandあたりのコアクロックサイクル数は、コア周波数とDRNGに同時にアクセスする他のコアの数によって異なります。IDFのプレゼンテーションで示されている曲線は、何を期待するかを現実的に表したものです。全体的なパフォーマンスは、コアクロック周波数の影響を少し受けますが、それほど影響はありません。スレッドの数が支配的です。
RdRandのパフォーマンスを測定するときは、RdRandの結果を実際に「使用」するように注意する必要があります。そうしない場合は、IEでこれを行いました。RdRandR6、RdRand R6、.....、RdRand R6を何度も繰り返すと、パフォーマンスは人為的に高いと読み取られます。データは上書きされる前に使用されないため、CPUパイプラインは、データがDRNGから返されるのを待たずに、次の命令を発行します。私たちが書いたテストは、結果のデータをオンチップキャッシュにあるメモリに書き込むため、パイプラインストールはデータを待機します。これが、ハイパースレッディングが他の種類のコードよりもRdRandの方がはるかに効果的である理由でもあります。
特定のプラットフォーム、クロック速度、Linuxバージョン、およびGCCバージョンの詳細は、IDFスライドに記載されています。頭のてっぺんの数字を覚えていません。遅いチップと速いチップがあります。命令あたり200サイクル未満の場合の数値は、命令あたり約150コアサイクルの測定に基づいています。
チップは現在入手可能であるため、rdtscの使用に精通している人なら誰でも同じ種類のテストを行うことができます。
Intel Digital Random Number Generator (DRNG) Software Implementation Guideで関連情報を見つけることができます。
逐語的な引用は次のとおりです。
測定されたスループット:
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 の「librdrand」ラッパーを使用して、実際の Ivy Bridge i7-3770 でいくつかの予備的なスループット テストを行ったところ、シングル コアで毎秒 3300 万から 3500 万の 32 ビット数が生成されました。
Intel からのこの 70M という数値は、約 8 コアです。1つは約10Mしか報告していないため、私のテストは3倍以上優れています:-/
rdrand で取得したパフォーマンスの数値を次に示します 。
i5-3210M (2.5GHz) Ivybridge (2 コア、4 スレッド) では、4 スレッドで 1 秒あたり最大 9,960 万 64 ビット rdrands が得られ、これは 1 秒あたり 63.74 億ビットに相当します。
8 スレッドの i7-3770 (3.4GHz) Ivybridge (4 コア、8 スレッド) 3 スレッドで 1 秒あたり 9960 万 64 ビット rdrands のピーク スループットに達しました。