public void BackwardData(CudnnFilterDescriptor filter, double[] filterData, CudnnTensorDescriptor diffTensor, double[] diffData, CudnnConvolutionDescriptor convolution, CudnnTensorDescriptor gradient, double[] gradientData, CudnnAccumulateResult accumulate) { Contract.Requires(filter != null); Contract.Requires(filterData != null); Contract.Requires(diffTensor != null); Contract.Requires(diffData != null); Contract.Requires(convolution != null); Contract.Requires(gradient != null); Contract.Requires(gradientData != null); ThrowIfNotInitialized(); CheckIfCompatible(CudnnType.Double, filter, diffTensor, gradient); using (var filterDataGpu = new CudaDeviceVariable <double>(filterData.Length)) using (var diffDataGpu = new CudaDeviceVariable <double>(diffData.Length)) using (var gradientDataGpu = new CudaDeviceVariable <double>(gradientData.Length)) { filterDataGpu.CopyToDevice(filterData); diffDataGpu.CopyToDevice(diffData); Invoke(() => CudnnNativeMethods.cudnnConvolutionBackwardData(handle, filter.Handle, filterDataGpu.DevicePointer, diffTensor.Handle, diffDataGpu.DevicePointer, convolution.Handle, gradient.Handle, gradientDataGpu.DevicePointer, accumulate)); gradientDataGpu.CopyToHost(gradientData); } }
public void BackwardData(CudnnFilterDescriptor filter, CudaDeviceVariable <double> filterData, CudnnTensorDescriptor diffTensor, CudaDeviceVariable <double> diffData, CudnnConvolutionDescriptor convolution, CudnnTensorDescriptor gradient, CudaDeviceVariable <double> gradientData, CudnnAccumulateResult accumulate) { Contract.Requires(filter != null); Contract.Requires(filterData != null); Contract.Requires(diffTensor != null); Contract.Requires(diffData != null); Contract.Requires(convolution != null); Contract.Requires(gradient != null); Contract.Requires(gradientData != null); ThrowIfNotInitialized(); CheckIfCompatible(CudnnType.Double, filter, diffTensor, gradient); Invoke(() => CudnnNativeMethods.cudnnConvolutionBackwardData(handle, filter.Handle, filterData.DevicePointer, diffTensor.Handle, diffData.DevicePointer, convolution.Handle, gradient.Handle, gradientData.DevicePointer, accumulate)); }
public void BackwardData(CudnnFilterDescriptor filter, CudaDeviceVariable<float> filterData, CudnnTensorDescriptor diffTensor, CudaDeviceVariable<float> diffData, CudnnConvolutionDescriptor convolution, CudnnTensorDescriptor gradient, CudaDeviceVariable<float> gradientData, CudnnAccumulateResult accumulate) { Contract.Requires(filter != null); Contract.Requires(filterData != null); Contract.Requires(diffTensor != null); Contract.Requires(diffData != null); Contract.Requires(convolution != null); Contract.Requires(gradient != null); Contract.Requires(gradientData != null); ThrowIfNotInitialized(); CheckIfCompatible(CudnnType.Float, filter, diffTensor, gradient); Invoke(() => CudnnNativeMethods.cudnnConvolutionBackwardData(handle, filter.Handle, filterData.DevicePointer, diffTensor.Handle, diffData.DevicePointer, convolution.Handle, gradient.Handle, gradientData.DevicePointer, accumulate)); }
public CudnnConvolutionDescriptorParameters(CudnnConvolutionMode mode, CudnnTensorDescriptor tensor, CudnnFilterDescriptor filter, int paddingHeight, int paddingWidth, int verticalStride, int horizontalStride, int upscaleVertical = 1, int upscaleHorizontal = 1) { if (tensor == null) { throw new ArgumentNullException("tensor"); } if (filter == null) { throw new ArgumentNullException("tensor"); } if (upscaleVertical != 1 || upscaleHorizontal != 1) { throw new NotSupportedException("The parameter upscaleVertical or upscaleHorizontal is not 1"); } if (verticalStride < 1 || horizontalStride < 1) { throw new ArgumentException("One of the parameters verticalStride or horizontalStride is negative."); } if (tensor.Parameters.Type != filter.Parameters.Type) { throw new ArgumentException("The Type of the tensor and filter descriptors differ or have invalid values."); } if (filter.Parameters.Input != tensor.Parameters.Channels) { throw new ArgumentException("The number of feature maps of the tensor descriptor and the number of input feature maps of the filter differ."); } Contract.EndContractBlock(); this.Mode = mode; this.Tensor = tensor; this.Filter = filter; this.HeightPadding = paddingHeight; this.WidthPadding = paddingWidth; this.HeightStride = verticalStride; this.WidthStride = horizontalStride; this.HeightUpscale = upscaleVertical; this.WidthUpscale = upscaleHorizontal; }
public void Forward(CudnnTensorDescriptor srcTensor, double[] srcData, CudnnFilterDescriptor filter, double[] filterData, CudnnConvolutionDescriptor convolution, CudnnTensorDescriptor destTensor, double[] destData, CudnnAccumulateResult accumulate) { Contract.Requires(srcTensor != null); Contract.Requires(srcData != null); Contract.Requires(filter != null); Contract.Requires(filterData != null); Contract.Requires(convolution != null); Contract.Requires(destTensor != null); Contract.Requires(destData != null); ThrowIfNotInitialized(); CheckIfCompatible(CudnnType.Double, srcTensor, destTensor, filter); using (var srcDataGpu = new CudaDeviceVariable <double>(srcData.Length)) using (var filterDataGpu = new CudaDeviceVariable <double>(filterData.Length)) using (var destDataGpu = new CudaDeviceVariable <double>(destData.Length)) { srcDataGpu.CopyToDevice(srcData); filterDataGpu.CopyToDevice(filterData); Invoke(() => CudnnNativeMethods.cudnnConvolutionForward(handle, srcTensor.Handle, srcDataGpu.DevicePointer, filter.Handle, filterDataGpu.DevicePointer, convolution.Handle, destTensor.Handle, destDataGpu.DevicePointer, accumulate)); destDataGpu.CopyToHost(destData); } }
public void Forward(CudnnTensorDescriptor srcTensor, CudaDeviceVariable <double> srcData, CudnnFilterDescriptor filter, CudaDeviceVariable <double> filterData, CudnnConvolutionDescriptor convolution, CudnnTensorDescriptor destTensor, CudaDeviceVariable <double> destData, CudnnAccumulateResult accumulate) { Contract.Requires(srcTensor != null); Contract.Requires(srcData != null); Contract.Requires(filter != null); Contract.Requires(filterData != null); Contract.Requires(convolution != null); Contract.Requires(destTensor != null); Contract.Requires(destData != null); ThrowIfNotInitialized(); CheckIfCompatible(CudnnType.Double, srcTensor, destTensor, filter); Invoke(() => CudnnNativeMethods.cudnnConvolutionForward(handle, srcTensor.Handle, srcData.DevicePointer, filter.Handle, filterData.DevicePointer, convolution.Handle, destTensor.Handle, destData.DevicePointer, accumulate)); }
public void Forward(CudnnTensorDescriptor srcTensor, double[] srcData, CudnnFilterDescriptor filter, double[] filterData, CudnnConvolutionDescriptor convolution, CudnnTensorDescriptor destTensor, double[] destData, CudnnAccumulateResult accumulate) { Contract.Requires(srcTensor != null); Contract.Requires(srcData != null); Contract.Requires(filter != null); Contract.Requires(filterData != null); Contract.Requires(convolution != null); Contract.Requires(destTensor != null); Contract.Requires(destData != null); ThrowIfNotInitialized(); CheckIfCompatible(CudnnType.Double, srcTensor, destTensor, filter); using (var srcDataGpu = new CudaDeviceVariable<double>(srcData.Length)) using (var filterDataGpu = new CudaDeviceVariable<double>(filterData.Length)) using (var destDataGpu = new CudaDeviceVariable<double>(destData.Length)) { srcDataGpu.CopyToDevice(srcData); filterDataGpu.CopyToDevice(filterData); Invoke(() => CudnnNativeMethods.cudnnConvolutionForward(handle, srcTensor.Handle, srcDataGpu.DevicePointer, filter.Handle, filterDataGpu.DevicePointer, convolution.Handle, destTensor.Handle, destDataGpu.DevicePointer, accumulate)); destDataGpu.CopyToHost(destData); } }
public void Forward(CudnnTensorDescriptor srcTensor, CudaDeviceVariable<double> srcData, CudnnFilterDescriptor filter, CudaDeviceVariable<double> filterData, CudnnConvolutionDescriptor convolution, CudnnTensorDescriptor destTensor, CudaDeviceVariable<double> destData, CudnnAccumulateResult accumulate) { Contract.Requires(srcTensor != null); Contract.Requires(srcData != null); Contract.Requires(filter != null); Contract.Requires(filterData != null); Contract.Requires(convolution != null); Contract.Requires(destTensor != null); Contract.Requires(destData != null); ThrowIfNotInitialized(); CheckIfCompatible(CudnnType.Double, srcTensor, destTensor, filter); Invoke(() => CudnnNativeMethods.cudnnConvolutionForward(handle, srcTensor.Handle, srcData.DevicePointer, filter.Handle, filterData.DevicePointer, convolution.Handle, destTensor.Handle, destData.DevicePointer, accumulate)); }
public void BackwardFilter(CudnnTensorDescriptor srcTensor, double[] srcData, CudnnTensorDescriptor diffTensor, double[] diffData, CudnnConvolutionDescriptor convolution, CudnnFilterDescriptor gradient, double[] gradientData, CudnnAccumulateResult accumulate) { Contract.Requires(srcTensor != null); Contract.Requires(srcData != null); Contract.Requires(diffTensor != null); Contract.Requires(diffData != null); Contract.Requires(convolution != null); Contract.Requires(gradient != null); Contract.Requires(gradientData != null); ThrowIfNotInitialized(); CheckIfCompatible(CudnnType.Double, srcTensor, diffTensor, gradient); using (var srcDataGpu = new CudaDeviceVariable<double>(srcData.Length)) using (var diffDataGpu = new CudaDeviceVariable<double>(diffData.Length)) using (var gradientDataGpu = new CudaDeviceVariable<double>(gradientData.Length)) { srcDataGpu.CopyToDevice(srcData); diffDataGpu.CopyToDevice(diffData); Invoke(() => CudnnNativeMethods.cudnnConvolutionBackwardFilter(handle, srcTensor.Handle, srcDataGpu.DevicePointer, diffTensor.Handle, diffDataGpu.DevicePointer, convolution.Handle, gradient.Handle, gradientDataGpu.DevicePointer, accumulate)); gradientDataGpu.CopyToHost(gradientData); } }
public CudnnConvolutionDescriptorParameters(CudnnConvolutionMode mode, CudnnTensorDescriptor tensor, CudnnFilterDescriptor filter, int paddingHeight, int paddingWidth, int verticalStride, int horizontalStride, int upscaleVertical = 1, int upscaleHorizontal = 1) { if (tensor == null) throw new ArgumentNullException("tensor"); if (filter == null) throw new ArgumentNullException("tensor"); if (upscaleVertical != 1 || upscaleHorizontal != 1) throw new NotSupportedException("The parameter upscaleVertical or upscaleHorizontal is not 1"); if (verticalStride < 1 || horizontalStride < 1) throw new ArgumentException("One of the parameters verticalStride or horizontalStride is negative."); if (tensor.Parameters.Type != filter.Parameters.Type) throw new ArgumentException("The Type of the tensor and filter descriptors differ or have invalid values."); if (filter.Parameters.Input != tensor.Parameters.Channels) throw new ArgumentException("The number of feature maps of the tensor descriptor and the number of input feature maps of the filter differ."); Contract.EndContractBlock(); this.Mode = mode; this.Tensor = tensor; this.Filter = filter; this.HeightPadding = paddingHeight; this.WidthPadding = paddingWidth; this.HeightStride = verticalStride; this.WidthStride = horizontalStride; this.HeightUpscale = upscaleVertical; this.WidthUpscale = upscaleHorizontal; }