code: func NewReduction(reduceTensorOp ReduceTensorOp, reduceTensorCompType DataType, reduceTensorNanOpt NanPropagation, reduceTensorIndices ReduceTensorIndices, reduceTensorIndicesType IndicesType) (retVal *Reduction, err error) {
  	var internal C.cudnnReduceTensorDescriptor_t
  	if err := result(C.cudnnCreateReduceTensorDescriptor(&internal)); err != nil {
  		return nil, err
  	}
  
  	if err := result(C.cudnnSetReduceTensorDescriptor(internal, reduceTensorOp.C(), reduceTensorCompType.C(), reduceTensorNanOpt.C(), reduceTensorIndices.C(), reduceTensorIndicesType.C())); err != nil {
  		return nil, err
  	}
  
  	retVal = &Reduction{
  		internal:                internal,
  		reduceTensorOp:          reduceTensorOp,
  		reduceTensorCompType:    reduceTensorCompType,
  		reduceTensorNanOpt:      reduceTensorNanOpt,
  		reduceTensorIndices:     reduceTensorIndices,
  		reduceTensorIndicesType: reduceTensorIndicesType,
  	}
  	runtime.SetFinalizer(retVal, destroyReduction)
  	return retVal, nil
  }
docs: // NewReduction creates a new Reduction.