调用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 );
}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