2

私はランダムな整数の配列を持っています。たとえば[132, 2, 31, 49, 15, 6, 70, 18 ... , 99, 1001]。たとえば、100 を超えるすべての数値の配列を生成し、その配列のサイズを取得したいと考えています。

次の 2 つの方法があります。

  1. PyOpenCL の新機能copy_ifこれは、 Prefix SumsGenericScanKernelをさらに深く掘り下げた場合に基づいてい ます。
  2. Atomicsを使用した純粋な OpenCL ソリューション

copy_if常に正しく動作しますか? 私が見ることができるようにcopy_if、原子を使用していません。を使用してトラブルに直面することは可能copy_ifですか?

copy_ifアトミックな方法と比較してのパフォーマンスはどうですか?

あなたは何を選びますか、そしてその理由は何ですか?

4

1 に答える 1

0

でエラーを見たことがありませんcopy_if。常に同じ結果。とても頑丈そうです。(ただし、単体テストは作成していません。)

パフォーマンスに関してcopy_ifは、特に GPU が高速な場合は、はるかに高速になるはずです。他の人が言ったように、アトミックと GPU は悪い組み合わせです (私はこれを学ぶのに苦労しました...)

また、期待される結果の数がデータセットに比べて少ない場合は、ここsparse_copy_if()で方法を提案しました---ここでは例も見つけることができます。copy_if

コードをフォークすると、次のように動作するはずです。

from my_pyopencl_algorithm import copy_if 
final_gpu, evt = my_pyopencl_algorithm.sparse_copy_if(array_gpu, "ary[i] > 100", queue = queue)
于 2015-01-31T09:24:46.430 に答える