私はCUDAで画像を処理したいと思います。各ピクセルの新しい値は、1つの行の2つの隣接ピクセルに基づいて計算されます。各値は2回だけ使用されるため、ピクセル値には__shared__
のメモリを使用するのは意味がありますか?問題の構造に合わないので、タイルもそれを行うには間違った方法ではありませんか?私のアプローチは、各ピクセル上でスレッドを実行し、スレッドごとに隣接ピクセル値を読み込むことです。隣接する配列要素に共有メモリを使用しますか?
1
A
答えて
4
現在サポートされているすべてのCUDAアーキテクチャにはキャッシュがあります。 コンピューティング機能3.5以降では、これらは特に読み取り専用データに対して効率的です(読み書きデータはL2にのみキャッシュされるため、L1キャッシュは読み取り専用データに限定されます)。入力データへのポインタをconst __restrict__
とマークすると、コンパイラはほとんどvia the L1 texture cacheをロードします。 __ldg()
builtinを明示的に使用して強制することもできます。
共有メモリを介して隣りのピクセルからのデータの再利用を明示的に管理することは可能ですが、これはキャッシュに依存するだけの利点ではないことがわかります。
もちろん、共有メモリを使用するかどうかにかかわらず、x方向のブロックサイズを最大化し、最適なアクセスローカリティのためにblockSize.yを1にしたいとします。
1
統合メモリアクセスを利用して共有メモリを使用して結合します。イメージが行単位で格納されるようにするだけです。各ブロックは線形アレイのチャンクを処理する。データの再利用(最初と最後のピクセルを除くすべてのピクセルは3回の処理に関与する)のため、処理されるすべてのピクセルの値を共有メモリにコピーするのがカーネルの初期段階で有益です。
関連する問題
- 1. MongoDBの非隣接配列要素によるグループ化
- 2. 隣接する要素
- 3. numpy配列内の隣接要素を同じ要素で「タグ付け」する方法はありますか?
- 4. 共有メモリを持つ2D配列
- 5. 複数の非隣接配列要素fortran
- 6. C++ WINAPI共有メモリの動的配列
- 7. GPUメモリにPythonで共有配列を定義していますか?
- 8. jqueryを使用して隣接するtd要素を削除する
- 9. 共有メモリをPHPとCで使用していますか?
- 10. ユニバーサルセレクタ(*)を隣接セレクタ(+)と共に使用する場合
- 11. データ配信と共有メモリ
- 12. CSS:隣接する要素の後ろの要素を選択するために2つの隣接セレクタを使用する
- 13. Css要素を別の要素のすぐ隣に配置
- 14. 同じ要素のうち2つが隣接しないように配列をシャッフルします
- 15. 2次元配列内の隣接していない要素の最大和
- 16. Googleのチャート - 隣接する列の共有ラベルと同じ値を持つ
- 17. div内の要素を互いに隣接して均等に分配する方法はありますか?
- 18. Juliaでの共有配列の使用
- 19. 隣接するディスプレイのiframe:テーブルセル要素が隣接セルのコンテンツをプッシュダウン
- 20. 隣接行列と有向グラフの隣接リスト
- 21. fork()で共有メモリを使用
- 22. 2つの配列で共通する最大要素を探しますか?
- 23. Numpy:配列内のすべての値を隣接する要素の平均で置き換えます。
- 24. 2つの配列要素を結合するか、または1つの配列要素を別の配列要素に分配しますか?
- 25. 配列要素の配列要素をJavaで配列する
- 26. アンドロイドのネイティブコードで共有メモリを使用するには?
- 27. ブーストライブラリを使用して共有メモリ内のノードのメモリを解放する
- 28. ネストされた共有要素を使用したシーン遷移
- 29. 共有要素フレスコ画を使用したアニメーション
- 30. 浮動アクションボタンスタンドを使用した共有要素の移行
この質問を閉じるには投票した人は?この質問はあまりにも広範ではなく、簡単かつ簡潔に答えることができます。私はCUDAに関する多くの質問が低品質であることに同意しますが、これはそうではなく、すぐに質問を閉じる習慣があまりにも一般的になってきていると思います(私は自分自身を含むことを喜んで認めます)。 – tera