如何 cudaMemcpy 一个__device__初始化的变量
How to cudaMemcpy a __device__ initialized var
我有一些工作代码...其中我分配一个设备变量指针,如下所示:
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_var
,d_var
,*d_var
无济于事。 任何帮助非常感谢。
谢谢!
呸,我想通了.... 我不调用cudaMemcpy();
我需要使用cudaMemcpyFromSymbol();
checkCudaErrors(cudaMemcpyFromSymbol(&h_var, d_var, sizeof(float), 0, cudaMemcpyDeviceToHost));
相关文章:
- 为什么C++有不同的变量初始化方式?
- 静态 constexpr 成员变量初始化
- C++不同的变量初始化
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 是变量初始化失败吗?
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 类静态变量初始化顺序
- 使用 constinit 变量初始化 constexpr 变量
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 使用全局变量初始化不同编译单元中的其他全局变量
- 使用默认构造函数引用成员变量初始化错误
- 宏的 if 语句中的变量初始化
- 不稳定的C :每行适应性变化多变量初始化
- 同一函数中的静态函数变量初始化顺序
- C 语言中的静态变量初始化
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- 类POD成员变量初始化
- 尝试捕获类变量初始化的范围
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 多变量初始化编译器支持