c++ - 如何 cudaMemcpy __device__ 初始化的 var

标签 c++ pointers cuda

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

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

稍后在我的代码中,我想将此变量的内容复制到本地变量(引用):

checkCudaErrors(cudaMemcpy(&h_var, &d_var, sizeof(float), cudaMemcpyDeviceToHost));

效果很好!但使用cudaMalloc!


所以我想在不使用 cudaMalloc 的情况下使用 __device__ 定义来分配变量:

__device__ float d_var = 1000000000.0f;

这非常有效,我知道这种情况下的 d_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 但无济于事。 非常感谢任何帮助。

谢谢!

最佳答案

哎呀,我明白了...... 我需要使用 cudaMemcpyFromSymbol(); 而不是调用 cudaMemcpy();

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

关于c++ - 如何 cudaMemcpy __device__ 初始化的 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501223/

相关文章:

assembly - 如何创建或操作GPU汇编器?

c++ - 将 C++ 异步函数转换为 GPU 计算

cuda - GPU 仿真器,无需硬件即可进行 CUDA 编程

c++ - move 语义和 unique_ptr

c++ - 在cpp中将单词从一个文件复制到另一个文件

c - 为什么整数隐式转换为指针?

c++ - 将指针而不是迭代器传递给 std::copy

c - LLVM API 指针类型支持

c++ - 确定 C++ 文件中的事件 qmake 配置

c++ - "ptr = ptr -> next"这个"->"是什么意思? (C++)