Python 使用Numba ROC时如何手动释放内存?

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 =

我使用一个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 = 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内存