2

基本イメージ内で約 35 のサブイメージまたはパターンを見つけようとする CUDA プログラムを作成しています。各サブイメージ (パターン) は、ベース イメージの小さな領域 (10x10 ピクセル ウィンドウなど) にのみ存在できます。サブイメージのサイズは 1000 から 10000 ピクセルまでさまざまです。ベース画像は 640x480 ピクセルです。

これは、サブイメージをベース イメージのサブセクションで畳み込み、畳み込みの結果がしきい値よりも小さい場合、それよりも一致していると見なされます。サブイメージごとに約 100 回の畳み込みを行う必要があります (許容位置の 10x10 ウィンドウのみをチェックするため)。

最初の質問: これは実装されており、オープン ソースで利用できますか?

2 番目の質問: どちらがより優れた実装戦略ですか?

  1. 粗粒度: 各 CUDA スレッドは、ベース イメージ内のサブイメージの完全な畳み込みを行います。サブイメージと位置ごとに 1 つの CUDA スレッドがあります。
  2. きめの細かい: 各 CUDA スレッドは、畳み込みの 1 つのコンポーネント (ピクセル) を計算します。つまり、CUDA スレッドは、サブイメージのピクセルをベース イメージの適切なピクセルで乗算します。次に、syncblock() を使用してこれらの倍数を合計します。

更新:両方のアプローチを試しました。最良の方法は、大きなサブイメージを小さなサブイメージに分割する方法 1 の変形だと思います。これで、すべてのサブイメージがほぼ同じサイズ (たとえば、1024 ピクセル) になりました。次に、各 CUDA スレッドが 1 つの位置に対して完全な畳み込みを行います。完了したら、すべての結果をホストに送信します。ホストは、中間部分を元に戻す責任があります (小さな部分に分割されたサブイメージの場合)。利点は、すべての CUDA スレッドが同じ量の作業を実行することです。これは、サブイメージのサイズが異なるため、問題となる 2 番目のアプローチの 2 倍の速さのようです。

4

1 に答える 1

1

サブイメージと位置ごとに 1 つの cuda スレッド ブロック (複数の cuda スレッドを含む) を使用することをお勧めします。

サブイメージのサイズはさまざまであるため、1 つのカーネルですべてのサブイメージをバッチ処理することは適切な選択ではない場合があります。サブイメージとベース イメージの完全な畳み込みを 1 回実行し、サブイメージごとに 35 回呼び出すようにカーネルを設計できます。

カーネルでは、グリッドには複数のスレッド ブロックが含まれており、その数は許容される位置の数と同じです。次に、各スレッド ブロックは、サブイメージとベース イメージの指定された位置との間のピクセルの倍数の合計を計算します。

これは戦略 2 に似ています。主な違いは、各スレッドが複数のピクセルを計算する可能性があり、カーネルが 1 つのスレッド ブロックのみを使用して合計を実行することです。これは、グローバル メモリを介したスレッド ブロック間の同期を必要としません。

サブイメージに 2000 ピクセルがあるとします。許容される位置は 10x10 です。100 個のブロックを含むカーネルを作成し、各ブロックに 256 個のスレッドを含めることができます。ブロック内の 256 のスレッドは、2000 の倍数のピクセルの並列合計を実行します。

アップデート

提案されたアプローチには 2 つの問題がある可能性があります。

  1. カーネルあたりのスレッドが少なすぎます。あなたが説明したように、カーネルには許容される位置に10x10 = 100のスレッドがあり、各スレッドの合計は約1024倍のピクセルになります。一般に、GPU を完全に利用するには、カーネルで少なくとも 32 のスレッド ブロックと、ブロックごとに 64 ~ 256 のスレッドが必要になる場合があります。
  2. 多くの場合、カーネルの起動が増えると、起動のオーバーヘッドが増えて速度が低下するため、サブイメージを小さなイメージに分割することは適切な選択ではありません。

二分木のような並列削減は、実際には線形削減よりも高速です。ここで並列削減のサンプルコードを見つけることができます

http://docs.nvidia.com/cuda/cuda-samples/index.html#cuda-parallel-reduction

ここに良いホワイトペーパーがあります

http://docs.nvidia.com/cuda/samples/6_Advanced/reduction/doc/reduction.pdf

于 2013-08-21T04:31:58.673 に答える