2

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

例如,如果您只想对数组中的某些元素执行繁重的操作。首先,您生成掩码数组,其中包含与您要执行操作的元素相对应的掩码数组:

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()

4

1 回答 1

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);
于 2016-09-10T21:33:09.317 回答