PyOpenCL,数组过滤器:copy_if vs我自己的基于原子的实现

时间:2013-01-29 11:50:06

标签: copy filtering opencl pyopencl prefix-sum

我有一组随机整数。例如[132, 2, 31, 49, 15, 6, 70, 18 ... , 99, 1001]。我想生成大于100的所有数字的数组,并获得该数组的大小。

有两种方法:

  1. PyOpenCL copy_if的新功能。它基于 GenericScanKernel如果我们更深入Prefix Sums
  2. 使用Atomics
  3. 的纯OpenCL解决方案

    copy_if是否始终正常运作?我可以看到copy_if不使用原子。是否可能使用copy_if

    遇到问题

    与原子方式相比,copy_if的性能怎么样?

    你会选择什么?为什么?

1 个答案:

答案 0 :(得分:0)

我从未见过copy_if的错误。总是一样的结果;它似乎非常强大。 (不过,我还没有建立单元测试。)

至于性能,copy_if应该快得多,特别是如果你的GPU很快。正如其他人所说,原子和GPU是一个糟糕的组合(我学到了很多东西......)

如果预期结果的数量相对于您的数据集很小,我建议使用sparse_copy_if()方法here ---您还可以在其中找到copy_if示例。< / p>

分叉我的代码,以下内容应该有效:

from my_pyopencl_algorithm import copy_if 
final_gpu, evt = my_pyopencl_algorithm.sparse_copy_if(array_gpu, "ary[i] > 100", queue = queue)