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'
.
从源代码编译代码
是否可以启用(以下任何一项)?:
name_expressions
结合 path
name_expressions
结合 backend='nvcc'
Should it be possible to enable (any of the below)?:
- 'name_expressions' in conjunction with 'path'
- '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,它会引发错误。
我正在使用 CuPy 测试库中的 cuda 内核。更具体地说,我使用 cupy.RawModule
来利用 python 中的内核。但是,内核是模板化的并包含在命名空间中。在 CuPy 8.0.0 中 RawModule 的 name_expressions
参数之前,我必须手动将 c++-mangled 名称复制到 RawModule 的 get_function()
方法中。使用 name_expressions
我认为这应该是可能的,但是,这需要使用 code
参数结合 backend='nvrtc'
.
是否可以启用(以下任何一项)?:
name_expressions
结合path
name_expressions
结合backend='nvcc'
Should it be possible to enable (any of the below)?:
- 'name_expressions' in conjunction with 'path'
- '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,它会引发错误。