CUDA cudaMemcpy: invalid argument

Hier ist mein code:

struct S {
    int a, b;
    float c, d;
};
class A {
private:
    S* d;
    S h[3];
public:
    A() {
        cutilSafeCall(cudaMalloc((void**)&d, sizeof(S)*3));
    }
void Init();
};

void A::Init() {
    for (int i=0;i<3;i++) {
        h[i].a = 0;
        h[i].b = 1;
        h[i].c = 2;
        h[i].d = 3;
    }
    cutilSafeCall(cudaMemcpy(d, h, 3*sizeof(S), cudaMemcpyHostToDevice));
}

A a;

In der Tat ist es ein Komplexes Programm, das enthalten CUDA-und OpenGL. Wenn ich debug das Programm, schlägt beim laufen in der cudaMemcpy mit dem Fehler Informationen

cudaSafeCall () - Runtime-API-Fehler 11: ungültiges argument.

Tatsächlich, dieses Programm verwandelt sich von einem anderen, ordnungsgemäß laufen kann. Aber in diesem einen, ich zwei Variablen S* d und-S-h[3] in der main-Funktion statt in der Klasse. Was ist mehr seltsam ist, dass ich implementieren Sie diese Klasse Ein in ein kleines Programm, es funktioniert gut.
Und ich habe meine Treiber aktualisiert, Fehler immer noch vorhanden ist.

Könnte jemand mir einen Tipp geben, warum dies passiert und wie es zu lösen. Danke.

Durch die Art und Weise, die cudaMemcpy wird reture cudaErrorInvalidValue.
Wo ist die Grenze A a;? Wird es innerhalb einer Funktion, oder ist Sie global? Wenn es global ist, dann wird der Konstruktor aufgerufen werden kann, bevor Sie über einen gültigen device context (ich bin mir nicht sicher über dieses, aber es ist möglich). Wenn das der Fall ist, dann ist die d-Zeiger übergeben cudaMemcpy wäre ungültig.
Können Sie Ihre CUDA-Konfiguration verwenden Sie bitte? Ich kann nicht reproduzieren Sie Ihre Fehler mit einer alten GeForce 9400m und CUDA 5.0 preview.

InformationsquelleAutor TonyLic | 2012-05-14

Schreibe einen Kommentar