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 に答える