使用CUDA或推力收集阵列中特定值的位置

使用CUDA或推力收集阵列中特定值的位置,cuda,thrust,Cuda,Thrust,我有这样一个数组: 数组:0 1 0 1 0 1 索引:01 2 3 4 5 6 我想将“1”的所有位置收集到结果数组中,如下所示: 1 4 6 推力有“计数”功能,但只能计数“1”的数量 那么最快的方法是什么呢?推力有处理这个问题的功能吗?如果没有,CUDA如何高效地实施 我自己的想法是:首先使用前缀sum来获取偏移量数组,然后添加另一个内核,如果其数据数组值为“1”,则每个线程将其id写入resultArray[offset[id]]。我觉得我的想法很难看。有更好的方法吗?推力有一个例子可以

我有这样一个数组:

数组:0 1 0 1 0 1

索引:01 2 3 4 5 6

我想将“1”的所有位置收集到结果数组中,如下所示:

1 4 6

推力有“计数”功能,但只能计数“1”的数量

那么最快的方法是什么呢?推力有处理这个问题的功能吗?如果没有,CUDA如何高效地实施


我自己的想法是:首先使用前缀sum来获取偏移量数组,然后添加另一个内核,如果其数据数组值为“1”,则每个线程将其id写入resultArray[offset[id]]。我觉得我的想法很难看。有更好的方法吗?

推力有一个例子可以做到这一点:


推力有一个例子,正好可以做到这一点:


推力有一个例子,正好可以做到这一点:


推力有一个例子,正好可以做到这一点:


这看起来像是简单的流压缩。你不明白的是什么?你的数组是二进制的。在我看来,你的想法,但是在
数组上加上一个二进制前缀和,会起作用,而且会很快。如果你想知道更多,你可以找到更多的信息。这看起来像是简单的流压缩。你不明白的是什么?你的数组是二进制的。在我看来,你的想法,但是在
数组上加上一个二进制前缀和,会起作用,而且会很快。如果你想知道更多,你可以找到更多的信息。这看起来像是简单的流压缩。你不明白的是什么?你的数组是二进制的。在我看来,你的想法,但是在
数组上加上一个二进制前缀和,会起作用,而且会很快。如果你想知道更多,你可以找到更多的信息。这看起来像是简单的流压缩。你不明白的是什么?你的数组是二进制的。在我看来,你的想法,但是在
数组上加上一个二进制前缀和,会起作用,而且会很快。如果你想知道更多,你可以找到更多的信息。