Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用CUDA推力用最后一个非缺失值填充数组中缺失的值?_Cuda_Gpgpu_Thrust_Missing Data - Fatal编程技术网

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

如何使用CUDA推力用最后一个非缺失值填充数组中缺失的值?,cuda,gpgpu,thrust,missing-data,Cuda,Gpgpu,Thrust,Missing Data,我的缺失值标志是0,因此从[0,a,B,0,0,0,C,0]我想要[0,a,B,B,B,C,C](如果之前不存在未缺失的值,则保留为0) 我正在使用CUDA推力库,我想知道是否有一种快速的方法可以做到这一点,而不必循环遍历每个元素 非常感谢。似乎效果不错 #include <thrust/device_vector.h> #include <thrust/scan.h> #include <iterator> template<class T>

我的缺失值标志是0,因此从
[0,a,B,0,0,0,C,0]
我想要
[0,a,B,B,B,C,C]
(如果之前不存在未缺失的值,则保留为0)

我正在使用CUDA推力库,我想知道是否有一种快速的方法可以做到这一点,而不必循环遍历每个元素

非常感谢。

似乎效果不错

#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;
}

用你自己的函子尝试
struch::inclusive\u scan
binary\u op
这个操作符是关联的吗?@m.s.是的
op(op(a,b,c)==op(a,op(b,c))==if(c!=0){return c;}else if(b!=0){return b;}else{return a;}
0 2 1 1 1 3 3