我在使用 cudaMemcpyToSymbol 时遇到问题。我有一个运行良好的代码。我的代码的精简版是这样的:
mykernel.h file:
__global__
void foo(float* out);
mykernel.cu file:
#include "kernels.h"
__global__
void foo(float* out)
{
uint32_t idx = blockIdx.x * blockDim.x + threadIdx.x;
out[idx] = 10;
}
main.cu file:
#include "kernels.h"
main()
{
// initialization and declaration stuff here
foo<<<1,1,1>>>(my_global_memory);
// read back global memory and investigate values
}
上面的代码非常完美。现在我想用来自常量内存的值替换这个“10”值。所以我所做的是:
- 添加
__constant__ float my_const_var;
mykernel.h 文件。 out[idx] = my_const_var;
用mykenel.cu替换我内核的最后一行float value = 10.0f; cudaMemcpyToSymbol(my_const_var,&value);
在我调用 main.cu 之前添加
完成所有操作后,cudaMemcpyToSymbol 似乎没有复制实际值,因为我得到的结果是“0”而不是“10”。此外,我总是检查 CUDA 错误,但没有。有人可以告诉我我做错了什么吗?为什么 cudaMemcpyToSymbol 不将值复制到符号?我在 Debian Linux 和 CUDA SDK 5.0 上使用带有最新驱动程序的 GeForce9600M(计算能力 1.1)。我还尝试运行 cuda-memcheck 并且没有收到任何错误。