7

1000000CUDA (通常は要素)を使用して GPU に格納された符号なし整数の配列があります。配列内のすべての数値の出現をカウントしたいと思います。明確な数はわずか ( 程度10) ですが、これらの数は 1 から まであり1000000ます。約9/10番目の数字は0です。それらの数は必要ありません。結果は次のようになります。

58458 -> 1000 occurrences
15 -> 412 occurrences

sを使用した実装atomicAddがありますが、遅すぎます (多くのスレッドが同じアドレスに書き込みます)。誰かが高速/効率的な方法を知っていますか?

4

4 に答える 4

7

最初に数値を並べ替えてから、キーによる削減を行うことで、ヒストグラムを実装できます。

最も簡単な方法は、を使用thrust::sortしてからを使用することthrust::reduce_by_keyです。また、多くの場合、アトミックに基づくアドホックビニングよりもはるかに高速です。これがです。

于 2011-09-28T03:24:02.240 に答える
1

CUDAの例、特にヒストグラムの例でヘルプを見つけることができると思います。これらはGPUコンピューティングSDKの一部です。ここで見つけることができますhttp://developer.nvidia.com/cuda-cc-sdk-code-samples#histogram。アルゴリズムを説明するホワイトペーパーもあります。

于 2011-09-27T21:05:07.973 に答える