0

CUDAとCPU(i5 750)での(符号なし)モジュラー乗算のレイテンシーとスループットの両方を決定する必要があります。

CPUの場合、このドキュメント(121ページ)を見つけました。SandyBridgeの場合、どちらを参照すればよいかわかりませんが、「MUL IMUL r32」の場合、レイテンシーと相互スループットが2に等しい場合に4サイクルを取得します。 「DIVr64」のレイテンシーは30〜94、rec.thrです。22-76。

最悪のシナリオ:

  • レイテンシー94+4

  • rec.thr。76 + 2

右?私はOpenSSLを使用してそれらを実行していますが、最低レベルでは常に単純なモジュラー乗算を実行していると確信しています。

CUDAに関しては、現在PTXでモジュラー乗算を実行しています。232bの数値を乗算し、結果を64bレジスタに保存し、32bモジュロを64bレジスタにロードしてから、64bモジュロを実行します。

ここを見ると、76ページで、32b整数乗算のFermi 2.xのスループットは16(MPあたりのクロックサイクルあたり)であると言われています。モジュロに関して、彼らはただこう言います:「計算能力2.xのデバイスに関する20以下の命令」...

正確にはどういう意味ですか?最悪の場合、レイテンシのMPあたりのモジュロあたり20サイクル?そしてスループット?MPあたりいくつのモジュロ?

編集:

そして、ワープの最初の16スレッドだけが32b乗算(MPごとのサイクルごとに16スレッド)を実行する必要があるワープがある場合はどうでしょうか。後半は何もする必要はありませんが、GPUは1〜2サイクルビジーになりますか?

4

1 に答える 1

1

[NVIDIAフォーラムhttp://devtalk.nvidia.comでも同じ質問をしたので、そこで与えた回答をStackOverflowにコピーしました。一般に、相互参照は、複数のプラットフォームで質問が行われる場合に役立ちます。]

GPUのようなスループットアーキテクチャでは、レイテンシはかなり無意味です。関心のある操作のスループット数を決定する最も簡単な方法は、ターゲットにする予定のデバイスでスループット値を測定することです。私の知る限り、これは、参照したCPUドキュメントのテーブルが生成される方法です。

マシンコードを調べるには、cuobjdump --dump-sassを使用して、モジュロ演算のマシンコード(SASS)を逆アセンブルできます。sm_20に対してこれを行うと、32 /32->32ビットの符号なしモジュロに対して合計16個の命令をカウントします。命令の組み合わせから、GPU全体でTesla C2050のスループットは1秒あたり約200億回と推定されます(これは推測値であり、測定値ではないことに注意してください)。

サブルーチンと呼ばれる64/64-> 64ビットの符号なしモジュロについては、最近、CUDA5.0を使用してC2050で1秒あたり64億回の操作のスループットを測定しました。

除算を使用する代わりに、モジュラー乗算のモンゴメリーとバレットのアルゴリズムを調べることをお勧めします。

于 2012-11-06T23:11:13.237 に答える