提交 83689455 authored 作者: --global's avatar --global

Only initialize output memory when max-pooling

上级 2b8457dc
...@@ -1485,14 +1485,28 @@ if (CudaNdarray_prep_output(&%(output_grad)s, ...@@ -1485,14 +1485,28 @@ if (CudaNdarray_prep_output(&%(output_grad)s,
%(fail)s %(fail)s
} }
// Init output memory with 0s because cudnnPoolingBackward does not support // Get the pooling_mode to be used. Variable 'tmp' is used because we don't
// uninitialized memory. // care about the other outputs of the function
if (cudaSuccess != cudaMemset(CudaNdarray_DEV_DATA(%(output_grad)s), 0, cudnnPoolingMode_t pooling_mode;
CudaNdarray_SIZE(%(output_grad)s) * int tmp;
sizeof(float))){ err%(name)s = cudnnGetPoolingNdDescriptor(%(desc)s, 0, &pooling_mode, &tmp,
PyErr_SetString(PyExc_RuntimeError, &tmp, &tmp, &tmp);
"GpuDnnPoolGrad: Error initializing output memory."); if (err%(name)s != CUDNN_STATUS_SUCCESS) {
%(fail)s PyErr_Format(PyExc_RuntimeError,
"GpuDnnPoolGrad: could not obtain pooling mode");
%(fail)s
}
// If doing max-pooling, init output memory with 0s because
// cudnnPoolingBackward does not support uninitialized memory for max-pooling.
if (pooling_mode == CUDNN_POOLING_MAX){
if (cudaSuccess != cudaMemset(CudaNdarray_DEV_DATA(%(output_grad)s), 0,
CudaNdarray_SIZE(%(output_grad)s) *
sizeof(float))){
PyErr_SetString(PyExc_RuntimeError,
"GpuDnnPoolGrad: Error initializing output memory.");
%(fail)s
}
} }
if (c_set_tensorNd(%(output_grad)s, %(output_grad_desc)s) != 0) if (c_set_tensorNd(%(output_grad)s, %(output_grad_desc)s) != 0)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论