<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic MKL-DNN primitive examples  in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-DNN-primitive-examples/m-p/1139150#M26193</link>
    <description>&lt;P&gt;Hello people ,&lt;/P&gt;

&lt;P&gt;I'm trying to write a personal DNN primitive ( relu or maxpool ) and i need to compare performance with mkl-dnn primitives. the problem is that in the examples provided in github i could only find a full net so i tried to separate primitives and i got the following code. So i want to know if my code is correct and how could i test it ? ( i couldn't find a way to print outputs from memory directly ).&lt;/P&gt;

&lt;P&gt;thank you&lt;/P&gt;

&lt;P&gt;void relu ()&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto cpu_engine = engine(engine::cpu, 0);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const int batch = 2;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::vector&amp;lt;float&amp;gt; net_src(batch * 3 * 227 * 227);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* initializing non-zero values for src */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; for (size_t i = 0; i &amp;lt; net_src.size(); ++i) net_src&lt;I&gt; = sinf((float)i);&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* AlexNet: conv&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * {batch, 3, 227, 227} (x) {96, 3, 11, 11} -&amp;gt; {batch, 96, 55, 55}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * strides: {4, 4}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::dims conv_src_tz = { batch, 3, 227, 227 };&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::dims conv_weights_tz = { 96, 3, 11, 11 };&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::dims conv_bias_tz = { 96 };&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::dims conv_dst_tz = { batch, 96, 55, 55 };&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::dims conv_strides = { 4, 4 };&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_padding = { 0, 0 };&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::vector&amp;lt;float&amp;gt; conv_weights(&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::accumulate(conv_weights_tz.begin(), conv_weights_tz.end(), 1,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::multiplies&amp;lt;uint32_t&amp;gt;()));&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; std::vector&amp;lt;float&amp;gt; conv_bias(std::accumulate(conv_bias_tz.begin(),&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conv_bias_tz.end(), 1,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::multiplies&amp;lt;uint32_t&amp;gt;()));&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create memory for user data */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_user_src_memory = memory(&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { { { conv_src_tz }, memory::data_type::f32, memory::format::nchw },&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu_engine },&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; net_src.data());&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create mmemory descriptors for convolution data w/ no specified&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * format(`any`)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * format `any` lets a primitive(convolution in this case)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * chose the memory format preferred for best performance. */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_src_md = memory::desc({ conv_src_tz }, memory::data_type::f32,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::format::any);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_bias_md = memory::desc({ conv_bias_tz }, memory::data_type::f32,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::format::any);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_weights_md = memory::desc(&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { conv_weights_tz }, memory::data_type::f32, memory::format::any);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_dst_md = memory::desc({ conv_dst_tz }, memory::data_type::f32,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::format::any);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create a convolution primitive descriptor */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_desc = convolution_forward::desc(&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prop_kind::forward, convolution_direct, conv_src_md,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conv_weights_md, conv_bias_md, conv_dst_md, conv_strides,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conv_padding, conv_padding, padding_kind::zero);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_pd = convolution_forward::primitive_desc(conv_desc, cpu_engine);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create memory primitive for conv dst */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_dst_memory = memory(conv_pd.dst_primitive_desc()); &amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* AlexNet: relu&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * {batch, 96, 55, 55} -&amp;gt; {batch, 96, 55, 55}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; const float negative_slope = 1.0f;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create relu primitive desc */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* keep memory format of source same as the format of convolution&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * output in order to avoid reorder */&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; auto relu_desc = eltwise_forward::desc(prop_kind::forward,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; algorithm::eltwise_relu, conv_pd.dst_primitive_desc().desc(),&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; negative_slope);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto relu_pd = eltwise_forward::primitive_desc(relu_desc, cpu_engine);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create relu dst memory primitive */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto relu_dst_memory = memory(relu_pd.dst_primitive_desc());&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* finally create a relu primitive */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto relu = eltwise_forward(relu_pd, conv_dst_memory, relu_dst_memory);&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* build forward net */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; std::vector&amp;lt;primitive&amp;gt; net_fwd;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; net_fwd.push_back(relu);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int n_iter = 1; //number of iterations for training&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* execute */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; while (n_iter) {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* forward */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stream(stream::kind::eager).submit(net_fwd).wait();&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --n_iter;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;}&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 03 Oct 2018 19:20:44 GMT</pubDate>
    <dc:creator>radjaradja</dc:creator>
    <dc:date>2018-10-03T19:20:44Z</dc:date>
    <item>
      <title>MKL-DNN primitive examples</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-DNN-primitive-examples/m-p/1139150#M26193</link>
      <description>&lt;P&gt;Hello people ,&lt;/P&gt;

&lt;P&gt;I'm trying to write a personal DNN primitive ( relu or maxpool ) and i need to compare performance with mkl-dnn primitives. the problem is that in the examples provided in github i could only find a full net so i tried to separate primitives and i got the following code. So i want to know if my code is correct and how could i test it ? ( i couldn't find a way to print outputs from memory directly ).&lt;/P&gt;

