最近、デバイス内の動的に割り当てられたデータをホストメモリにコピーするときに問題が発生しました。データはmallocで割り当てられ、ホスト機能でデバイスからホストにそれらのデータをコピーします。コードは次のとおりです。
#include <cuda.h>
#include <stdio.h>
#define N 100
__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: %p\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;
}
CUDA 4.1でも同じ問題が発生したポスターがすでにあり、一部の専門家は、CUDAドライバーとランタイムを新しいバージョンにアップグレードすることでこの問題を解決できると示唆しています。 CUDA-デバイスデータをホストにコピーしますか?
私はCUDAツールキット4.2と最新の開発者ドライバーとC2075を持っていますが、それでも上記の問題が発生します。この問題の解決方法を教えてください。