A conversão de empuxo gera um erro: "bulk_kernel_by_value: um acesso ilegal à memória foi encontrado"

Sou bastante novo no CUDA / Thrust e tenho um problema com um trecho de código. Para facilitar, eu o reduzi ao mínimo. O código é o seguinte:

struct functor{
functor(float (*g)(const float&)) : _g{g} {}

__host__ __device__ float operator()(const float& x) const { 
        return _g(x);
    }
private:
    float (*_g)(const float&);
};

__host__ __device__ float g(const float& x){return 3*x;}

int main(void){
thrust::device_vector<float> X(4,1);
thrust::transform(X.begin(), X.end(), X.begin(), functor(&g));
}

A ideia é que eu possa passar qualquer função para o functor, para que eu possa aplicar essa função a todos os elementos em um Vector. Infelizmente, não sei por que recebo o erro descrito. Eu compilo com-w -O3 -shared -arch=sm_20 -std=c++11 -DTHRUST_DEBUG

Sou grato por qualquer ajuda que todos vocês possam me dar :)

questionAnswers(1)

yourAnswerToTheQuestion