您需要的是一种经典的并行算法,称为 流压缩 1。
如果选择“推力”,则可以简单地使用
thrust::copy_if。这是一种稳定的算法,它保留所有元素的相对顺序。
草图:
#include <thrust/copy.h>template<typename T>struct is_non_zero { __host__ __device__ auto operator()(T x) const -> bool { return T != 0; }};// ... your input and output vectors herethrust::copy_if(input.begin(), input.end(), output.begin(), is_non_zero<int>());
如果 没有 选择“ 推力”,则可以自己实现流压缩(有关该主题的文献很多)。这是一个有趣且相当简单的练习,同时也是更复杂的并行基元的基本构建块。
(1) 严格来说,这不是 正好 流传统意义上的压缩,作为流压缩传统上是稳定的算法,但你的要求不包括稳定。放宽要求可能会导致更有效的实施?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)