5. 版本混合规则
-
从 CUDA 11.0 开始,CUDA 运行时的 ABI 版本在每个主要版本发布时都会增加。CUDA 定义的类型,无论是像 cudaDeviceProp 这样的不透明句柄还是结构,它们的 ABI 都与 CUDA 运行时的主要版本相关联。如果函数 A 和函数 B 是使用不同主要版本的工具包编译的,并且链接到同一个设备可执行文件中,则将它们从函数 A 传递到函数 B 是不安全的。
-
CUDA 驱动程序 API 具有每个函数的 ABI,用 _v* 扩展名表示。CUDA 定义的类型(例如结构)不应跨不同的 ABI 版本传递。例如,应用程序调用 cuMemcpy2D_v2(const CUDA_MEMCPY2D_v2 *pCopy) 并使用旧版本的结构 CUDA_MEMCPY2D_v1 而不是 CUDA_MEMCPY2D_v2。
-
用户不应在资源的生命周期内任意混合不同的 API 版本。这些资源包括 IPC 句柄、内存、流、上下文、事件等。例如,想要使用 cuMemAlloc_v2 分配 CUDA 内存的用户应使用 cuMemFree_v2 而不是 cuMemFree 释放内存。