2016-04-08 9 views
0

私はCUDAのモジュラ累乗のためのアプリケーションを開発しました。これは512ビット整数に対して非常によく機能します。この多倍精度整数は16個の32ビットワードに格納されます。私は2.5達成するために使用
いくつかの概念 - OpenSSLのべき乗剰余アプローチに比べ3.2高速化:CUDAの速度最適化

  • __shared__メモリ
  • CUDAメモリは32ビット加算のため
  • PTXコード、乗算
  • を揃えます

整数は1024ビットに拡張しようとしていますが、パフォーマンスは劇的に低下します0.1から0.3までの整数であり、唯一の違いは整数を格納するのに必要なメモリサイズであり、今は32×32ビットワードである。数百倍も遅い2048ビットバージョンはもちろんですが、

たとえば、1000の累乗累乗(r = a^x mod n)を計算する場合、すべてのオペランドをカーネルに送ります。これは512000バイトのメモリを意味します。
私の質問:この小さな変更がパフォーマンスに大きな影響を与えるのはなぜですか?
私はNvidia Geforce GT 520mx、Ubuntu 14.04 64ビットを使用します。

+3

[mcve]がなければ、伝えるのは難しい/不可能です。あなたが見たいと思うかもしれない1つのポイントはレジスタ溢れです。しかし、これはちょうど推測です.... – havogt

+0

登録の流出も私の最初の推測でした。 'nvcc -Xptxas = -v ...'でPTXをコンパイルすると、レジスタの使用状況に関する情報が得られます。 – Marco13

+0

よろしくお願いいたします。 –

答えて

2

最小限のテストのソースコードなしで伝えるのは難しいが、あなたのデータのサイズを大きくしながら、あなたはいくつかの制限に実行することができます:

  • レジスタ
  • 共有メモリ/ L1キャッシュ
  • 占有

多分私が忘れている他の多くの。

アプリケーションをプロファイリングすると、非常に便利です。 Visual Studioを使用している場合は、NvidiaのNSIGHTは、アプリケーションの実行を分析することができ、あなたに有益な情報の多くを与える:

  • ブロック、スレッドを、理論的
  • デバイスをワープして
  • 占有
  • マルチプロセッサの活動を達成
  • など

draw some chartsさらに簡単にボトルネックが表示されます。

Nsightを実行してパフォーマンス分析のためにアプリケーションを分析する方法については、my answer hereを参照してください。

+0

提案ありがとうございます。私はNsightでテストする可能性があります。最小の例でさえ、ここに投稿するには大きすぎるだけでなく、理解するのも難しいでしょう。私はNsightを使用しようとしますが、私は答えを返すでしょう。 –

+0

@DaniGrosuあなたがNsightを試してみる可能性があるなら、それを実行してください!確かにあなたは追加の有用な情報を得るでしょう。 – Taro

関連する問題