解决CuPy v10以上版本中cuda.compile_with_cache方法返回为None:‘NoneType‘ object has no attribute ‘get_function‘

在CuPy v10及以上版本中,由于`compile_with_cache`已被弃用,导致使用时出现AttributeError。解决这个问题的方法是改用`cupy.RawKernel`。首先定义函数名和CUDA内核代码,然后直接使用`cupy.RawKernel(strKernel, strFunction)`来创建并获取函数接口,从而避免`get_function`报错。
摘要由CSDN通过智能技术生成

CuPy v10以上版本中使用cuda.compile_with_cache方法,在get_function时报错AttributeError:‘NoneType’ object has no attribute ‘get_function’,可以使用cupy.RawKernel来替换compile_with_cache。

问题描述

当我们想要使用cupy对代码进行加速时,一种可行的做法是,首先定义函数名字符串strFunction,和cpp代码字符串strKernel:

import cupy
strFunction = 'test_func'
strKernel = '''
extern "C" __global__ void test_func(
        const int n,
        const float* input,
        float* output
    ) {
    xxx...
    xxx...
    xxx...
    }
'''

然后利用cuda.compile_with_cache将strKernel中的代码进行编译,得到调用接口:

cupy_krl = cupy.cuda.compile_with_cache(strKernel)
cupy_launchr = cupy_krl.get_function(strFunction )

然后即可使用该函数:

output = cupy_launchr( grid,
	                   block,
	                   shared_mem,
	                   args=[xxx, xxx, xxx...])

但是在CuPy v10以上版本中,可能会报错:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'get_function'

原因

这是由于在CuPy v10及其之后的版本中,cupy.cuda.compile_with_cache方法已经被弃用了。

解决方案

一个可行的解决方案是使用cupy.RawKernel替换cupy.cuda.compile_with_cache,即将下列代码

cupy_krl = cupy.cuda.compile_with_cache(strKernel)
cupy_launchr = cupy_krl.get_function(strFunction )

替换为

cupy_launchr = cupy.RawKernel(strKernel, strFunction)

即可在CuPy v10以上版本中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值