我有設備變量,並在此變量中分配和填充設備中的數組,但我有問題獲取數據主機。 cudaMemcpy()返回cudaErrorInvalidValue錯誤。我該怎麼做?我知道,在這種情況下,我可以使用cudaMalloc,因爲我知道數組的大小,但是在我的REAL代碼中,它計算設備中數組的大小,並且它需要立即分配記憶。CUDA - 將設備數據複製到主機?
PS2:我發現了類似的問題,但我仍然不知道,我該如何解決它? - copy data which is allocated in device from device to host
PS3:我已經更新代碼,但還是犯規作品:{
PS4:我只是想經營上具有Nvidia GT 520MX(最新的遊戲驅動器)和不工作的代碼太:(
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;
}
還是一樣的錯誤:cudaErrorInvalidValue – Milan 2012-02-05 23:05:20
別人很清楚(成功) – Milan 2012-02-05 23:51:19