cudaErrorInvalidSymbol错误

调用cudaMemcpyFromSymbol 出现cudaErrorInvalidSymbol

原因:
​cudaError_t cudaMemcpyFromSymbol ( void* dst, const T& symbol, size_t count, size_t offset = 0, cudaMemcpyKind kind = cudaMemcpyDeviceToHost )

参数 symbol 必须为_ device 全局变量本身,不能通过函数参数传入,如

_ _ host_ _ void myCopySymbol(const void* symbol, void* h_data, int size)
{

cudaMemcpyFromSymbol (h_data,symbol,size);
}
上述做法是错误的。
如果想实现symbol的入参,需要先通过cudaGetSymbolAddress获取symbol的全局内存指针,如下

_ _ host_ _ void myCopySymbol(const void* symbol, void* h_data, int size)
{

cudaMemcpy (h_data,symbol,size,cudaMemcpyDeviceToHost);
}
void main()
{
int size = 10000;
float * h_data = new float [size];
float *symbol;
cudaGetSymbolAddress((void**)&symbol,DEV_VAR);
myCopySymbol(symbol,h_data,sizeof(float)*size );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值