扩展稀疏矩阵的推力方法是什么?

时间:2013-04-15 14:24:57

标签: c++ cuda thrust

基本上,我有一个"稀疏的风格"数据集,

thrust::device_vector<int> indexes(smallsize);
thrust::device_vector<float> values(smallsize);

我想将其扩展为单个

thrust::device_vector<float> expanded(fullsize);

我知道如何使用内核执行此操作:

template <typename T>
__global__ void AssignByIndex
    (
    T* inval,
    T* outval,
    size_t* keys,
    int Ilength
    )
{
    int index = blockIdx.x * blockDim.x + threadIdx.x;

    if (index < Ilength)
    {
        const size_t key = keys[index];//cross access,slow
        outval[key]=inval[index];
    }
};

但是1)这感觉就像推力可以轻易做到的事情2)这不允许我使用花哨的迭代器。我想我只是在搜索中使用了错误的术语,或者只是缺乏足够的创造力。

1 个答案:

答案 0 :(得分:2)

这听起来像是典型的分散操作。 Thrust有scatter function,你可以这样做:

thrust::scatter(values.begin(), values.end(), indexes.begin(), expanded.begin());

这会将values分散到expanded的索引中。