#include "gpu/intel/conv/config.hpp"
namespace dnnl {
namespace impl {
namespace gpu {
namespace intel {
namespace conv {
void set_default_conf(conf_t &conf, const desc_t &cd,
const memory_desc_t &src_md, const memory_desc_t &weights_md,
const memory_desc_t &dst_md, const memory_desc_t &bias_md,
const primitive_attr_t &attr) {
const memory_desc_wrapper src_mdw(&src_md);
const memory_desc_wrapper weights_mdw(&weights_md);
const memory_desc_wrapper dst_mdw(&dst_md);
const memory_desc_wrapper bias_mdw(&bias_md);
const bool with_groups = weights_mdw.ndims() == src_mdw.ndims() + 1;
int ndims = src_mdw.ndims();
conf = utils::zero<decltype(conf)>();
conf.with_groups = with_groups;
conf.ndims = ndims;
conf.prop_kind = cd.prop_kind;
conf.ngroups = with_groups ? weights_mdw.dims()[0] : 1;
conf.mb = src_mdw.dims()[0];
conf.oc_without_padding = dst_mdw.dims()[1] / conf.ngroups;
conf.ic_without_padding = src_mdw.dims()[1] / conf.ngroups;
conf.id = (ndims == 5) ? src_mdw.dims()[2] : 1;
conf.ih = (ndims == 3) ? 1 : src_mdw.dims()[ndims - 2];
conf.iw = src_mdw.dims()[ndims - 1];
conf.od = (ndims == 5) ? dst_mdw.dims()[2] : 1;
conf.oh = (ndims == 3) ? 1 : dst_mdw.dims()[ndims - 2];
conf.ow = dst_mdw.dims()[ndims - 1];
conf.kd = (ndims == 5) ? weights_mdw.dims()[with_groups + 2] : 1;
conf.kh = (ndims == 3) ? 1 : weights_mdw.dims()[with_groups + ndims - 2];
conf.kw = weights_mdw.dims()[with_groups + ndims - 1];
conf.is_depthwise = conf.with_groups && conf.oc_without_padding == 1
&& conf.ic_without_padding == 1;
conf.oc = dst_mdw.dims()[1] / conf.ngroups;
conf.ic = src_mdw.dims()[1] / conf.ngroups;
conf.f_pad = (ndims == 5) ? cd.padding[0][0] : 0;
conf.back_pad = (ndims == 5) ? cd.padding[1][0] : 0;
conf.t_pad = (ndims == 3) ? 0 : cd.padding[0][ndims - 4];
conf.b_pad = (ndims == 3) ? 0 : cd.padding[1][ndims - 4];
conf.l_pad = cd.padding[0][ndims - 3];
conf.r_pad = cd.padding[1][ndims - 3];
conf.stride_d = (ndims == 5) ? cd.strides[0] : 1;
conf.stride_h = (ndims == 3) ? 1 : cd.strides[ndims - 4];
conf.stride_w = cd.strides[ndims - 3];
conf.dilate_d = (ndims == 5) ? cd.dilates[0] : 0;
conf.dilate_h = (ndims == 3) ? 0 : cd.dilates[ndims - 4];
conf.dilate_w = cd.dilates[ndims - 3];
conf.with_bias = bias_mdw.format_kind() != format_kind::undef;
conf.src_data_type = src_mdw.data_type();
conf.weights_data_type = weights_mdw.data_type();
conf.dst_data_type = dst_mdw.data_type();
conf.acc_data_type = cd.accum_data_type;
conf.bias_data_type
= conf.with_bias ? bias_mdw.data_type() : data_type::f32;
if (!src_mdw.format_any())
conf.src_md_info = memory_desc_info_t::create(src_mdw);
if (!weights_mdw.format_any())
conf.wei_md_info = memory_desc_info_t::create(weights_mdw);
if (!dst_mdw.format_any())
conf.dst_md_info = memory_desc_info_t::create(dst_mdw);
conf.attr_info = attr_info_t::create(&attr);
}
} } } } }