2

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

有两种方法:

  1. PyOpenCL 的新功能copy_if。它基于 GenericScanKernel并且如果我们更深入地了解Prefix Sums
  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 回答