У меня есть переменная устройства, и в этой переменной я выделяю и заполняю массив в устройстве, но у меня проблема с получением данных на хост. cudaMemcpy()
возврат cudaErrorInvalidValue
ошибка. как я могу это сделать?
PS: Код является лишь примером, я знаю, что в данном конкретном случае я могу использовать cudaMalloc
, потому что я знаю размер массива, но в моем РЕАЛЬНОМ коде он вычисляет размер массива в устройстве. и для этого нужно сразу выделить память.
PS2: Я обнаружил похожую проблему, но все еще не знаю, как я могу ее решить? - копировать данные, которые размещены в устройстве, с устройства на хост
PS3: я обновил код, но все еще не работает: {
PS4: я просто пытаюсь запустить этот код на ноутбуке с Nvidia GT 520MX (последний драйвер игры) и тоже не работает: (
ТНХ
#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;
}