1 #ifndef CAFFE_CUDNN_DECONV_LAYER_HPP_
2 #define CAFFE_CUDNN_DECONV_LAYER_HPP_
6 #include "caffe/blob.hpp"
7 #include "caffe/layer.hpp"
8 #include "caffe/proto/caffe.pb.h"
10 #include "caffe/layers/deconv_layer.hpp"
24 template <
typename Dtype>
25 class CuDNNDeconvolutionLayer :
public DeconvolutionLayer<Dtype> {
27 explicit CuDNNDeconvolutionLayer(
const LayerParameter& param)
28 : DeconvolutionLayer<Dtype>(param), handles_setup_(false) {}
29 virtual void LayerSetUp(
const vector<Blob<Dtype>*>& bottom,
30 const vector<Blob<Dtype>*>& top);
31 virtual void Reshape(
const vector<Blob<Dtype>*>& bottom,
32 const vector<Blob<Dtype>*>& top);
33 virtual ~CuDNNDeconvolutionLayer();
36 virtual void Forward_gpu(
const vector<Blob<Dtype>*>& bottom,
37 const vector<Blob<Dtype>*>& top);
38 virtual void Backward_gpu(
const vector<Blob<Dtype>*>& top,
39 const vector<bool>& propagate_down,
40 const vector<Blob<Dtype>*>& bottom);
43 cudnnHandle_t* handle_;
44 cudaStream_t* stream_;
47 cudnnConvolutionFwdAlgo_t *fwd_algo_;
48 cudnnConvolutionBwdFilterAlgo_t *bwd_filter_algo_;
49 cudnnConvolutionBwdDataAlgo_t *bwd_data_algo_;
51 vector<cudnnTensorDescriptor_t> bottom_descs_, top_descs_;
52 cudnnTensorDescriptor_t bias_desc_;
53 cudnnFilterDescriptor_t filter_desc_;
54 vector<cudnnConvolutionDescriptor_t> conv_descs_;
55 int bottom_offset_, top_offset_, bias_offset_;
57 size_t *workspace_fwd_sizes_;
58 size_t *workspace_bwd_data_sizes_;
59 size_t *workspace_bwd_filter_sizes_;
60 size_t workspaceSizeInBytes;
68 #endif // CAFFE_CUDNN_DECONV_LAYER_HPP_