Cupy `RawKernel` CUDA_ERROR_NOT_FOUND:未找到命名符号 [cupy]

问题描述 投票:0回答:1

我正在尝试使用 cupy 的

RawKernel
在 python 中编写自定义 cuda 内核,但是我不断收到以下错误

Traceback (most recent call last):
  File "/nfs/users/xxxxxxxxx/git/raw_kernel.py", line 32, in <module>
    null.compile()
  File "cupy/_core/raw.pyx", line 291, in cupy._core.raw.RawKernel.compile
  File "cupy/_core/raw.pyx", line 117, in cupy._core.raw.RawKernel._kernel
  File "cupy/cuda/function.pyx", line 275, in cupy.cuda.function.Module.get_function
  File "cupy/cuda/function.pyx", line 216, in cupy.cuda.function.Function.__init__
  File "cupy_backends/cuda/api/driver.pyx", line 226, in cupy_backends.cuda.api.driver.moduleGetFunction
  File "cupy_backends/cuda/api/driver.pyx", line 60, in cupy_backends.cuda.api.driver.check_status
cupy_backends.cuda.api.driver.CUDADriverError: CUDA_ERROR_NOT_FOUND: named symbol not found

即使我定义了一个不执行任何操作的空函数,我也无法通过编译

none = """
__global__ void none() {
};
"""
null = cp.RawKernel(none, "null")
null.compile()

我正在使用 python 3.10.12 和 cupy 12.2.0。 cupyx 的

jit.Rawernel
装饰器可以代替。

cupy
1个回答
0
投票

您需要将函数的符号名称作为

RawKernel
参数传递。使用
extern "C"
避免符号名称被破坏。

none = """
extern "C" __global__ void none() {
};
"""
null = cp.RawKernel(none, "none")
null.compile()

请参阅 https://docs.cupy.dev/en/latest/user_guide/kernel.html#raw-kernels 了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.