问题描述
我正在尝试使用CUDA驱动程序API启动内核。具体来说,我正在打电话
CUresult CUDAAPI culaunchKernel(
CUfunction f,unsigned int gridDimX,unsigned int gridDimY,unsigned int gridDimZ,unsigned int blockDimX,unsigned int blockDimY,unsigned int blockDimZ,unsigned int sharedMemBytes,CUstream hStream,void **kernelParams,void **extra);
我仅使用kernelParams
,并且将nullptr
传递给extra
。现在,对于我的一个内核,我得到CUDA_ERROR_INVALID_VALUE
。
文档says:
如果同时用
CUDA_ERROR_INVALID_VALUE
和kernelParams
指定了内核参数(即extra
和kernelParams
都不是{{ 1}})。
好吧,我没有这样做,但仍然得到extra
。为了更加安全,我在启动内核之前就同步了流,但无济于事。
尝试启动时获得NULL
的其他原因是什么?
解决方法
显然,在涉及CUDA_ERROR_INVALID_VALUE
和/或kernelParams
参数问题的多种情况下,您可能会遇到extras
错误:
-
kernelParams
和extras
均为空,但是内核采用参数。 -
kernelParams
和extras
都不为空(这是正式记录的内容) -
kernelParams
终止之前的nullptr
中的元素数量与内核参数的数量不匹配。
,这不是详尽的列表。可能滥用extras
也会导致此问题。