使用CUDA推力的元素动力操作

时间:2013-01-16 07:41:42

标签: cuda thrust

有没有办法用pow函数转换推力向量?换句话说,我想将向量的每个元素x转换为pow(x,a)a为常量。

2 个答案:

答案 0 :(得分:2)

有关如何使用初始化参数编写函数,请参阅“推力快速入门指南”中的Section Transformations

struct saxpy_functor
{
    const float a;

    saxpy_functor(float _a) : a(_a) {}

    __host__ __device__
        float operator()(const float& x, const float& y) const { 
            return a * x + y;
        }
};

答案 1 :(得分:2)

这是一个完整的例子。正如@Eric所提到的,所需要的只是定义自己的幂函子并使用thrust::transform

#include <thrust/sequence.h>
#include <thrust/device_vector.h>

class power_functor {

    double a;

    public:

        power_functor(double a_) { a = a_; }

        __host__ __device__ double operator()(double x) const 
        {
            return pow(x,a);
        }
};

void main() {

    int N = 20;

    thrust::device_vector<double> d_n(N);
    thrust::sequence(d_n.begin(), d_n.end());

    thrust::transform(d_n.begin(),d_n.end(),d_n.begin(),power_functor(2.));

    for (int i=0; i<N; i++) {
        double val = d_n[i];
        printf("Device vector element number %i equal to %f\n",i,val);
    }

    getchar();
}