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サイクルビジーになりますか?