2016-11-29 12 views
0

私はGPUで縮小を実行しようとしています。つまり、配列のすべての要素から最大値を見つけることを試みています。 Nvidia hereからチュートリアルがあります。最も簡単な方法についてはスライド7としましょう10億要素の配列のGPU削減

私の唯一の問題は、配列が巨大であることです!それは40億要素に達することができます。スライド7のサンプルコードから、ブロック共有メモリとグローバルメモリの間で前後にコピーする必要があり、現在の理解ではすべての要素を格納するためのグローバルメモリの使用を避けることはできません。このストレージは、グラフィックスカードメモリの2GBを超えています。

このような巨大な配列でこの縮小を行う方法はありますか、それともグラフィックスハードウェアの現在の限界ですか?

PSは:将来の拡張版では、私はまた、

+0

なぜGPUメモリに収まる入力データのチャンクを減らして実行するだけで、部分的な結果を減らして真の最大値を見つけることができないのですか? – talonmies

+0

私は今や馬鹿だと感じています!おそらくこの質問を閉じるべきです。あなたのヒントをありがとう! –

答えて

1

削減は、あなたがチャンクで行うことができます操作ですはるかに超える40億の要素と計画しています。

最も単純な解決策は、GPUに2つのデータバッファと2つの結果バッファを割り当て、次に削減カーネルを実行してGPUにオーバーラップ転送することです。 GPUがビジーの間、CPUは連続したGPU削減の出力を減らすことができます。そうすれば、データ転送のコストの大半を償却し、部分的な削減結果を処理することができます。

標準的な削減カーネルNVIDIAの電源を使用してCUDAの例でこれを行うことができます。

+0

あなたが言っていることは、CPUとGPUの間の仕事を協力させる高度な使い方のようなものです。私はそれを見直すつもりだが、次のアップグレードのために。ありがとうございました! –

関連する問題