如何在CUDA中将密集向量转换为稀疏向量?

时间:2017-03-09 05:04:54

标签: c++ cuda gpu sparse-matrix cublas

我在GPU内存中有一个大的密集向量(不是矩阵):

  

[1,3,0,0,4,0,0]

并希望将其转换为稀疏格式:

  

values = [1,3,4]; index = [0,1,4]

我知道我可以在cusparse<t>dense2csc()中拨打cuSPARSE,但这是为矩阵设计的,可能对矢量效率不高。有没有其他方法可以做到这一点?或者也许是CUDA内核。感谢

1 个答案:

答案 0 :(得分:2)

使用thrust::copy_if

int * d_index = [1,3,0,0,4,0,0];
int * d_index_compact;

struct non_negative
{
    __host__ __device__
    bool operator()(const int x)
    {
        return x >= 0;
    }
};


thrust::copy_if(thrust::cuda::par, d_index, d_index + this->vocab_size , d_index_compact, non_negative()); // d_index_compact = [1,3,4];