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 :)