CUDA 5.5 cudaMemcpyToSymbol,__constant__和超出范围的错误 [英] CUDA 5.5 cudaMemcpyToSymbol, __constant__ and out of scope error
问题描述
我正在尝试编译一个CUDA示例,它具有:
cuda.cu:
__ constant__ unsigned VERTICES;
__constant__ unsigned TRIANGLES;
和main.cpp中的相应代码;
cudaMemcpyToSymbol(VERTICES,& verticesNo,sizeof(int));
cudaMemcpyToSymbol(TRIANGLES,& trianglesNo,sizeof(int));
如何避免编译main.cpp时出现VERTICES未在此范围内声明错误? p>
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));
}
然后只调用 wrapper_fn
在您的main.cpp。
I'm trying to compile a CUDA example which has;
cuda.cu:
__constant__ unsigned VERTICES;
__constant__ unsigned TRIANGLES;
and the corresponding code in main.cpp;
cudaMemcpyToSymbol(VERTICES, &verticesNo, sizeof(int));
cudaMemcpyToSymbol(TRIANGLES, &trianglesNo, sizeof(int));
How to avoid "VERTICES not declared in this scope" error when compiling the main.cpp?
TIA.
cheers,
CUDA __constant__
variables have a file scope linkage. That means that the cudaMemcpyToSymbol
have to be in the same .cu file where the __constant__
variable is defined.
You can add a wrapper function to the .cu file and call this one from your .cpp file.
sample for 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));
}
Then only call wrapper_fn
in your main.cpp.
这篇关于CUDA 5.5 cudaMemcpyToSymbol,__constant__和超出范围的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!