CUDA调用cudaMemcpyToSymbol时提示“invalid argument“

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

使用常量内存是一直提示"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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值