33 #include <cudnn_backend.h> 61 ss <<
"CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR :" 63 <<
" Num Dimensions: " <<
nDims;
65 for (
auto i = 0; i <
nDims; i++) {
69 ss <<
" ] PadUpper [";
70 for (
auto i = 0; i <
nDims; i++) {
74 ss <<
" ] Dilation [";
75 for (
auto i = 0; i <
nDims; i++) {
80 for (
auto i = 0; i <
nDims; i++) {
117 cudnnConvolutionMode_t
130 cudnnConvolutionMode_t
mode = CUDNN_CONVOLUTION;
135 int64_t
stride[CUDNN_DIM_MAX + 1] = {-1};
150 return setComputePrecision(data_type_);
154 m_convDesc.compute_precision = data_type_;
160 std::copy(padding, padding + ndims, m_convDesc.padLower);
166 std::copy(padding, padding + ndims, m_convDesc.padUpper);
178 std::copy(strides, strides + ndims, m_convDesc.stride);
184 m_convDesc.nDims = nDims_;
190 m_convDesc.mode = mode_;
200 if (m_convDesc.nDims <= 0) {
203 CUDNN_STATUS_BAD_PARAM,
204 "CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: Check and Set the CUDNN_ATTR_CONVOLUTION_SPATIAL_DIMS field");
205 return std::move(m_convDesc);
207 if (m_convDesc.stride[0] <= 0) {
210 CUDNN_STATUS_BAD_PARAM,
211 "CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: Check and Set the CUDNN_ATTR_CONVOLUTION_FILTER_STRIDES field");
212 return std::move(m_convDesc);
216 auto status = m_convDesc.initialize_managed_backend_pointer(CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR);
217 if (
status != CUDNN_STATUS_SUCCESS) {
219 &m_convDesc,
status,
"CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: Bad descriptor created");
220 return std::move(m_convDesc);
223 if (
status != CUDNN_STATUS_SUCCESS) {
225 &m_convDesc,
status,
"CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: cudnnCreate Failed");
226 return std::move(m_convDesc);
230 status = cudnnBackendSetAttribute(m_convDesc.pointer->get_backend_descriptor(),
231 CUDNN_ATTR_CONVOLUTION_COMP_TYPE,
232 CUDNN_TYPE_DATA_TYPE,
234 &m_convDesc.compute_precision);
235 if (
status != CUDNN_STATUS_SUCCESS) {
239 "CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: SetAttribute CUDNN_ATTR_CONVOLUTION_COMP_TYPE Failed");
240 return std::move(m_convDesc);
243 status = cudnnBackendSetAttribute(m_convDesc.pointer->get_backend_descriptor(),
244 CUDNN_ATTR_CONVOLUTION_CONV_MODE,
245 CUDNN_TYPE_CONVOLUTION_MODE,
248 if (
status != CUDNN_STATUS_SUCCESS) {
252 "CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: SetAttribute CUDNN_ATTR_CONVOLUTION_CONV_MODE Failed");
253 return std::move(m_convDesc);
256 status = cudnnBackendSetAttribute(m_convDesc.pointer->get_backend_descriptor(),
257 CUDNN_ATTR_CONVOLUTION_SPATIAL_DIMS,
261 if (
status != CUDNN_STATUS_SUCCESS) {
265 "CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: SetAttribute CUDNN_ATTR_CONVOLUTION_SPATIAL_DIMS Failed");
266 return std::move(m_convDesc);
269 status = cudnnBackendSetAttribute(m_convDesc.pointer->get_backend_descriptor(),
270 CUDNN_ATTR_CONVOLUTION_PRE_PADDINGS,
273 m_convDesc.padLower);
274 if (
status != CUDNN_STATUS_SUCCESS) {
278 "CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: SetAttribute CUDNN_ATTR_CONVOLUTION_PRE_PADDINGS Failed");
279 return std::move(m_convDesc);
282 status = cudnnBackendSetAttribute(m_convDesc.pointer->get_backend_descriptor(),
283 CUDNN_ATTR_CONVOLUTION_POST_PADDINGS,
286 m_convDesc.padUpper);
287 if (
status != CUDNN_STATUS_SUCCESS) {
291 "CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: SetAttribute CUDNN_ATTR_CONVOLUTION_POST_PADDINGS Failed");
292 return std::move(m_convDesc);
295 status = cudnnBackendSetAttribute(m_convDesc.pointer->get_backend_descriptor(),
296 CUDNN_ATTR_CONVOLUTION_DILATIONS,
299 m_convDesc.dilation);
300 if (
status != CUDNN_STATUS_SUCCESS) {
304 "CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: SetAttribute CUDNN_ATTR_CONVOLUTION_DILATIONS Failed");
305 return std::move(m_convDesc);
308 status = cudnnBackendSetAttribute(m_convDesc.pointer->get_backend_descriptor(),
309 CUDNN_ATTR_CONVOLUTION_FILTER_STRIDES,
313 if (
status != CUDNN_STATUS_SUCCESS) {
317 "CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: SetAttribute CUDNN_ATTR_CONVOLUTION_FILTER_STRIDES Failed");
318 return std::move(m_convDesc);
322 status = cudnnBackendFinalize(m_convDesc.pointer->get_backend_descriptor());
323 if (
status != CUDNN_STATUS_SUCCESS) {
325 &m_convDesc,
status,
"CUDNN_BACKEND_CONVOLUTION_DESCRIPTOR: cudnnFinalize Failed");
326 return std::move(m_convDesc);
329 getLogger() <<
"[cudnn_frontend] " << m_convDesc << std::endl;
330 return std::move(m_convDesc);
int64_t padUpper[CUDNN_DIM_MAX+1]
d, h, w
int64_t const * getStride() const
ConditionalStreamer & getLogger()
cudnnDataType_t compute_precision
static void set_error_and_throw_exception(BackendDescriptor const *desc, cudnnStatus_t status, const char *message)
NLOHMANN_BASIC_JSON_TPL_DECLARATION std::string to_string(const NLOHMANN_BASIC_JSON_TPL &j)
user-defined to_string function for JSON values
int64_t const * getPadding() const
cudnnDataType_t getComputePrecision() const
int64_t dilation[CUDNN_DIM_MAX+1]
d, h, w
int64_t nDims
Convolution vs cross correlation.
auto setNDims(int64_t nDims_) -> ConvDescBuilder_v8 &
Set Num Spatial Dimensions of the convolution Operation.
auto setPrePadding(int64_t ndims, int64_t const *padding) -> ConvDescBuilder_v8 &
Set Padding Lower of the convDesc.
auto setDilation(int64_t ndims, int64_t const *dilation) -> ConvDescBuilder_v8 &
Set Dilation of the convDesc.
auto setMathMode(cudnnConvolutionMode_t mode_) -> ConvDescBuilder_v8 &
Set Convolution Mode of the convolution Operation.
int64_t stride[CUDNN_DIM_MAX+1]
d, h, w
cudnnConvolutionMode_t getMathMode() const
int64_t getDimensionCount() const
auto setStrides(int64_t ndims, int64_t const *strides) -> ConvDescBuilder_v8 &
Set Strides of the convDesc.
static std::string to_string(cudnnDataType_t type)
auto setPostPadding(int64_t ndims, int64_t const *padding) -> ConvDescBuilder_v8 &
Set Padding Upper of the convDesc.
int64_t padLower[CUDNN_DIM_MAX+1]
number of dimensions
std::string describe() const override
Return a string describing the backend Descriptor.
auto setDataType(cudnnDataType_t data_type_) -> ConvDescBuilder_v8 &
Set Datatype for the Convolution Operation.
int64_t const * getDilation() const
cudnnConvolutionMode_t mode
Convolution operation data type.
ConvDesc_v8 & operator=(ConvDesc_v8 &&)=default
auto setComputePrecision(cudnnDataType_t data_type_) -> ConvDescBuilder_v8 &
cudnnStatus_t status
Shared pointer of the OpaqueBackendPointer.
friend class ConvDescBuilder_v8