来自cuLaunchKernel的意外CUDA_ERROR_INVALID_VALUE

问题描述

我正在尝试使用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_VALUEkernelParams指定了内核参数(即extrakernelParams都不是{{ 1}})。

好吧,我没有这样做,但仍然得到extra。为了更加安全,我在启动内核之前就同步了流,但无济于事。

尝试启动时获得NULL的其他原因是什么?

解决方法

显然,在涉及CUDA_ERROR_INVALID_VALUE和/或kernelParams参数问题的多种情况下,您可能会遇到extras错误:

  1. kernelParamsextras均为空,但是内核采用参数。
  2. kernelParamsextras都不为空(这是正式记录的内容)
  3. kernelParams终止之前的nullptr中的元素数量与内核参数的数量不匹配。

,这不是详尽的列表。可能滥用extras也会导致此问题。