提交 ab47e121 authored 作者: Arnaud Bergeron's avatar Arnaud Bergeron

Add a failsafe in the inplace C code to make a copy if required.

上级 c42d79a6
...@@ -158,8 +158,15 @@ class GpuGer(BlasOp, Ger): ...@@ -158,8 +158,15 @@ class GpuGer(BlasOp, Ger):
if self.destructive: if self.destructive:
code = """ code = """
Py_XDECREF(%(out)s); Py_XDECREF(%(out)s);
if (!GpuArray_ISONESEGMENT(&%(A)s->ga)) {
%(out)s = pygpu_copy(%(A)s, GA_ANY_ORDER);
if (%(out)s == NULL) {
%(fail)s
}
} else {
%(out)s = %(A)s; %(out)s = %(A)s;
Py_INCREF(%(out)s); Py_INCREF(%(out)s);
}
""" % vars """ % vars
else: else:
code = """ code = """
...@@ -182,7 +189,7 @@ class GpuGer(BlasOp, Ger): ...@@ -182,7 +189,7 @@ class GpuGer(BlasOp, Ger):
return code return code
def c_code_cache_version(self): def c_code_cache_version(self):
return (0,) return (1,)
gpuger_no_inplace = GpuGer(destructive=False) gpuger_no_inplace = GpuGer(destructive=False)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论