Python 使用Numba ROC时如何手动释放内存?
我使用一个numba函数从多个其他数组创建一个数组,然后将其存储在一个类中。这是我的课,效果很好:Python 使用Numba ROC时如何手动释放内存?,python,arrays,numba,Python,Arrays,Numba,我使用一个numba函数从多个其他数组创建一个数组,然后将其存储在一个类中。这是我的课,效果很好: kv_ty = (types.unicode_type, types.ListType(types.float64)) patternSpec = [('d',types.DictType(*kv_ty))] @jitclass(patternSpec) class patternHolder(object): def __init__(self): self.d =
kv_ty = (types.unicode_type, types.ListType(types.float64))
patternSpec = [('d',types.DictType(*kv_ty))]
@jitclass(patternSpec)
class patternHolder(object):
def __init__(self):
self.d = typed.Dict.empty(*kv_ty)
def patternAdd(self, name, value):
self.d[name] = value
def patternAddList(self,name,value):
for i in range(len(name)):
nVal = List(value[i])
self.d[name[i]] = nVal
def patternGet(self, name):
value = self.d[name]
return value
我的代码的numba部分的结构是在循环中调用一个较小的函数。这个在循环中调用的函数也由numba加速,它包含许多其他不同的函数
这是一个小的视觉表示:
from numba import njit
from numba.typed import List
@njit
def smallFunc(p):
#calls other functions
func2(p)
func3(p)
func4(p)
@njit
def func2(p):
#does stuff then adds to the class example:
lister = List([List(priceUp), List(priceDown), List(slopeUp), List(slopeDown), List(priceTimeUp), List(priceTimeDown), List(slopeTimeUp), List(slopeTimeDown)])
p.patternAddList(List(['priceUp', 'priceDown', 'slopeUp', 'slopeDown', 'priceTimeUp', 'priceTimeDown', 'slopeTimeUp', 'slopeTimeDown']),lister)
@njit
def func3(p):
#does stuff then adds to the class
@njit
def func4(p):
#does stuff then adds to the class
p = patternHolder()
for i in range(50000):
smallFunc(p)
除了for循环之外,它的每个部分都只是用于视觉表示。函数被多次调用以添加到上面指定的类并返回某些值。我的代码运行得很好,只是在我向类中添加了需要添加的列表和值之后,我创建的numpy数组会一直保留在GPU上,直到循环退出。我想要的是,随着代码的进行,能够手动将我不再需要的所有numpy数组聚集到设备上,然后清除该设备。使用numba.roc
您可以使用numba.roc.to_设备(obj,context,copy=True,to=None)手动将numpy数组传输到设备。
我希望能够将to选项指定到特定编号的设备。然后,当我完成该功能时,完全清除设备。但是,我在文档中没有找到任何允许我使用numba roc清除设备的内容。我还看到了numba.roc.registration(*数组)
,它允许您将多个数组聚集在一起。如果与上下文一起使用,则会自动取消注册。或numba.roc.deregister(*数组)
可以自动调用以取消数组注册。这会做什么,我想在条款,然后清除它从GPU内存