CUDAデバイス上で配列の最小値または最大値を見つけるには、並列縮小を実行する必要があります。私は推力と呼ばれるこのための良い図書館を見つけました。ホストメモリ内の配列に対してのみ並列リダクションを実行できるようです。私のデータはデバイスメモリにあります。デバイスメモリのデータを減らすことは可能ですか? 私はこれを行う方法を理解することはできません。スラストのドキュメントはhttp://code.google.com/p/thrust/wiki/QuickStartGuide#Reductionsです。皆さんありがとう。デバイス内の配列を使用したCUDAでの並列削減
1
A
答えて
7
既にデバイスメモリにあるアレイの推力を減らすことができます。戻り値もdevice_ptr
であることを
// assume this is a valid device allocation holding N words of data
int * dmem;
// Wrap raw device pointer
thrust::device_ptr<int> dptr(dmem);
// use max_element for reduction
thrust::device_ptr<int> dresptr = thrust::max_element(dptr, dptr+N);
// retrieve result from device (if required)
int max_value = dresptr[0];
注:あなたがする必要があるすべては、あなたがリンクしているウィキに示したのと同様に、thrust::device_pointer
コンテナ内のデバイスのポインタをラップし、還元手順のいずれかを呼び出すですあなたがthrust::raw_pointer_cast
を使用して他のカーネルに直接それを使用することができますので、:並列化をthurst
int * dres = thrust::raw_pointer_cast(dresptr);
1
推力または他のライブラリがあなたにこのようなサービスを提供していない場合でも、あなた自身がそのカーネルを作成することができます。
Mark Harrisには、並列削減とその最適化に関するチュートリアルがあります。 スライドに続いて、ニーズに合わせて実装して変更することは難しくありません。
関連する問題
- 1. 並列削減アルゴリズムの実装
- 2. タイミング並列CUDAカーネル
- 3. CodeIgniter:配列内の配列を使用
- 4. 2次元配列の削減
- 5. CUDAの2D配列
- 6. CUDAのビット配列
- 7. CUDAを使用した行列乗算
- 8. Visual StudioでのCuda並列コード生成
- 9. GPUでの並列処理 - CUDA/OpenCL
- 10. CUDA:2次元配列のvolatileを使用しているエラー
- 11. CUDAでの並列化、各列へのスレッドの割り当て
- 12. ホストからデバイスへのCUDA転送2D配列
- 13. 別の配列を使用して配列を並べ替える
- 14. GTX 590でCUDA並列Nsightローカルデバッグ
- 15. CUDAのキーで3つの配列を並べ替える(おそらく推力を使用)
- 16. TPLを使用した並列I/O
- 17. GPUを使用した並列プログラミングR
- 18. タスク並列ライブラリを使用したスケジューリング
- 19. xcopyを使用した並列コピー
- 20. タスク並列ライブラリを使用したイベント
- 21. グラフの配列削減アルゴリズムが必要です
- 22. 並列配列をソートJava
- 23. Ruby(およびopen-uri)を使用して並列で配列内のアイテムを処理する方法
- 24. html/templateで範囲内のインデックスを使用して並列配列を反復処理する方法は?
- 25. 並べ替えなしで配列内のユニークエレメントをカウントする
- 26. CUDA:配列へのポインタの配列に__restrict__を適用する方法は?
- 27. CUDA配列内の数字の数を計算する
- 28. 並列パッケージを使用してゾンビプロセスを削除します
- 29. レルムとNSPredicateを使用して配列インデックスで並べ替え
- 30. foreachを使用した配列の配列
私が知っている、しかし、私が読んで、本当に速いです... – Hlavson