CUDA - Kopie Gerät ' Daten zum host?

Habe ich device-variable und dieser variable, ich reservieren und füllen eines Arrays in das Gerät, aber ich habe ein problem, um Daten zum host. cudaMemcpy() zurück cudaErrorInvalidValue Fehler. wie kann ich es tun?

PS: Der Code ist nur Beispiel, ich weiß, dass In diesem speziellen Fall kann ich verwenden cudaMalloc weil ich weiß, dass die Größe des Arrays, sondern In meinem WIRKLICHEN code, berechnet Er die Größe des Arrays in das Gerät, und es muss sofort Speicher.

PS2: ich habe ein ähnliches problem, aber ich weiß immer noch nicht, wie kann ich es lösen? - kopieren von Daten, die zugeordnet wird, die im Gerät vom Gerät zum host

PS3: ich habe aktualisiert-code, aber immer noch nicht funktioniert:{

PS4: ich versuche gerade diesen code ausführen auf einem notebook mit Nvidia GT 520MX(neueste Spiel-Treiber) und funktioniert nicht zu 🙁

thx

#include <cuda.h>
#include <stdio.h>

#define N 400
__device__ int* d_array;

__global__ void allocDeviceMemory()
{
    d_array = new int[N];
    for(int i=0; i < N; i++)
         d_array[i] = 123;
}

int main()
{
    allocDeviceMemory<<<1, 1>>>();

    cudaDeviceSynchronize();

    int* d_a = NULL;
    cudaMemcpyFromSymbol((void**)&d_a, "d_array", sizeof(d_a), 0, cudaMemcpyDeviceToHost);
    printf("gpu adress: %lld\n", d_a);


    int* h_array = (int*)malloc(N*sizeof(int));
    cudaError_t errr = cudaMemcpy(h_array, d_a, N*sizeof(int), cudaMemcpyDeviceToHost);
    printf("h_array: %d, %d\n", h_array[0], errr);

    getchar();
    return 0;
}
InformationsquelleAutor Milan | 2012-02-05
Schreibe einen Kommentar