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

Set stride to 0 on length-1 dimension in subtensor

If a CudaNdarray has the right shape to be used as storage for a broadcastable Variable, its stride should be 0. Closes gh-597.
上级 d596f2f0
...@@ -1542,7 +1542,8 @@ CudaNdarray_Subscript(PyObject * py_self, PyObject * key) ...@@ -1542,7 +1542,8 @@ CudaNdarray_Subscript(PyObject * py_self, PyObject * key)
return NULL; return NULL;
} }
//initialize dimension 0 of rval //initialize dimension 0 of rval
CudaNdarray_set_stride(rval, 0, step * CudaNdarray_HOST_STRIDES(self)[0]); CudaNdarray_set_stride(rval, 0,
(slen == 1) ? 0 : step * CudaNdarray_HOST_STRIDES(self)[0]);
CudaNdarray_set_dim(rval, 0, slen); CudaNdarray_set_dim(rval, 0, slen);
if (verbose) std::cerr << "rval stride " << CudaNdarray_HOST_STRIDES(rval)[0] << "\n"; if (verbose) std::cerr << "rval stride " << CudaNdarray_HOST_STRIDES(rval)[0] << "\n";
// initialize dimensions > 0 of rval // initialize dimensions > 0 of rval
...@@ -1614,7 +1615,8 @@ CudaNdarray_Subscript(PyObject * py_self, PyObject * key) ...@@ -1614,7 +1615,8 @@ CudaNdarray_Subscript(PyObject * py_self, PyObject * key)
return NULL; return NULL;
} }
rval->devdata += start * CudaNdarray_HOST_STRIDES(self)[d]; rval->devdata += start * CudaNdarray_HOST_STRIDES(self)[d];
CudaNdarray_set_stride(rval, rval_d, step * CudaNdarray_HOST_STRIDES(self)[d]); CudaNdarray_set_stride(rval, rval_d,
(slen == 1) ? 0 : step * CudaNdarray_HOST_STRIDES(self)[d]);
CudaNdarray_set_dim(rval, rval_d, slen); CudaNdarray_set_dim(rval, rval_d, slen);
if (0) if (0)
{ {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论