调用 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 在做啥

operative_groups::this_grid() 导致任何 CUDA API 调用返回“未知错误”

Cuda 中的运行时 VS 驱动程序 API

Java / Tensorflow - API 调用 pb 模型使用 GPU 推理