2016-11-05 10 views
-1

一般的な質問:スレッドの数は、対処したい要素のサイズと等しくなければなりませんか? exmaple:行列M [a] [b]がある場合。私は(aXb)スレッドを割り当てる必要がありますか、(ab以上)必要以上のスレッドを割り当てることができますか?要素aXb + 1に焦点を当てるスレッドが私たちを投げ捨てるので、彼はそれをしませんか?解決策は状態を入れることです(範囲(ab)にある場合のみ)?については、Cudaのスレッドを整理することについて

特定の質問:x行y列のM [x] [y]行列とする。 1000 < = x < = 300000とy < = 100を考えてみましょう。どのようにしてスレッドをxとyの各入力に対して一般的になるように整理できますか?私は各スレッドが行列の1つの要素に焦点を当てることを望みます。 CC = 2.1ありがとう!

+0

さらに割り当てることができます。どちらのアプローチも働くことができます。必要以上に多くのスレッドを割り当てる場合は、各スレッドが有効なデータで動作していることを確認する条件テストをカーネルに組み込む必要があります。必要以上に少ないスレッドを割り当てる場合は、カーネルに[何らかのループを含める](https://devblogs.nvidia.com/parallelforall/cuda-pro-tip-write-flexible-kernels-grid-stride-loops/)を含める必要があります。 )を使用してすべてのデータ項目をカバーします。 –

答えて

1

一般的な回答:問題によって異なります。

ほとんどの場合、スレッドのグリッドに問題の自然な一対一のマッピングはで開始する罰金ですが、何を心に留めておきたいことは次のとおりです。

  1. 高稼働を実現。
  2. GPUリソ​​ースの使用量とメモリスループットを最大化します。
  3. 有効なデータを処理しています。

単一のスレッドを使用して多くの要素を処理することや、多くのスレッドが単一の要素を処理する必要が生じることがあります。 例えば、要素の配列に適用する必要がある一連の独立した操作A、B、Cを想像することができます。 3つの異なるカーネルを実行することもできますが、要素があるより3倍多くのスレッドを含むようにグリッドを割り当て、グリッドの次元(または他のもの)の1つで操作を区別する方が良いかもしれません。反対側では、共有メモリの使用を最大限に活用する(例えば画像を変換する)という問題があるかもしれません.16スレッドのブロックを使って5x5イメージウィンドウを処理し、各スレッドが各2x2スライスの統計を計算します。

あなたの選択はあなたのものです。最高のアドバイスは必ずしも明らかではありません。さまざまなアプローチを試して、効果的なものを選択してください。

関連する問題