public static void PoolingBackward(DNNPoolingDesc desc, Tensor x, Tensor y, Tensor dx, Tensor dy) { using (var dnn = CudaHelpers.TSContextForTensor(x).DNNForTensor(x)) { var poolingDesc = new PoolingDescriptor(); poolingDesc.SetPoolingNdDescriptor((cudnnPoolingMode)desc.Mode, cudnnNanPropagation.PropagateNan, desc.WindowDims.Length, desc.WindowDims, desc.Padding, desc.Strides); using (var xPtr = GetDeviceVar(x)) using (var yPtr = GetDeviceVar(y)) using (var dxPtr = GetDeviceVar(dx)) using (var dyPtr = GetDeviceVar(dy)) using (var xDesc = GetDescriptor(x)) using (var yDesc = GetDescriptor(y)) using (var dxDesc = GetDescriptor(dx)) using (var dyDesc = GetDescriptor(dy)) { // Note: ManagedCUDA argument names may be slightly misleading (src refers to 'y' here, and dest to 'x') dnn.Value.PoolingBackward(poolingDesc, 1, yDesc, yPtr, dyDesc, dyPtr, xDesc, xPtr, 0, dxDesc, dxPtr); } } }
public static void PoolingForward(DNNPoolingDesc desc, Tensor x, Tensor y) { using (var dnn = CudaHelpers.TSContextForTensor(x).DNNForTensor(x)) { var poolingDesc = new PoolingDescriptor(); poolingDesc.SetPoolingNdDescriptor((cudnnPoolingMode)desc.Mode, cudnnNanPropagation.PropagateNan, desc.WindowDims.Length, desc.WindowDims, desc.Padding, desc.Strides); using (var xPtr = GetDeviceVar(x)) using (var yPtr = GetDeviceVar(y)) using (var xDesc = GetDescriptor(x)) using (var yDesc = GetDescriptor(y)) { dnn.Value.PoolingForward(poolingDesc, 1, xDesc, xPtr, 0, yDesc, yPtr); } } }