cupy.RawModule 使用 name_expressions 和 nvcc and/or 路径

cupy.RawModule using name_expressions and nvcc and/or path

我正在使用 CuPy 测试库中的 cuda 内核。更具体地说,我使用 cupy.RawModule 来利用 python 中的内核。但是,内核是模板化的并包含在命名空间中。在 CuPy 8.0.0 中 RawModule 的 name_expressions 参数之前,我必须手动将 c++-mangled 名称复制到 RawModule 的 get_function() 方法中。使用 name_expressions 我认为这应该是可能的,但是,这需要使用 code 参数结合 backend='nvrtc'.

从源代码编译代码

是否可以启用(以下任何一项)?:

  1. name_expressions 结合 path
  2. name_expressions 结合 backend='nvcc'

Should it be possible to enable (any of the below)?:

  1. 'name_expressions' in conjunction with 'path'
  2. 'name_expressions' in conjunction with 'backend'='nvcc'

两个问题的答案都是否。

name_expressions 功能需要使用 NVRTC just-in-time (JIT) 编译 C++ 模板内核的源代码,而 path 参数用于加载外部 cubin、fatbin、或 ptx 代码。如果要编译外部源代码,可以先将其加载到 Python 中,然后将其作为 code 参数传递:

with open('my_cuda_cpp_code.cu') as f:
    code = f.read()

mod = cp.RawModule(code=code, name_expressions=(...), ...)

不幸的是,与 NVRTC 不同,NVCC 不提供 API 到 return 损坏的名称,因此无法使用 NVCC。如果您将 backend='nvcc' 传递给 RawModule,它会引发错误。