cuda - 是什么让 cuLaunchKernel 因 CUDA_ERROR_INVALID_HANDLE 而失败?
问题描述
cudLaunchKernel()
我正在使用驱动程序 API 函数启动我编译的 CUDA 内核。我在kernelParams
数组中传递我的参数,并传递nullptr
参数extra
。
不幸的是,这失败了,错误:CUDA_ERROR_INVALID_HANDLE
. 为什么?我检查了驱动程序 API 文档以查看函数在什么情况下可能会失败,并编辑它讨论了失败CUDA_ERROR_INVALID_VALUE
(不是同一件事)。它没有讨论我得到的错误。
由于有多个参数cuLaunchKernel()
是某种句柄 - 这种失败意味着什么?(如果有多种选择——它们是什么?)
解决方案
一种可能性是由于 CUDA 驱动程序上下文切换而导致的失败。您可能无意中执行了一些推送或替换 CUDA 设备当前上下文的操作;并且加载的模块是上下文的一部分 - 因此您编译和加载的内核不能再在当前上下文中加载。这会触发CUDA_ERROR_INVALID_HANDLE
失败。
假设是这种情况,请在启动前切换上下文,例如:
cuCtxPushCurrent(my_driver_context);
cuLaunchKernel(/*etc. etc. */);
/* possibly */ cuCtxPopCurrent(NULL);
或者像这样:
cuCtxSetCurrent(my_driver_context);
cuLaunchKernel(/*etc. etc. */);
请注意,如果您弹出并忽略对有效上下文的唯一引用,则可能存在内存泄漏的风险;并且您还可能会冒一些其他代码的风险,假设它已经放置的上下文仍然是活动的。
推荐阅读
- corda - 在 Corda 4.0 上使用财务 cordapp 启动节点时无法创建数据源 [errorCode=13ajh5q]
- angular - 将数组转换为消息类型数组
- r - 应用在 vector/data.frame 列上返回 data.frame/tibble 的函数并绑定结果
- sonarqube - 升级声纳:结果改变
- android - PdfWriter 类不创建任何 pdf
- azure - 本地开发时未创建 Azure Functions 表绑定
- window - AHK WinActive 无法识别窗口
- google-cloud-dataproc - 使用 --properties 更新 fs.defaltFS 时 Dataproc 创建失败
- java - 我的 ListView 没有显示我的数据,但显示了我的包名
- wordpress - 如何合并帖子类别和帖子ID并将其保存到自定义字段