いくつかの最適化問題については、CUDAでローカル検索アルゴリズムを並列化します。問題は非常に難しいので、実際に解決できる問題のサイズは非常に小さいです。 私の懸念は、1つのカーネルで実行する予定のスレッドの数がGPUのスピードアップを得るには不十分だということです(すべてのスレッドが合体し、バンク競合、非分岐などがないと仮定しても)。 カーネルが100スレッドで起動されたとします。 GPUを使用して利益を期待するのは妥当ですか?スレッド数が1000の場合はどうなりますか?ケースを分析するためにはどのような追加情報が必要ですか?有効なGPUスレッドの最小数
答えて
スレッド100個で十分ではありません。理想的には、少なくともGPU上のマルチプロセッサ(SM)と同じ数のスレッドブロックに分割できるサイズが必要です。そうしないと、プロセッサがアイドル状態のままになります。同じ理由で、各スレッドブロックのスレッド数は32以上でなければなりません。理想的には、ブロックあたり32スレッド(96-512スレッド)の小さな倍数を、可能であればSMあたり複数のブロックを持つべきです。
少なくとも、SMの算術待ち時間をカバーするのに十分なスレッドを用意する必要があります。つまり、Compute Capability 2.0 GPUではSMごとに約10-16ワープ(32スレッドのグループ)が必要です。しかし、それらはすべて同じスレッドブロックから来る必要はありません。たとえば、14台のSMを搭載したTesla M2050 GPUの場合、少なくとも4480スレッドに分割し、少なくとも14ブロックに分割する必要があります。つまり、これより少ないスレッドでもスピードアップが可能です。これは多くの要因によって異なります。たとえば、計算が帯域幅に制限されていて、デバイスのメモリにデータを保持できる場合は、GPUデバイスのメモリ帯域幅がCPUのメモリ帯域幅よりも大きいため、スピードアップが発生する可能性があります。あるいは、もしそれが束縛されており、命令レベルの並列処理(同じスレッドからの独立した命令)が多ければ、待ち時間を隠すために多くのスレッドを必要としません。この後者の点は、GTC 2010のVladimir Volkovの"Better performance at lower occupancy" talkでよく説明されています。
重要なのは、すべてのSMを使用することです:GPUの計算性能や帯域幅をすべて使用していないためです。提供することができます。
詳細な回答と役に立つリンクをありがとうございます。 – AdelNick
@harrism:プログラミングガイドには、タスクを有効にするために使用するスレッドの数についての説明があります – Programmer
- 1. 最小スレッドと最大スレッドの並列
- 2. GPUエミュレーションが有効な場合、Androidエミュレータの無限ロードとエラー
- 3. 複数のスレッドでインクリメントしたときの共有変数の最小値と最大値
- 4. イテレータの有効性とスレッド
- 5. GPU対CPU?プログラム計算の加速のためのGPUのコア/スレッドの数?
- 6. 浮動小数点型の有効桁数
- 7. partedの有効な引数
- 8. UbuntuでAndroid 4のGPUエミュレーションを有効にする方法Natty
- 9. 最大出力に最適なスレッド数
- 10. 最適化を有効にした浮動小数点の結果が異なる - コンパイラのバグ?
- 11. 有効なテンプレート引数
- 12. 最小の引数
- 13. これはスレッド待機/パルシングの有効な実装ですか?
- 14. 正規表現:式が有効な日付に一致するが、最小値と最大値の日付
- 15. スレッド同期 - プロセスの最大スレッド数
- 16. 共有ホスティングのIIS/WCFでのスレッド/プロセスの最適なアプローチ
- 17. XNU最大スレッド数
- 18. 最先端のGPUボリュームレンダリング
- 19. SslStream.DataAvailableない有効な関数
- 20. GPU上の常駐ブロックの最大数にブロック数を最適化する
- 21. 有効なHTMLとTD要素の数
- 22. 浮動小数点数が同じ有意な小数点以下を持つ
- 23. 効果的なMac開発のための最小限のハードウェア
- 24. 最小完璧なハッシュ関数
- 25. DataGridView最小限の行数
- 26. Mysqlの最小関数
- 27. Cの最小ハッシュ関数?
- 28. jQuery関数の最小化
- 29. スレッドSWTの無効なアクセスエラー
- 30. 有効な組み合わせの最大数を見つけるアルゴリズム?
おそらく100スレッドを持つことで多くの利点はありません - あなたは何千ものスレッドを持っていると、通常はCUDAプログラミングは実用的になります。 –
正確に言えば、同じワープのスレッドが同じことをするということですね。 – AdelNick
あなたが必要とするものを実行するプロトタイプを作成し、それを高速化することについて心配してください。あなたが必要とするものに類似したものがあれば、突っ込んだものを見てください。 – fabrizioM