boost :: compute stream compaction

时间:2016-09-09 00:32:56

标签: boost opencl gpgpu boost-compute

如何使用boost :: compute进行流压缩?

E.g。如果要仅对阵列中的某些元素执行繁重操作。首先,生成一个掩码数组,其中包含与要执行操作的元素相对应的掩码数组:

mask = [0 0 0 1 1 0 1 0 1]

然后执行掩码数组的独占扫描(前缀和)以获得:

scan = [0 0 0 0 1 2 2 3 3]

然后使用:

压缩此数组
if (mask[i])
    inds[scan[i]] = i;

获得最终的压缩索引数组(inds):

[3 4 6 8]

最终数组的大小为scan.last() + mask.last()

1 个答案:

答案 0 :(得分:2)

#include <boost/compute/algorithm/copy_if.hpp>

using namespace boost::compute;

detail::copy_index_if(mask.begin(), mask.end(), inds.begin(), _1 == 1, queue);