const verbose_t *mkldnn_verbose();
double get_msec();
+const char *get_isa_info();
#if !defined(DISABLE_VERBOSE)
#include <stdio.h>
#define MKLDNN_VERBOSE_BUF_LEN 1024
-#define MKLDNN_VERBOSE_DAT_LEN 64
+#define MKLDNN_VERBOSE_DAT_LEN 128
#define MKLDNN_VERBOSE_AUX_LEN 384
#define MKLDNN_VERBOSE_PRB_LEN 384
mkldnn_prop_kind2str(prop_kind), data_str, aux_str, prb_str);
}
+inline void format_mem_desc_str_generic(char *str, int len,
+ const memory_desc_t *md) {
+ auto ndims = md->ndims;
+ auto dims = md->dims;
+ int l = 0;
+ for (int d = 0; d < ndims - 1; ++d)
+ l += snprintf(str + l, len - l, "%tdx", dims[d]);
+ snprintf(str + l, len - l, "%td", dims[ndims - 1]);
+}
+
+// XXX: Outputs strings corresponding to memory formats used for data tensors.
+inline void format_mem_desc_str(char *str, int len, const memory_desc_t *md) {
+ auto ndims = md->ndims;
+ auto dims = md->dims;
+ if (ndims == 1)
+ snprintf(str, len, "x%td", dims[0]);
+ else if (ndims == 2)
+ snprintf(str, len, "mb%tdic%td", dims[0], dims[1]);
+ else if (ndims == 3)
+ snprintf(str, len, "mb%tdic%tdiw%td", dims[0], dims[1], dims[2]);
+ else if (ndims == 4)
+ snprintf(str, len, "mb%tdic%tdih%tdiw%td",
+ dims[0], dims[1], dims[2], dims[3]);
+ else if (ndims == 5)
+ snprintf(str, len, "mb%tdic%tdid%tdih%tdiw%td",
+ dims[0], dims[1], dims[2], dims[3], dims[4]);
+ else
+ format_mem_desc_str_generic(str, len, md);
+}
+
template <typename pd_t> static void init_info_bnorm(pd_t *s, char *buffer) {
DECL_DAT_AUX_PRB_STRS();
snprintf(aux_str, MKLDNN_VERBOSE_AUX_LEN, "flags:%u", s->desc()->flags);
- if (s->ndims() == 5)
- {
- snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
- "mb%dic%did%dih%diw%d", s->MB(), s->C(), s->D(), s->H(), s->W());
- } else if (s->ndims() == 4) {
- snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
- "mb%dic%dih%diw%d", s->MB(), s->C(), s->H(), s->W());
- } else if (s->ndims() == 2) {
- snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
- "mb%dic%d", s->MB(), s->C());
- }
+ format_mem_desc_str(prb_str, MKLDNN_VERBOSE_PRB_LEN, s->src_pd()->desc());
verbose_templ(buffer, s->kind(), s->name(), s->desc()->prop_kind, dat_str,
aux_str, prb_str);
template <typename pd_t> static void init_info_conv(pd_t *s, char *buffer) {
DECL_DAT_AUX_PRB_STRS();
- auto fmt_src = (s->cdesc()->prop_kind == prop_kind::backward_data
+ auto fmt_src = (s->desc()->prop_kind == prop_kind::backward_data
? s->diff_src_pd() : s->src_pd())->desc()->format;
- auto fmt_wei = (s->cdesc()->prop_kind == prop_kind::backward_weights
+ auto fmt_wei = (s->desc()->prop_kind == prop_kind::backward_weights
? s->diff_weights_pd(0) : s->weights_pd(0))->desc()->format;
auto fmt_bia = s->with_bias()
- ? (s->cdesc()->prop_kind == prop_kind::backward_weights
+ ? (s->desc()->prop_kind == prop_kind::backward_weights
? s->diff_weights_pd(1) : s->weights_pd(1))->desc()->format
: memory_format::undef;
- auto fmt_dst = (s->cdesc()->prop_kind == prop_kind::backward_data
- || s->cdesc()->prop_kind == prop_kind::backward_weights
+ auto fmt_dst = (s->desc()->prop_kind == prop_kind::backward_data
+ || s->desc()->prop_kind == prop_kind::backward_weights
? s->diff_dst_pd() : s->dst_pd())->desc()->format;
snprintf(dat_str, MKLDNN_VERBOSE_DAT_LEN,
"fsrc:%s fwei:%s fbia:%s fdst:%s",
mkldnn_fmt2str(fmt_bia), mkldnn_fmt2str(fmt_dst));
snprintf(aux_str, MKLDNN_VERBOSE_AUX_LEN,
- "alg:%s", mkldnn_alg_kind2str(s->cdesc()->alg_kind));
+ "alg:%s", mkldnn_alg_kind2str(s->desc()->alg_kind));
if (s->ndims() == 5) {
- snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
- "mb%d_g%dic%doc%d"
- "_id%dod%dkd%dsd%ddd%dpd%d"
- "_ih%doh%dkh%dsh%ddh%dph%d"
- "_iw%dow%dkw%dsw%ddw%dpw%d",
- s->MB(), s->G(), s->IC(), s->OC(),
- s->ID(), s->OD(), s->KD(), s->KSD(), s->KDD(), s->padFront(),
- s->IH(), s->OH(), s->KH(), s->KSH(), s->KDH(), s->padT(),
- s->IW(), s->OW(), s->KW(), s->KSW(), s->KDW(), s->padL());
+ if (s->with_groups())
+ snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
+ "mb%d_g%dic%doc%d"
+ "_id%dod%dkd%dsd%ddd%dpd%d"
+ "_ih%doh%dkh%dsh%ddh%dph%d"
+ "_iw%dow%dkw%dsw%ddw%dpw%d",
+ s->MB(), s->G(), s->IC(), s->OC(),
+ s->ID(), s->OD(), s->KD(), s->KSD(), s->KDD(), s->padFront(),
+ s->IH(), s->OH(), s->KH(), s->KSH(), s->KDH(), s->padT(),
+ s->IW(), s->OW(), s->KW(), s->KSW(), s->KDW(), s->padL());
+ else
+ snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
+ "mb%d_ic%doc%d"
+ "_id%dod%dkd%dsd%ddd%dpd%d"
+ "_ih%doh%dkh%dsh%ddh%dph%d"
+ "_iw%dow%dkw%dsw%ddw%dpw%d",
+ s->MB(), s->IC(), s->OC(),
+ s->ID(), s->OD(), s->KD(), s->KSD(), s->KDD(), s->padFront(),
+ s->IH(), s->OH(), s->KH(), s->KSH(), s->KDH(), s->padT(),
+ s->IW(), s->OW(), s->KW(), s->KSW(), s->KDW(), s->padL());
} else {
- snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
- "mb%d_g%dic%doc%d"
- "_ih%doh%dkh%dsh%ddh%dph%d"
- "_iw%dow%dkw%dsw%ddw%dpw%d",
- s->MB(), s->G(), s->IC(), s->OC(),
- s->IH(), s->OH(), s->KH(), s->KSH(), s->KDH(), s->padT(),
- s->IW(), s->OW(), s->KW(), s->KSW(), s->KDW(), s->padL());
+ if (s->with_groups())
+ snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
+ "mb%d_g%dic%doc%d"
+ "_ih%doh%dkh%dsh%ddh%dph%d"
+ "_iw%dow%dkw%dsw%ddw%dpw%d",
+ s->MB(), s->G(), s->IC(), s->OC(),
+ s->IH(), s->OH(), s->KH(), s->KSH(), s->KDH(), s->padT(),
+ s->IW(), s->OW(), s->KW(), s->KSW(), s->KDW(), s->padL());
+ else
+ snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
+ "mb%d_ic%doc%d"
+ "_ih%doh%dkh%dsh%ddh%dph%d"
+ "_iw%dow%dkw%dsw%ddw%dpw%d",
+ s->MB(), s->IC(), s->OC(),
+ s->IH(), s->OH(), s->KH(), s->KSH(), s->KDH(), s->padT(),
+ s->IW(), s->OW(), s->KW(), s->KSW(), s->KDW(), s->padL());
}
- verbose_templ(buffer, s->kind(), s->name(), s->cdesc()->prop_kind, dat_str,
+ verbose_templ(buffer, s->kind(), s->name(), s->desc()->prop_kind, dat_str,
aux_str, prb_str);
}
snprintf(aux_str, MKLDNN_VERBOSE_AUX_LEN, "axis:%d group_size:%d",
s->axis(), s->group_size());
- int l = 0;
- for (int d = 0; d < md->ndims - 1; ++d)
- l += snprintf(prb_str + l, MKLDNN_VERBOSE_PRB_LEN - l,
- "%dx", md->dims[d]);
- snprintf(prb_str + l, MKLDNN_VERBOSE_PRB_LEN - l,
- "%d", md->dims[md->ndims - 1]);
+ format_mem_desc_str_generic(prb_str, MKLDNN_VERBOSE_PRB_LEN, md);
verbose_templ(buffer, s->kind(), s->name(), s->desc()->prop_kind, dat_str,
aux_str, prb_str);
snprintf(aux_str, MKLDNN_VERBOSE_AUX_LEN,
"alg:%s", mkldnn_alg_kind2str(s->desc()->alg_kind));
- snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
- "mb%dic%dih%diw%d", s->MB(), s->C(), s->H(), s->W());
+ format_mem_desc_str(prb_str, MKLDNN_VERBOSE_PRB_LEN, s->src_pd()->desc());
verbose_templ(buffer, s->kind(), s->name(), s->desc()->prop_kind, dat_str,
aux_str, prb_str);
snprintf(aux_str, MKLDNN_VERBOSE_AUX_LEN,
"alg:%s", mkldnn_alg_kind2str(s->desc()->alg_kind));
- snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
- "mb%dic%dih%diw%d", s->MB(), s->C(), s->H(), s->W());
+ format_mem_desc_str(prb_str, MKLDNN_VERBOSE_PRB_LEN, s->src_pd()->desc());
verbose_templ(buffer, s->kind(), s->name(), s->desc()->prop_kind, dat_str,
aux_str, prb_str);
snprintf(aux_str, MKLDNN_VERBOSE_AUX_LEN, "num:%d", s->n_inputs());
- int l = 0;
- for (int d = 0; d < o_md->ndims - 1; ++d)
- l += snprintf(prb_str + l, MKLDNN_VERBOSE_PRB_LEN - l,
- "%dx", o_md->dims[d]);
- snprintf(prb_str + l, MKLDNN_VERBOSE_PRB_LEN - l,
- "%d", o_md->dims[o_md->ndims - 1]);
+ format_mem_desc_str_generic(prb_str, MKLDNN_VERBOSE_PRB_LEN, o_md);
verbose_templ(buffer, s->kind(), s->name(), prop_kind::undef, dat_str,
aux_str, prb_str);
template <typename pd_t> static void init_info_softmax(pd_t *s, char *buffer) {
DECL_DAT_AUX_PRB_STRS();
- auto fmt_data = (s->desc()->prop_kind == prop_kind::backward_data
- ? s->diff_src_pd() : s->src_pd())->desc()->format;
+ auto md = (s->desc()->prop_kind == prop_kind::backward_data
+ ? s->diff_src_pd() : s->src_pd())->desc();
+ auto fmt_data = md->format;
auto fmt_diff = s->desc()->prop_kind == prop_kind::backward_data
? s->diff_src_pd()->desc()->format : memory_format::undef;
snprintf(dat_str, MKLDNN_VERBOSE_DAT_LEN, "fdata:%s fdiff:%s",
mkldnn_fmt2str(fmt_data), mkldnn_fmt2str(fmt_diff));
- snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
- "mb%dic%dih%diw%d", s->MB(), s->C(), s->H(), s->W());
+ format_mem_desc_str(prb_str, MKLDNN_VERBOSE_PRB_LEN, md);
verbose_templ(buffer, s->kind(), s->name(), s->desc()->prop_kind, dat_str,
aux_str, prb_str);
template <typename pd_t> static void init_info_rnn(pd_t *s, char *buffer) {
DECL_DAT_AUX_PRB_STRS();
- alg_kind_t alg_kind = s->desc()->cell_desc.cell_kind;
+ const mkldnn::impl::memory_desc_t *src_lay_md, *src_iter_md, *wei_lay_md,
+ *wei_iter_md, *bias_md, *dst_lay_md, *dst_iter_md;
+ if (s->desc()->prop_kind != prop_kind::backward_data) {
+ src_lay_md = s->src_pd(0)->desc();
+ src_iter_md = s->src_pd(1) ? s->src_pd(1)->desc() : nullptr;
+ wei_lay_md = s->weights_pd(0)->desc();
+ wei_iter_md = s->weights_pd(1)->desc();
+ bias_md = s->weights_pd(2)->desc();
+ dst_lay_md = s->dst_pd(0)->desc();
+ dst_iter_md = s->dst_pd(1) ? s->dst_pd(1)->desc() : nullptr;
+ } else {
+ src_lay_md = s->diff_src_pd(0)->desc();
+ src_iter_md = s->diff_src_pd(1) ? s->diff_src_pd(1)->desc() : nullptr;
+ wei_lay_md = s->diff_weights_pd(0)->desc();
+ wei_iter_md = s->diff_weights_pd(1)->desc();
+ bias_md = s->diff_weights_pd(2)->desc();
+ dst_lay_md = s->diff_dst_pd(0)->desc();
+ dst_iter_md = s->diff_dst_pd(1) ? s->diff_dst_pd(1)->desc() : nullptr;
+ }
+
+ alg_kind_t alg_kind = s->cell_kind();
+ rnn_direction_t rnn_dir = s->direction();
snprintf(aux_str, MKLDNN_VERBOSE_AUX_LEN,
- "alg:%s", mkldnn_alg_kind2str(alg_kind));
+ "alg:%s_%s", mkldnn_alg_kind2str(alg_kind), mkldnn_rnn_direction2str(rnn_dir));
+ snprintf(dat_str, MKLDNN_VERBOSE_DAT_LEN, "fdata:%s-%s-%s-%s fwei:%s-%s-%s ddata:%s%s-%s%s dwei:%s%s%s",
+ mkldnn_fmt2str(src_lay_md->format),
+ mkldnn_fmt2str(src_iter_md ? src_iter_md->format : memory_format::undef),
+ mkldnn_fmt2str(dst_lay_md->format),
+ mkldnn_fmt2str(dst_iter_md ? dst_iter_md->format : memory_format::undef),
+ mkldnn_fmt2str(wei_lay_md->format),
+ mkldnn_fmt2str(wei_iter_md->format),
+ mkldnn_fmt2str(bias_md->format),
+ mkldnn_dt2str(src_lay_md->data_type),
+ mkldnn_dt2str(src_iter_md ? src_iter_md->data_type : data_type::undef),
+ mkldnn_dt2str(dst_lay_md->data_type),
+ mkldnn_dt2str(dst_iter_md ? dst_iter_md->data_type : data_type::undef),
+ mkldnn_dt2str(wei_lay_md->data_type),
+ mkldnn_dt2str(wei_iter_md->data_type),
+ mkldnn_dt2str(bias_md->data_type));
snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
- "l%dd%dmb%dt%d_ic%dsc%doc%d_wi%dws%d",
- s->L(), s->D(), s->MB(), s->T(),
- s->SLC(), s->DIC(), s->DIC(),
- s->SLC(), s->SIC());
+ "l%dt%dmb%dsic%dslc%ddic%ddlc%d",
+ s->L(), s->T(), s->MB(),
+ s->SIC(), s->SLC(), s->DIC(), s->DLC());
verbose_templ(buffer, s->kind(), s->name(), s->desc()->prop_kind, dat_str,
aux_str, prb_str);
aux_str, prb_str);
}
+template <typename pd_t> static void init_info_bin_conv(pd_t *s, char *buffer) {
+ DECL_DAT_AUX_PRB_STRS();
+
+ auto fmt_src = s->src_pd()->desc()->format;
+ auto fmt_wei = s->weights_pd(0)->desc()->format;
+ auto fmt_dst = s->dst_pd()->desc()->format;
+
+ snprintf(dat_str, MKLDNN_VERBOSE_DAT_LEN,
+ "fsrc:%s fwei:%s fdst:%s",
+ mkldnn_fmt2str(fmt_src), mkldnn_fmt2str(fmt_wei), mkldnn_fmt2str(fmt_dst));
+
+ snprintf(aux_str, MKLDNN_VERBOSE_AUX_LEN,
+ "alg:%s", mkldnn_alg_kind2str(s->cdesc()->alg_kind));
+
+ if (s->ndims() == 5) {
+ snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
+ "mb%d_g%dic%doc%d"
+ "_id%dod%dkd%dsd%ddd%dpd%d"
+ "_ih%doh%dkh%dsh%ddh%dph%d"
+ "_iw%dow%dkw%dsw%ddw%dpw%d",
+ s->MB(), s->G(), s->IC(), s->OC(),
+ s->ID(), s->OD(), s->KD(), s->KSD(), s->KDD(), s->padFront(),
+ s->IH(), s->OH(), s->KH(), s->KSH(), s->KDH(), s->padT(),
+ s->IW(), s->OW(), s->KW(), s->KSW(), s->KDW(), s->padL());
+ } else {
+ snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
+ "mb%d_g%dic%doc%d"
+ "_ih%doh%dkh%dsh%ddh%dph%d"
+ "_iw%dow%dkw%dsw%ddw%dpw%d",
+ s->MB(), s->G(), s->IC(), s->OC(),
+ s->IH(), s->OH(), s->KH(), s->KSH(), s->KDH(), s->padT(),
+ s->IW(), s->OW(), s->KW(), s->KSW(), s->KDW(), s->padL());
+ }
+
+ verbose_templ(buffer, s->kind(), s->name(), s->cdesc()->prop_kind, dat_str,
+ aux_str, prb_str);
+}
+
+template <typename pd_t> static void init_info_binarization(pd_t *s, char *buffer) {
+ DECL_DAT_AUX_PRB_STRS();
+
+ auto fmt_data = s->src_pd()->desc()->format;
+ auto fmt_diff = s->desc()->prop_kind == prop_kind::backward_data
+ ? s->diff_src_pd()->desc()->format : memory_format::undef;
+ snprintf(dat_str, MKLDNN_VERBOSE_DAT_LEN, "fdata:%s fdiff:%s",
+ mkldnn_fmt2str(fmt_data), mkldnn_fmt2str(fmt_diff));
+
+ snprintf(aux_str, MKLDNN_VERBOSE_AUX_LEN,
+ "alg:%s", mkldnn_alg_kind2str(s->desc()->alg_kind));
+
+ snprintf(prb_str, MKLDNN_VERBOSE_PRB_LEN,
+ "mb%dic%dih%diw%d", s->MB(), s->C(), s->H(), s->W());
+
+ verbose_templ(buffer, s->kind(), s->name(), s->desc()->prop_kind, dat_str,
+ aux_str, prb_str);
+}
+
#else /* !defined(DISABLE_VERBOSE) */
#define MKLDNN_VERBOSE_BUF_LEN 1
DEFINE_STUB(pool);
DEFINE_STUB(softmax);
DEFINE_STUB(rnn);
+DEFINE_STUB(shuffle);
DEFINE_STUB(roi_pooling);
+DEFINE_STUB(bin_conv);
+DEFINE_STUB(binarization);
#undef DEFINE_STUB
#endif /* !defined(DISABLE_VERBOSE) */