如何 cudaMemcpy 一个__device__初始化的变量

How to cudaMemcpy a __device__ initialized var

本文关键字:变量 初始化 device 一个 如何 cudaMemcpy      更新时间:2023-10-16

我有一些工作代码...其中我分配一个设备变量指针,如下所示:

float *d_var;
cudaMalloc(&d_var, sizeof(float) );

稍后在我的代码中,我想将此变量的内容复制到本地变量(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无济于事。 任何帮助非常感谢。

谢谢!

呸,我想通了.... 我不调用cudaMemcpy();我需要使用cudaMemcpyFromSymbol();

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