如何使用CUDA Thrust使用最后一个非缺失值填充数组中的缺失值?

时间:2013-01-13 14:16:12

标签: cuda gpgpu thrust missing-data

我缺少值的标志是0,所以从[0, A, B, 0, 0, C, 0]我想要[0, A, B, B, B, C, C](如果不存在先前的非缺失值,则保留为0)。

我正在使用CUDA Thrust库,并且想知道是否有一种快速的方法可以在不循环每个元素的情况下执行此操作。

非常感谢。

1 个答案:

答案 0 :(得分:4)

似乎运作良好。

#include <thrust/device_vector.h>
#include <thrust/scan.h>
#include <iterator>

template<class T>
struct FillMissing
{
    __host__ __device__ T operator()(const T& res, const T& dat)
    {
        return dat == T(0) ? res : dat;
    }
};

int main()
{
    thrust::device_vector<double> vec(7);
    vec[1] = 2;
    vec[2] = 1;
    vec[5] = 3;

    thrust::inclusive_scan(
            vec.begin(), vec.end(),
            vec.begin(),
            FillMissing<double>());

    thrust::copy(
            vec.begin(), vec.end(),
            std::ostream_iterator<double>(std::cout, " "));
    std::cout << std::endl;
}

输出:

0 2 1 1 1 3 3