ここで質問するのは初めてですので、よろしくお願いします。無知をお許しください。また、CUDAプログラミングを始めたばかりです。
基本的に、私はたくさんのポイントを持っています、そして私はすべてのペアワイズ距離を計算したいと思います。現在、私のカーネル関数は1つのポイントを保持し、他のすべてのポイントを(グローバルメモリから)繰り返し読み取り、計算を実行します。これが私の混乱のいくつかです:
448コアのTeslaM2050を使用しています。しかし、私の現在の並列バージョン(kernel <<< 128,16,16 >>>)は、はるかに高い並列処理を実現しています(kernel <<< 1,1,1 >>>よりも約600倍高速です)。マルチスレッドの問題またはパイプラインの問題が原因である可能性がありますか、それとも実際には同じことを示していますか?
さらにパフォーマンスを向上させたい。したがって、共有メモリを使用して、各マルチプロセッシングブロックのいくつかの入力ポイントを保持することを考えます。しかし、新しいコードは同じくらい高速です。考えられる原因は何ですか?設定したスレッドが多すぎるという事実に関連しているのでしょうか?
または、コードにifステートメントがあるためですか?問題は、私は短い距離だけを考慮して数えるので、(dist <200の場合)のようなステートメントがあります。これについてどれくらい心配する必要がありますか?
百万ありがとう!置き場