我有一些工作代码......我按如下方式分配设备变量指针:
float *d_var;
cudaMalloc(&d_var, sizeof(float) );
稍后在我的代码中,我想将此var的内容复制到本地var(ref):
checkCudaErrors(cudaMemcpy(&h_var, &d_var, sizeof(float), cudaMemcpyDeviceToHost));
哪个效果很好!但使用cudaMalloc
慢!
所以我想使用cudaMalloc
定义而不使用__device__
来分配变量:
__device__ float d_var = 1000000000.0f;
这很有用,我知道在这种情况下d_var已经正确初始化了,我可以像以前一样用它做所有的工作。我一直在打印它的内容,所以我知道它有正确的内容。但是当我尝试使用与以前相同的代码将内容复制到我的主机var时:
checkCudaErrors(cudaMemcpy(&h_var, &d_var, sizeof(float), cudaMemcpyDeviceToHost));
我得到一个非常模糊的错误:
invalid argument cudaMemcpy(&h_var, &d_var, sizeof(float), cudaMemcpyDeviceToHost)
我尝试将变量称为&d_var
,d_var
,*d_var
无济于事。
任何帮助很多人赞赏。
谢谢!
答案 0 :(得分:3)
呸,我想出来......
而不是调用cudaMemcpy();
我需要使用cudaMemcpyFromSymbol();
checkCudaErrors(cudaMemcpyFromSymbol(&h_var, d_var, sizeof(float), 0, cudaMemcpyDeviceToHost));