我正在尝试编译具有以下内容的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/

10-09 20:14