0

我正在尝试使用 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.

文档

CUDA_ERROR_INVALID_VALUE如果内核参数同时指定了kernelParamsand extra(即两者kernelParamsextra都是非NULL) ,则会返回错误。

好吧,我没有那样做,而且还在CUDA_ERROR_INVALID_VALUE。为了更加安全,我在启动内核之前同步了流 - 但无济于事。

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

4

1 回答 1

1

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

  1. kernelParams和都是extras空的,但内核接受参数。
  2. 两者都是非空的(这是官方记录的kernelParamsextras
  3. kernelParams终止值之前的元素nullptr数量与内核参数的数量不匹配。

这不是一个详尽的清单。可能滥用extras也会导致这种情况。

于 2020-08-16T10:46:50.833 回答