调用 Surface 低级 CUDA API 的奇怪错误编译代码
Posted
技术标签:
【中文标题】调用 Surface 低级 CUDA API 的奇怪错误编译代码【英文标题】:Weird error compiling code that calls Surface low-level CUDA API 【发布时间】:2011-03-24 17:45:49 【问题描述】:这个最小的例子:
int main()
struct surfaceReference* surfaceReferencePointer;
cudaGetSurfaceReference(&surfaceReferencePointer, "surfaceReference");
这样编译失败:
nvcc -g -arch=sm_20 -o foo.out foo.cu
显示以下错误信息:
foo.cu(4): warning: argument of type "surfaceReference **" is incompatible with parameter of type "const surfaceReference **"
foo.cu(4): warning: argument of type "surfaceReference **" is incompatible with parameter of type "const surfaceReference **"
foo.cu: In function ‘int main()’:
foo.cu:4: error: invalid conversion from ‘surfaceReference**’ to ‘const surfaceReference**’
foo.cu:4: error: initializing argument 1 of ‘cudaError_t cudaGetSurfaceReference(const surfaceReference**, const char*)’
我无法理解我做错了什么。我正在使用 CUDA 3.2 在 Linux Ubuntu 64 位机器上进行编译。
【问题讨论】:
您应该将指针定义为 const 你是对的!请发表您的评论作为答案,以便我接受。谢谢。 【参考方案1】:struct surfaceReference*
指针应定义为const
:
int main()
const struct surfaceReference* surfaceReferencePointer;
cudaGetSurfaceReference(&surfaceReferencePointer, "surfaceReference");
向codymanix致敬,他在 cmets 中提供了正确答案。
【讨论】:
以上是关于调用 Surface 低级 CUDA API 的奇怪错误编译代码的主要内容,如果未能解决你的问题,请参考以下文章
CUDA 真的没有类似 calloc() 的 API 调用吗?
如何从 mapbox 解决 Surface API 中的 CORS 问题?
CUDA Nsight - 找出内核/运行时 api 调用之间的 CPU 在做啥