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