在 CUDA 12.0 中,添加了对从磁盘或内存动态加载内核库的支持:驱动程序 API,§ 6.12 库管理。从这些库中,人们可以加载“内核”——无需关联的设备或上下文。它们的句柄是
CUkernel
,而不是 CUfunction
表示正确的、上下文中的内核。
现在,在驱动程序 API 的§ 6.22 执行控制部分中,各种启动函数现在被描述为采用“CUDA 函数
CUfunction
或 CUDA 内核 CUkernel
:cuLaunchKernel
、cuLaunchKernelEx
、” cuLaunchCooperativeKernel
也许还有其他。
问题是,当我查看他们的签名时 - 他们都仍然采用普通的旧
CUfunction
's no CUkernel
- 并且没有重载函数在这个参数的选择上有所不同。
那么,什么给出了呢?我们可以推出
CUKernel
吗?
当与
CUkernel
一起使用时,您可以将 CUfunction
转换为 cuLaunchKernel
,如 CUDA 驱动程序 API 的这一部分所示:
请注意,该 API 还可用于启动无上下文内核 CUkernel,方法是使用 cuLibraryGetKernel() 查询句柄,然后通过转换为 CUfunction 将其传递给 API。在这里,启动内核的上下文将从指定的流 hStream 中获取,或者在 NULL 流的情况下从当前上下文中获取。
有关更多信息,请查看这篇关于上下文无关模块加载的博客文章。谢谢!