提交 abbba6cf authored 作者: Frederic Bastien's avatar Frederic Bastien

removed the prefix cnda_ as this cause a bug with OutputGuard on the gpu.

上级 f6d0fcef
差异被折叠。
差异被折叠。
...@@ -885,20 +885,20 @@ class NaiveAlgo(object): ...@@ -885,20 +885,20 @@ class NaiveAlgo(object):
for iname in inputs: for iname in inputs:
print >> sio, """ print >> sio, """
//std::cerr << "C_CODE %(opname)s checking input %(iname)s\\n"; //std::cerr << "C_CODE %(opname)s checking input %(iname)s\\n";
if (%(nd)s != cnda_%(iname)s->nd) if (%(nd)s != %(iname)s->nd)
{ {
PyErr_Format(PyExc_TypeError, "need %(nd)s dims, not %%i", cnda_%(iname)s->nd); PyErr_Format(PyExc_TypeError, "need %(nd)s dims, not %%i", %(iname)s->nd);
%(fail)s; %(fail)s;
} }
for (int i = 0; i< %(nd)s; ++i) for (int i = 0; i< %(nd)s; ++i)
{ {
dims[i] = (dims[i] == 1) ? CudaNdarray_HOST_DIMS(cnda_%(iname)s)[i] : dims[i]; dims[i] = (dims[i] == 1) ? CudaNdarray_HOST_DIMS(%(iname)s)[i] : dims[i];
if ((CudaNdarray_HOST_DIMS(cnda_%(iname)s)[i] != 1) && (dims[i] != CudaNdarray_HOST_DIMS(cnda_%(iname)s)[i])) if ((CudaNdarray_HOST_DIMS(%(iname)s)[i] != 1) && (dims[i] != CudaNdarray_HOST_DIMS(%(iname)s)[i]))
{ {
//std::cerr << "C_CODE %(opname)s checking input %(iname)s failed\\n"; //std::cerr << "C_CODE %(opname)s checking input %(iname)s failed\\n";
PyErr_Format(PyExc_TypeError, "GpuElemwise input has incompatible dim[%%i] == %%i, where output has size %%i", PyErr_Format(PyExc_TypeError, "GpuElemwise input has incompatible dim[%%i] == %%i, where output has size %%i",
i, i,
CudaNdarray_HOST_DIMS(cnda_%(iname)s)[i], CudaNdarray_HOST_DIMS(%(iname)s)[i],
dims[i] dims[i]
); );
%(fail)s; %(fail)s;
...@@ -909,31 +909,31 @@ class NaiveAlgo(object): ...@@ -909,31 +909,31 @@ class NaiveAlgo(object):
#check that all outputs have valid dimensions #check that all outputs have valid dimensions
for oname in outputs: for oname in outputs:
print >> sio, """ print >> sio, """
for (int i = 0; (i< %(nd)s) && (cnda_%(oname)s); ++i) { for (int i = 0; (i< %(nd)s) && (%(oname)s); ++i) {
if (dims[i] != CudaNdarray_HOST_DIMS(cnda_%(oname)s)[i]) if (dims[i] != CudaNdarray_HOST_DIMS(%(oname)s)[i])
{ {
Py_DECREF(cnda_%(oname)s); Py_DECREF(%(oname)s);
cnda_%(oname)s = NULL; %(oname)s = NULL;
} }
} }
if (NULL == cnda_%(oname)s) if (NULL == %(oname)s)
{ {
cnda_%(oname)s = (CudaNdarray*)CudaNdarray_new_null(); %(oname)s = (CudaNdarray*)CudaNdarray_new_null();
if (!cnda_%(oname)s) if (!%(oname)s)
{ {
//error string already set //error string already set
%(fail)s; %(fail)s;
} }
if (CudaNdarray_alloc_contiguous(cnda_%(oname)s, %(nd)s, dims)) if (CudaNdarray_alloc_contiguous(%(oname)s, %(nd)s, dims))
{ {
//error string already set //error string already set
Py_DECREF(cnda_%(oname)s); Py_DECREF(%(oname)s);
cnda_%(oname)s = NULL; %(oname)s = NULL;
%(fail)s; %(fail)s;
} }
} }
//std::cerr << "ELEMWISE NEW %(oname)s nd" << cnda_%(oname)s->nd << "\\n"; //std::cerr << "ELEMWISE NEW %(oname)s nd" << %(oname)s->nd << "\\n";
//std::cerr << "ELEMWISE NEW %(oname)s data" << cnda_%(oname)s->devdata << "\\n"; //std::cerr << "ELEMWISE NEW %(oname)s data" << %(oname)s->devdata << "\\n";
""" % locals() """ % locals()
print >> sio, """ print >> sio, """
{ {
...@@ -943,11 +943,11 @@ class NaiveAlgo(object): ...@@ -943,11 +943,11 @@ class NaiveAlgo(object):
""" % locals() """ % locals()
for iname in inputs: for iname in inputs:
print >> sio, """ print >> sio, """
, CudaNdarray_DEV_DATA(cnda_%(iname)s), CudaNdarray_HOST_STRIDES(cnda_%(iname)s) , CudaNdarray_DEV_DATA(%(iname)s), CudaNdarray_HOST_STRIDES(%(iname)s)
""" % locals() """ % locals()
for oname in outputs: for oname in outputs:
print >> sio, """ print >> sio, """
, CudaNdarray_DEV_DATA(cnda_%(oname)s), CudaNdarray_HOST_STRIDES(cnda_%(oname)s) , CudaNdarray_DEV_DATA(%(oname)s), CudaNdarray_HOST_STRIDES(%(oname)s)
""" % locals() """ % locals()
print >> sio, """ print >> sio, """
)) ))
...@@ -956,8 +956,8 @@ class NaiveAlgo(object): ...@@ -956,8 +956,8 @@ class NaiveAlgo(object):
""" """
for oname in outputs: for oname in outputs:
print >> sio, """ print >> sio, """
Py_DECREF(cnda_%(oname)s); Py_DECREF(%(oname)s);
cnda_%(oname)s = NULL; %(oname)s = NULL;
""" % locals() """ % locals()
print >> sio, """ print >> sio, """
%(fail)s; %(fail)s;
......
差异被折叠。
...@@ -132,10 +132,10 @@ class CudaNdarrayType(Type): ...@@ -132,10 +132,10 @@ class CudaNdarrayType(Type):
def c_declare(self, name, sub): def c_declare(self, name, sub):
ndim = self.ndim ndim = self.ndim
c_typename = self.dtype_specs()[1] c_typename = self.dtype_specs()[1]
return """ CudaNdarray * cnda_%(name)s;""" %locals() return """ CudaNdarray * %(name)s;""" %locals()
def c_init(self, name, sub): def c_init(self, name, sub):
return "cnda_%(name)s = NULL;" % locals() return "%(name)s = NULL;" % locals()
def c_extract(self, name, sub): def c_extract(self, name, sub):
sio = StringIO.StringIO() sio = StringIO.StringIO()
...@@ -148,61 +148,61 @@ class CudaNdarrayType(Type): ...@@ -148,61 +148,61 @@ class CudaNdarrayType(Type):
if (CudaNdarray_Check(py_%(name)s)) if (CudaNdarray_Check(py_%(name)s))
{ {
//fprintf(stderr, "c_extract CNDA object w refcnt %%p %%i\\n", py_%(name)s, (py_%(name)s->ob_refcnt)); //fprintf(stderr, "c_extract CNDA object w refcnt %%p %%i\\n", py_%(name)s, (py_%(name)s->ob_refcnt));
cnda_%(name)s = (CudaNdarray*)py_%(name)s; %(name)s = (CudaNdarray*)py_%(name)s;
//std::cerr << "c_extract " << cnda_%(name)s << '\\n'; //std::cerr << "c_extract " << %(name)s << '\\n';
if (cnda_%(name)s->nd != %(nd)s) if (%(name)s->nd != %(nd)s)
{ {
PyErr_Format(PyExc_RuntimeError, "Some CudaNdarray has rank %%i, it was supposed to have rank %(nd)s", cnda_%(name)s->nd); PyErr_Format(PyExc_RuntimeError, "Some CudaNdarray has rank %%i, it was supposed to have rank %(nd)s", %(name)s->nd);
cnda_%(name)s = NULL; %(name)s = NULL;
%(fail)s; %(fail)s;
} }
//std::cerr << "c_extract " << cnda_%(name)s << " nd check passed\\n"; //std::cerr << "c_extract " << %(name)s << " nd check passed\\n";
""" %locals() """ %locals()
for i, b in enumerate(self.broadcastable): for i, b in enumerate(self.broadcastable):
if b: if b:
print >> sio, """ print >> sio, """
if (CudaNdarray_HOST_DIMS(cnda_%(name)s)[%(i)s] != 1) if (CudaNdarray_HOST_DIMS(%(name)s)[%(i)s] != 1)
{ {
PyErr_Format(PyExc_RuntimeError, "Some CudaNdarray has dim %%i on broadcastable dimension %%i", CudaNdarray_HOST_DIMS(cnda_%(name)s)[%(i)s], %(i)s); PyErr_Format(PyExc_RuntimeError, "Some CudaNdarray has dim %%i on broadcastable dimension %%i", CudaNdarray_HOST_DIMS(%(name)s)[%(i)s], %(i)s);
cnda_%(name)s = NULL; %(name)s = NULL;
%(fail)s; %(fail)s;
} }
//std::cerr << "c_extract " << cnda_%(name)s << "dim check %(i)s passed\\n"; //std::cerr << "c_extract " << %(name)s << "dim check %(i)s passed\\n";
//std::cerr << "c_extract " << cnda_%(name)s << "checking bcast %(i)s <" << cnda_%(name)s->str<< ">\\n"; //std::cerr << "c_extract " << %(name)s << "checking bcast %(i)s <" << %(name)s->str<< ">\\n";
//std::cerr << "c_extract " << cnda_%(name)s->str[%(i)s] << "\\n"; //std::cerr << "c_extract " << %(name)s->str[%(i)s] << "\\n";
if (CudaNdarray_HOST_STRIDES(cnda_%(name)s)[%(i)s]) if (CudaNdarray_HOST_STRIDES(%(name)s)[%(i)s])
{ {
//std::cerr << "c_extract bad stride detected...\\n"; //std::cerr << "c_extract bad stride detected...\\n";
PyErr_Format(PyExc_RuntimeError, "Some CudaNdarray has a nonzero stride %%i on a broadcastable dimension %%i", CudaNdarray_HOST_STRIDES(cnda_%(name)s)[%(i)s], %(i)s); PyErr_Format(PyExc_RuntimeError, "Some CudaNdarray has a nonzero stride %%i on a broadcastable dimension %%i", CudaNdarray_HOST_STRIDES(%(name)s)[%(i)s], %(i)s);
cnda_%(name)s = NULL; %(name)s = NULL;
%(fail)s; %(fail)s;
} }
//std::cerr << "c_extract " << cnda_%(name)s << "bcast check %(i)s passed\\n"; //std::cerr << "c_extract " << %(name)s << "bcast check %(i)s passed\\n";
""" %locals() """ %locals()
print >> sio, """ print >> sio, """
assert(cnda_%(name)s); assert(%(name)s);
Py_INCREF(py_%(name)s); Py_INCREF(py_%(name)s);
} }
else else
{ {
//fprintf(stderr, "FAILING c_extract CNDA object w refcnt %%p %%i\\n", py_%(name)s, (py_%(name)s->ob_refcnt)); //fprintf(stderr, "FAILING c_extract CNDA object w refcnt %%p %%i\\n", py_%(name)s, (py_%(name)s->ob_refcnt));
PyErr_SetString(PyExc_TypeError, "Argument not a CudaNdarray"); PyErr_SetString(PyExc_TypeError, "Argument not a CudaNdarray");
cnda_%(name)s = NULL; %(name)s = NULL;
%(fail)s; %(fail)s;
} }
//std::cerr << "c_extract done " << cnda_%(name)s << '\\n'; //std::cerr << "c_extract done " << %(name)s << '\\n';
""" % locals() """ % locals()
#print sio.getvalue() #print sio.getvalue()
return sio.getvalue() return sio.getvalue()
def c_cleanup(self, name, sub): def c_cleanup(self, name, sub):
return """ return """
//std::cerr << "cleanup " << py_%(name)s << " " << cnda_%(name)s << "\\n"; //std::cerr << "cleanup " << py_%(name)s << " " << %(name)s << "\\n";
//fprintf(stderr, "c_cleanup CNDA py_object w refcnt %%p %%i\\n", py_%(name)s, (py_%(name)s->ob_refcnt)); //fprintf(stderr, "c_cleanup CNDA py_object w refcnt %%p %%i\\n", py_%(name)s, (py_%(name)s->ob_refcnt));
if (cnda_%(name)s) if (%(name)s)
{ {
//fprintf(stderr, "c_cleanup CNDA cn_object w refcnt %%p %%i\\n", cnda_%(name)s, (cnda_%(name)s->ob_refcnt)); //fprintf(stderr, "c_cleanup CNDA cn_object w refcnt %%p %%i\\n", %(name)s, (%(name)s->ob_refcnt));
Py_XDECREF(cnda_%(name)s); Py_XDECREF(%(name)s);
} }
//std::cerr << "cleanup done" << py_%(name)s << "\\n"; //std::cerr << "cleanup done" << py_%(name)s << "\\n";
""" % locals() """ % locals()
...@@ -211,7 +211,7 @@ class CudaNdarrayType(Type): ...@@ -211,7 +211,7 @@ class CudaNdarrayType(Type):
"""Override `CLinkerOp.c_sync` """ """Override `CLinkerOp.c_sync` """
return """ return """
//std::cerr << "sync\\n"; //std::cerr << "sync\\n";
if (NULL == cnda_%(name)s) { if (NULL == %(name)s) {
// failure: sync None to storage // failure: sync None to storage
Py_XDECREF(py_%(name)s); Py_XDECREF(py_%(name)s);
py_%(name)s = Py_None; py_%(name)s = Py_None;
...@@ -219,10 +219,10 @@ class CudaNdarrayType(Type): ...@@ -219,10 +219,10 @@ class CudaNdarrayType(Type):
} }
else else
{ {
if (py_%(name)s != (PyObject*)cnda_%(name)s) if (py_%(name)s != (PyObject*)%(name)s)
{ {
Py_XDECREF(py_%(name)s); Py_XDECREF(py_%(name)s);
py_%(name)s = (PyObject*)cnda_%(name)s; py_%(name)s = (PyObject*)%(name)s;
Py_INCREF(py_%(name)s); Py_INCREF(py_%(name)s);
} }
assert(py_%(name)s->ob_refcnt); assert(py_%(name)s->ob_refcnt);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论