提交 b46ab94d authored 作者: Marc-Alexandre Cote's avatar Marc-Alexandre Cote

Fixed memory leaks in cumsum and cumprod.

上级 ff0abb5f
...@@ -72,6 +72,7 @@ class CumsumOp(theano.Op): ...@@ -72,6 +72,7 @@ class CumsumOp(theano.Op):
%(fail)s; %(fail)s;
{ {
PyArray_CumSum(%(x)s, NPY_MAXDIMS, type_num_%(x)s, %(z)s); PyArray_CumSum(%(x)s, NPY_MAXDIMS, type_num_%(x)s, %(z)s);
Py_XDECREF(%(z)s); // Because PyArray_CumSum returns a newly created reference on %(z)s.
} }
""" % locals() """ % locals()
else: else:
...@@ -86,13 +87,14 @@ class CumsumOp(theano.Op): ...@@ -86,13 +87,14 @@ class CumsumOp(theano.Op):
%(fail)s; %(fail)s;
{ {
PyArray_CumSum(%(x)s, %(axis)s, type_num_%(x)s, %(z)s); PyArray_CumSum(%(x)s, %(axis)s, type_num_%(x)s, %(z)s);
Py_XDECREF(%(z)s); // Because PyArray_CumSum returns a newly created reference on %(z)s.
} }
""" % locals() """ % locals()
return code return code
def c_code_cache_version(self): def c_code_cache_version(self):
return (1,) return (3,)
def __str__(self): def __str__(self):
return "%s{%s}" % (self.__class__.__name__, self.axis) return "%s{%s}" % (self.__class__.__name__, self.axis)
...@@ -179,6 +181,7 @@ class CumprodOp(theano.Op): ...@@ -179,6 +181,7 @@ class CumprodOp(theano.Op):
%(fail)s; %(fail)s;
{ {
PyArray_CumProd(%(x)s, NPY_MAXDIMS, type_num_%(x)s, %(z)s); PyArray_CumProd(%(x)s, NPY_MAXDIMS, type_num_%(x)s, %(z)s);
Py_XDECREF(%(z)s); // Because PyArray_CumSum returns a newly created reference on %(z)s.
} }
""" % locals() """ % locals()
else: else:
...@@ -193,13 +196,14 @@ class CumprodOp(theano.Op): ...@@ -193,13 +196,14 @@ class CumprodOp(theano.Op):
%(fail)s; %(fail)s;
{ {
PyArray_CumProd(%(x)s, %(axis)s, type_num_%(x)s, %(z)s); PyArray_CumProd(%(x)s, %(axis)s, type_num_%(x)s, %(z)s);
Py_XDECREF(%(z)s); // Because PyArray_CumSum returns a newly created reference on %(z)s.
} }
""" % locals() """ % locals()
return code return code
def c_code_cache_version(self): def c_code_cache_version(self):
return (1,) return (2,)
def __str__(self): def __str__(self):
return "%s{%s}" % (self.__class__.__name__, self.axis) return "%s{%s}" % (self.__class__.__name__, self.axis)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论