使用常量内存是一直提示"invalid argument",尝试了各种方法都无法解决
__constant__ float xAxis_d[3];
__constant__ float yAxis_d[3];
int main()
{
float xAxis_h[3]; //图像x方向
float yAxis_h[3]; //图像y方向(光线传播方向)
calRayVector(pose_h, yAxis_h, xAxis_h); //由位姿计算图像x、y方向
//CHECK(cudaMalloc((float**)&yAxis_d, nByte)); //为设备端分配内存
//CHECK(cudaMalloc((float**)&xAxis_d, nByte)); //为设备端分配内存
CHECK(cudaMemcpyToSymbol(yAxis_d, yAxis_h, nByte, cudaMemcpyHostToDevice));
CHECK(cudaMemcpyToSymbol(xAxis_d, xAxis_h, nByte, cudaMemcpyHostToDevice));
}
问题原因:调用 cudaMemcpyToSymbol的参数不足,缺少了size_t count,正确调用:
CHECK(cudaMemcpyToSymbol(yAxis_d, yAxis_h, nByte, 0, cudaMemcpyHostToDevice));
CHECK(cudaMemcpyToSymbol(xAxis_d, xAxis_h, nByte, 0, cudaMemcpyHostToDevice));
cudaMemcpyToSymbol函数原型:
template < class T &g

在CUDA编程中,遇到使用__constant__内存时提示invalidargument的问题,原因是调用cudaMemcpyToSymbol函数时缺少了参数count。解决方案是提供正确的count值和可选的offset,即使offset有默认值,不提供也可能导致错误。按照修正后的调用方式,添加count和offset参数,问题得以解决。

4929

被折叠的 条评论
为什么被折叠?



