提交 ee7592e7 authored 作者: Pascal Lamblin's avatar Pascal Lamblin

Do not resize output if we do not own the memory

Since the contract regarding output memory has changed, it is not guaranteed that the op itself did allocate that memory.
上级 bd718409
...@@ -750,9 +750,14 @@ class Elemwise(Op): ...@@ -750,9 +750,14 @@ class Elemwise(Op):
shape = [max(values) shape = [max(values)
for values in zip(*[input.shape for input in inputs])] for values in zip(*[input.shape for input in inputs])]
if odat is not None: if odat is not None:
# reuse storage if we can if odat.shape != shape:
odat.resize(shape, refcheck=0) try:
else: # reuse storage if we can
odat.resize(shape)
except ValueError:
# odat cannot be resized, we have to allocate one
odat = None
if odat is None:
odat = numpy.ndarray(shape, dtype=output.type.dtype) odat = numpy.ndarray(shape, dtype=output.type.dtype)
storage[0] = odat storage[0] = odat
else: else:
...@@ -767,8 +772,12 @@ class Elemwise(Op): ...@@ -767,8 +772,12 @@ class Elemwise(Op):
for values in zip(*[input.shape for values in zip(*[input.shape
for input in inputs])] for input in inputs])]
if odat is not None: if odat is not None:
odat.resize(shape, refcheck=0) if odat.shape != shape:
else: try:
odat.resize(shape)
except ValueError:
odat = None
if odat is None:
odat = numpy.ndarray(shape, dtype=output.type.dtype) odat = numpy.ndarray(shape, dtype=output.type.dtype)
storage[0] = odat storage[0] = odat
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论