如何cudaMemcpy __device__初始化var

时间:2014-02-01 17:31:26

标签: c++ pointers cuda

我有一些工作代码......我按如下方式分配设备变量指针:

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_vard_var*d_var无济于事。 任何帮助很多人赞赏。

谢谢!

1 个答案:

答案 0 :(得分:3)

呸,我想出来...... 而不是调用cudaMemcpy();我需要使用cudaMemcpyFromSymbol();

checkCudaErrors(cudaMemcpyFromSymbol(&h_var, d_var, sizeof(float), 0, cudaMemcpyDeviceToHost));