簡體   English   中英

是什么讓 cuLaunchKernel 因 CUDA_ERROR_INVALID_HANDLE 而失敗?

[英]What makes cuLaunchKernel fail with CUDA_ERROR_INVALID_HANDLE?

我正在啟動一個 CUDA kernel 我已經編譯,使用cudLaunchKernel()驅動程序 API ZC1C4252748EC178 我在kernelParams數組中傳遞我的參數,並為extra參數傳遞nullptr

不幸的是,這失敗了,錯誤: CUDA_ERROR_INVALID_HANDLE 為什么? 我檢查了驅動程序 API 文檔,了解 function 在什么情況下可能會失敗,並編輯它討論了CUDA_ERROR_INVALID_VALUE的失敗(不是同一件事)。 它沒有討論我得到的錯誤。

由於cuLaunchKernel()有多個參數,這是某種句柄 - 這個失敗意味着什么? (如果有多種選擇——它們是什么?)

一種可能性是由於 CUDA 驅動程序上下文切換導致的故障。 您可能無意中執行了一些操作來推送或替換 CUDA 設備的當前上下文; 並且加載的模塊是上下文的一部分 - 因此您編譯和加載的 kernel 不能再在當前上下文中加載。 這會觸發CUDA_ERROR_INVALID_HANDLE失敗。

假設是這種情況,請在啟動前切換上下文,例如:

cuCtxPushCurrent(my_driver_context);
cuLaunchKernel(/*etc. etc. */);
/* possibly */ cuCtxPopCurrent(NULL);

或者像這樣:

cuCtxSetCurrent(my_driver_context);
cuLaunchKernel(/*etc. etc. */);

請注意,如果您彈出並忽略對有效上下文的唯一引用,您可能會面臨 memory 泄漏的風險; 並且您還可能會冒一些其他代碼的風險,假設它已經放置的上下文仍然是活動的。

好吧,就我而言,這是一個 OOM 錯誤(內存不足)錯誤,由於某種原因沒有這樣報告。 當我減小 model 的批量大小時,它起作用了。 也許你應該檢查是否也是這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM