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