&lt;P&gt;thank you&lt;/P&gt;

&lt;P&gt;void relu ()&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto cpu_engine = engine(engine::cpu, 0);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; const int batch = 2;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::vector&amp;lt;float&amp;gt; net_src(batch * 3 * 227 * 227);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* initializing non-zero values for src */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; for (size_t i = 0; i &amp;lt; net_src.size(); ++i) net_src&lt;I&gt; = sinf((float)i);&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* AlexNet: conv&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * {batch, 3, 227, 227} (x) {96, 3, 11, 11} -&amp;gt; {batch, 96, 55, 55}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * strides: {4, 4}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::dims conv_src_tz = { batch, 3, 227, 227 };&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::dims conv_weights_tz = { 96, 3, 11, 11 };&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::dims conv_bias_tz = { 96 };&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::dims conv_dst_tz = { batch, 96, 55, 55 };&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::dims conv_strides = { 4, 4 };&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_padding = { 0, 0 };&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::vector&amp;lt;float&amp;gt; conv_weights(&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::accumulate(conv_weights_tz.begin(), conv_weights_tz.end(), 1,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::multiplies&amp;lt;uint32_t&amp;gt;()));&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; std::vector&amp;lt;float&amp;gt; conv_bias(std::accumulate(conv_bias_tz.begin(),&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conv_bias_tz.end(), 1,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::multiplies&amp;lt;uint32_t&amp;gt;()));&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create memory for user data */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_user_src_memory = memory(&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { { { conv_src_tz }, memory::data_type::f32, memory::format::nchw },&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu_engine },&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; net_src.data());&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create mmemory descriptors for convolution data w/ no specified&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * format(`any`)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * format `any` lets a primitive(convolution in this case)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * chose the memory format preferred for best performance. */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_src_md = memory::desc({ conv_src_tz }, memory::data_type::f32,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::format::any);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_bias_md = memory::desc({ conv_bias_tz }, memory::data_type::f32,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::format::any);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_weights_md = memory::desc(&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { conv_weights_tz }, memory::data_type::f32, memory::format::any);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_dst_md = memory::desc({ conv_dst_tz }, memory::data_type::f32,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memory::format::any);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create a convolution primitive descriptor */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_desc = convolution_forward::desc(&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prop_kind::forward, convolution_direct, conv_src_md,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conv_weights_md, conv_bias_md, conv_dst_md, conv_strides,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conv_padding, conv_padding, padding_kind::zero);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_pd = convolution_forward::primitive_desc(conv_desc, cpu_engine);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create memory primitive for conv dst */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto conv_dst_memory = memory(conv_pd.dst_primitive_desc()); &amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* AlexNet: relu&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * {batch, 96, 55, 55} -&amp;gt; {batch, 96, 55, 55}&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; const float negative_slope = 1.0f;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create relu primitive desc */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* keep memory format of source same as the format of convolution&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * output in order to avoid reorder */&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; auto relu_desc = eltwise_forward::desc(prop_kind::forward,&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; algorithm::eltwise_relu, conv_pd.dst_primitive_desc().desc(),&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; negative_slope);&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto relu_pd = eltwise_forward::primitive_desc(relu_desc, cpu_engine);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* create relu dst memory primitive */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto relu_dst_memory = memory(relu_pd.dst_primitive_desc());&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* finally create a relu primitive */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; auto relu = eltwise_forward(relu_pd, conv_dst_memory, relu_dst_memory);&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* build forward net */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; std::vector&amp;lt;primitive&amp;gt; net_fwd;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; net_fwd.push_back(relu);&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int n_iter = 1; //number of iterations for training&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; /* execute */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; while (n_iter) {&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* forward */&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stream(stream::kind::eager).submit(net_fwd).wait();&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --n_iter;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;

&lt;P&gt;}&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 03 Oct 2018 19:20:44 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-DNN-primitive-examples/m-p/1139150#M26193</guid>
      <dc:creator>radjaradja</dc:creator>
      <dc:date>2018-10-03T19:20:44Z</dc:date>
    </item>
    <item>
      <title>it would be better if you</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-DNN-primitive-examples/m-p/1139151#M26194</link>
      <description>&lt;P&gt;it would be better if you will address this questions to &lt;SPAN style="font-size: 13.008px;"&gt;&lt;A href="https://github.com/intel/mkl-dnn/issues&amp;nbsp;" target="_blank"&gt;https://github.com/intel/mkl-dnn/issues&amp;nbsp;&lt;/A&gt;;&lt;/SPAN&gt;where mkl-dnn team probably may help....&lt;/P&gt;</description>
      <pubDate>Thu, 04 Oct 2018 02:50:38 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/MKL-DNN-primitive-examples/m-p/1139151#M26194</guid>
      <dc:creator>Gennady_F_Intel</dc:creator>
      <dc:date>2018-10-04T02:50:38Z</dc:date>
    </item>
  </channel>
</rss>

