微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用name_expressions和nvcc和/或路径的cupy.RawModule

如何解决使用name_expressions和nvcc和/或路径的cupy.RawModule

我正在使用CuPy从库中测试cuda内核。更具体地说,我使用cupy.RawModule来利用python中的内核。但是,内核是模板化的,并包含在名称空间中。在CuPy 8.0.0中将name_expressions参数设置为RawModule之前,我不得不将c ++混杂的名称手动复制到RawModule的get_function()方法中。我认为使用name_expressions是可行的,但是,这要求使用code参数和backend='nvrtc'组合从源代码编译代码

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

  1. name_expressionspath
  2. name_expressionsbackend='nvcc'

解决方法

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

  1. “ name_expressions”与“ path”结合使用
  2. 'name_expressions'与'backend'='nvcc'

两个问题的答案都为否。

name_expressions功能需要使用NVRTC即时编译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以返回错误的名称,因此无法使用NVCC。如果将backend='nvcc'传递给RawModule,则会引发错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。