Thrust transform löst folgenden Fehler aus: "bulk_kernel_by_value: Es wurde ein unzulässiger Speicherzugriff festgestellt"

Ich bin ziemlich neu bei CUDA / Thrust und habe ein Problem mit einem Code-Snippet. Um es einfacher zu machen, habe ich es auf das Nötigste reduziert. Der Code lautet wie folgt:

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

Die Idee ist, dass ich jede Funktion an den Funktor übergeben kann, damit ich diese Funktion auf jedes Element in einem Vector anwenden kann. Leider bin ich mir nicht sicher, warum ich den beschriebenen Fehler erhalte. Ich kompiliere mit-w -O3 -shared -arch=sm_20 -std=c++11 -DTHRUST_DEBUG

Ich bin dankbar für jede Hilfe, die ihr mir geben könnt:)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage