1 #define TORCH_ASSERT_ONLY_METHOD_OPERATORS
2 #include <ATen/core/Tensor.h>
3 #include <ATen/cuda/CUDAConfig.h> // for the definition of AT_CUDNN_ENABLED
4
5 #ifndef AT_PER_OPERATOR_HEADERS
6 #include <ATen/Functions.h>
7 #include <ATen/NativeFunctions.h>
8 #else
9 #include <ATen/ops/cudnn_convolution_add_relu_native.h>
10 #include <ATen/ops/cudnn_convolution_native.h>
11 #include <ATen/ops/cudnn_convolution_relu_native.h>
12 #include <ATen/ops/cudnn_convolution_transpose_native.h>
13 #endif
14
15 namespace at {
16 namespace native {
17
18 // ---------------------------------------------------------------------
19 //
20 // Placeholder operators
21 //
22 // ---------------------------------------------------------------------
23
24 #if !AT_CUDNN_ENABLED()
25
26 // See Note [ATen preprocessor philosophy]
27
cudnn_convolution(const at::Tensor & input,const at::Tensor & weight,IntArrayRef padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32)28 at::Tensor cudnn_convolution(
29 const at::Tensor& input,
30 const at::Tensor& weight,
31 IntArrayRef padding,
32 IntArrayRef stride,
33 IntArrayRef dilation,
34 int64_t groups,
35 bool benchmark,
36 bool deterministic,
37 bool allow_tf32) {
38 AT_ERROR("cudnn_convolution: ATen not compiled with cuDNN support");
39 }
40
cudnn_convolution_out(const Tensor & input_t,const Tensor & weight_t,IntArrayRef padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32,Tensor & output_t)41 at::Tensor& cudnn_convolution_out(
42 const Tensor& input_t,
43 const Tensor& weight_t,
44 IntArrayRef padding,
45 IntArrayRef stride,
46 IntArrayRef dilation,
47 int64_t groups,
48 bool benchmark,
49 bool deterministic,
50 bool allow_tf32,
51 Tensor& output_t) {
52 AT_ERROR("cudnn_convolution_out: ATen not compiled with cuDNN support");
53 }
54
cudnn_convolution_backward_input(IntArrayRef input_size,const at::Tensor & grad_output,const at::Tensor & weight,IntArrayRef padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32)55 at::Tensor cudnn_convolution_backward_input(
56 IntArrayRef input_size,
57 const at::Tensor& grad_output,
58 const at::Tensor& weight,
59 IntArrayRef padding,
60 IntArrayRef stride,
61 IntArrayRef dilation,
62 int64_t groups,
63 bool benchmark,
64 bool deterministic,
65 bool allow_tf32) {
66 AT_ERROR(
67 "cudnn_convolution_backward_input: ATen not compiled with cuDNN support");
68 }
69
cudnn_convolution_backward_weight(IntArrayRef weight_size,const at::Tensor & grad_output,const at::Tensor & input,IntArrayRef padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32)70 at::Tensor cudnn_convolution_backward_weight(
71 IntArrayRef weight_size,
72 const at::Tensor& grad_output,
73 const at::Tensor& input,
74 IntArrayRef padding,
75 IntArrayRef stride,
76 IntArrayRef dilation,
77 int64_t groups,
78 bool benchmark,
79 bool deterministic,
80 bool allow_tf32) {
81 AT_ERROR(
82 "cudnn_convolution_backward_weight: ATen not compiled with cuDNN support");
83 }
84
cudnn_convolution_backward(const at::Tensor & input,const at::Tensor & grad_output,const at::Tensor & weight,IntArrayRef padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32,std::array<bool,2> output_mask)85 std::tuple<at::Tensor, at::Tensor> cudnn_convolution_backward(
86 const at::Tensor& input,
87 const at::Tensor& grad_output,
88 const at::Tensor& weight,
89 IntArrayRef padding,
90 IntArrayRef stride,
91 IntArrayRef dilation,
92 int64_t groups,
93 bool benchmark,
94 bool deterministic,
95 bool allow_tf32,
96 std::array<bool, 2> output_mask) {
97 AT_ERROR("cudnn_convolution_backward: ATen not compiled with cuDNN support");
98 }
99
cudnn_convolution_transpose(const at::Tensor & input,const at::Tensor & weight,IntArrayRef padding,IntArrayRef output_padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32)100 at::Tensor cudnn_convolution_transpose(
101 const at::Tensor& input,
102 const at::Tensor& weight,
103 IntArrayRef padding,
104 IntArrayRef output_padding,
105 IntArrayRef stride,
106 IntArrayRef dilation,
107 int64_t groups,
108 bool benchmark,
109 bool deterministic,
110 bool allow_tf32) {
111 AT_ERROR("cudnn_convolution_transpose: ATen not compiled with cuDNN support");
112 }
113
cudnn_convolution_transpose_backward_input(const at::Tensor & grad_output,const at::Tensor & weight,IntArrayRef padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32)114 at::Tensor cudnn_convolution_transpose_backward_input(
115 const at::Tensor& grad_output,
116 const at::Tensor& weight,
117 IntArrayRef padding,
118 IntArrayRef stride,
119 IntArrayRef dilation,
120 int64_t groups,
121 bool benchmark,
122 bool deterministic,
123 bool allow_tf32) {
124 AT_ERROR(
125 "cudnn_convolution_transpose_backward: ATen not compiled with cuDNN support");
126 }
127
cudnn_convolution_transpose_backward_weight(IntArrayRef weight_size,const at::Tensor & grad_output,const at::Tensor & input,IntArrayRef padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32)128 at::Tensor cudnn_convolution_transpose_backward_weight(
129 IntArrayRef weight_size,
130 const at::Tensor& grad_output,
131 const at::Tensor& input,
132 IntArrayRef padding,
133 IntArrayRef stride,
134 IntArrayRef dilation,
135 int64_t groups,
136 bool benchmark,
137 bool deterministic,
138 bool allow_tf32) {
139 AT_ERROR(
140 "cudnn_convolution_transpose_backward_weight: ATen not compiled with cuDNN support");
141 }
142
cudnn_convolution_transpose_backward(const at::Tensor & input,const at::Tensor & grad_output,const at::Tensor & weight,IntArrayRef padding,IntArrayRef output_padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32,std::array<bool,2> output_mask)143 std::tuple<at::Tensor, at::Tensor> cudnn_convolution_transpose_backward(
144 const at::Tensor& input,
145 const at::Tensor& grad_output,
146 const at::Tensor& weight,
147 IntArrayRef padding,
148 IntArrayRef output_padding,
149 IntArrayRef stride,
150 IntArrayRef dilation,
151 int64_t groups,
152 bool benchmark,
153 bool deterministic,
154 bool allow_tf32,
155 std::array<bool, 2> output_mask) {
156 AT_ERROR(
157 "cudnn_convolution_transpose_backward: ATen not compiled with cuDNN support");
158 }
159
raw_cudnn_convolution_forward_out(const Tensor & output,const Tensor & input,const Tensor & weight,IntArrayRef padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32)160 void raw_cudnn_convolution_forward_out(
161 const Tensor& output,
162 const Tensor& input,
163 const Tensor& weight,
164 IntArrayRef padding,
165 IntArrayRef stride,
166 IntArrayRef dilation,
167 int64_t groups,
168 bool benchmark,
169 bool deterministic,
170 bool allow_tf32) {
171 AT_ERROR(
172 "raw_cudnn_convolution_forward_out: ATen not compiled with cuDNN support");
173 }
174
raw_cudnn_convolution_backward_input_out(const at::Tensor & grad_input,const at::Tensor & grad_output,const at::Tensor & weight,IntArrayRef padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32)175 void raw_cudnn_convolution_backward_input_out(
176 const at::Tensor& grad_input,
177 const at::Tensor& grad_output,
178 const at::Tensor& weight,
179 IntArrayRef padding,
180 IntArrayRef stride,
181 IntArrayRef dilation,
182 int64_t groups,
183 bool benchmark,
184 bool deterministic,
185 bool allow_tf32) {
186 AT_ERROR(
187 "raw_cudnn_convolution_backward_input_out: ATen not compiled with cuDNN support");
188 }
189
raw_cudnn_convolution_backward_weight_out(const Tensor & grad_weight,const Tensor & grad_output,const Tensor & input,IntArrayRef padding,IntArrayRef stride,IntArrayRef dilation,int64_t groups,bool benchmark,bool deterministic,bool allow_tf32)190 void raw_cudnn_convolution_backward_weight_out(
191 const Tensor& grad_weight,
192 const Tensor& grad_output,
193 const Tensor& input,
194 IntArrayRef padding,
195 IntArrayRef stride,
196 IntArrayRef dilation,
197 int64_t groups,
198 bool benchmark,
199 bool deterministic,
200 bool allow_tf32) {
201 AT_ERROR(
202 "raw_cudnn_convolution_backward_weight_out: ATen not compiled with cuDNN support");
203 }
204
cudnn_convolution_relu(const Tensor & input_t,const Tensor & weight_t,const std::optional<Tensor> & bias_t,IntArrayRef stride,IntArrayRef padding,IntArrayRef dilation,int64_t groups)205 Tensor cudnn_convolution_relu(
206 const Tensor& input_t,
207 const Tensor& weight_t,
208 const std::optional<Tensor>& bias_t,
209 IntArrayRef stride,
210 IntArrayRef padding,
211 IntArrayRef dilation,
212 int64_t groups) {
213 AT_ERROR("cudnn_convolution_relu: ATen not compiled with cuDNN support");
214 }
215
cudnn_convolution_add_relu(const Tensor & input_t,const Tensor & weight_t,const Tensor & z_t,const std::optional<Scalar> & alpha,const std::optional<Tensor> & bias_t,IntArrayRef stride,IntArrayRef padding,IntArrayRef dilation,int64_t groups)216 Tensor cudnn_convolution_add_relu(
217 const Tensor& input_t,
218 const Tensor& weight_t,
219 const Tensor& z_t,
220 const std::optional<Scalar>& alpha,
221 const std::optional<Tensor>& bias_t,
222 IntArrayRef stride,
223 IntArrayRef padding,
224 IntArrayRef dilation,
225 int64_t groups) {
226 AT_ERROR("cudnn_convolution_add_relu: ATen not compiled with cuDNN support");
227 }
228
229 #endif // AT_CUDNN_ENABLED
230
231 } // namespace native
232 } // namespace at
233