我在将数据从GPU复制到CPU时遇到问题。一开始我在GPU空间中创建变量:
__device__ float gpu_array;
在这个GPU函数中,我想将od.fS [gi](value = 0,43 ...)中的数据复制到gpu_array:
__global__ void Collide(.....){
....
//Streaming
od.fS[gi] = fi_S;
od.fN[gi] = fi_N;
od.fE[gi] = fi_E;
od.fW[gi] = fi_W;
gpu_array = od.fC[gi];
}
此处结束是将数据从GPU复制到CPU的功能:
void showData(){
cudaDeviceSynchronize();
float* temp_array = NULL;
cudaMemcpyFromSymbol((void**)&temp_array, "gpu_array", sizeof(temp_array), 0, cudaMemcpyDeviceToHost);
float* cpu_array = (float*)malloc(sizeof(float));
cudaMemcpy(cpu_array, temp_array, sizeof(float), cudaMemcpyDeviceToHost);
printf("h_array: %f\n", *cpu_array);
}
最后复制但错误的值(0.00000,-0.00000等)。我究竟做错了什么?
答案 0 :(得分:0)
使用cudaMemcpyFromSymbol
时存在多个问题:
float* temp_array = NULL;
cudaMemcpyFromSymbol((void**)&temp_array, "gpu_array", sizeof(temp_array), 0, cudaMemcpyDeviceToHost);
temp_array
cpu_array
周围的剩余代码完全没必要正确使用将是这样的:
void showData(){
cudaDeviceSynchronize();
float* temp_array = (float *)malloc(sizeof(float));
cudaMemcpyFromSymbol(temp_array, gpu_array, sizeof(float));
printf("h_array: %f\n", *temp_array);
}