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