我正在尝试编译具有以下内容的CUDA示例:
cuda.cu:
__constant__ unsigned VERTICES;
__constant__ unsigned TRIANGLES;
以及main.cpp中的相应代码;
cudaMemcpyToSymbol(VERTICES, &verticesNo, sizeof(int));
cudaMemcpyToSymbol(TRIANGLES, &trianglesNo, sizeof(int));
编译main.cpp时如何避免出现“VERTICES未在此范围内声明”错误?
TIA。
干杯,
最佳答案
CUDA __constant__
变量具有文件作用域链接。这意味着cudaMemcpyToSymbol
必须位于定义__constant__
变量的.cu文件中。
您可以在.cu文件中添加包装函数,然后从.cpp文件中调用此函数。
cuda.cu的示例:
__constant__ unsigned VERTICES;
__constant__ unsigned TRIANGLES;
void wrapper_fn(unsigned *verticesNo, unsigned *trianglesNo)
{
cudaMemcpyToSymbol(VERTICES, verticesNo, sizeof(unsigned));
cudaMemcpyToSymbol(TRIANGLES, trianglesNo, sizeof(unsigned));
}
然后仅在main.cpp中调用
wrapper_fn
。关于c++ - CUDA 5.5 cudaMemcpyToSymbol,__ constant__和超出范围错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20535683/