<?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 2D Convolution return wrong result in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-Convolution-return-wrong-result/m-p/1004268#M18792</link>
    <description>&lt;P&gt;I am new to MKL, so this might be a stupid mistake. I am trying to convolve 2D 1024x1024 array with its elements set to 5 with 3x3 kernel with its element set to 1. The expected result is 45 everywhere except the boundary, however, I am getting positive and negative very small fraction close to zero, and all returned status code are ok.&lt;/P&gt;

&lt;P&gt;Here a simple repro:&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; int status = VSL_STATUS_OK;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int mode = VSL_CONV_MODE_FFT; //VSL_CONV_MODE_AUTO; // VSL_CONV_MODE_DIRECT;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int xstride[] = {1, 1024};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int ystride[] = {1, 3};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int zstride[] = {1, 1026};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int xshape[] = {1024, 1024};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int yshape[] = {3, 3};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int zshape[] = {1026, 1026};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int offset[] = {0, 0};&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; double* x = new double[1024*1024];&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; (1024*1024); i++) {&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x&lt;I&gt; = 5.0;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; }&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; double* y = new double[3*3];&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; (3*3); i++) {&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y&lt;I&gt; = 1.0;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; }&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; double* z = new double[1026*1026];&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; memset((void*)z, 0, 1026*1026*sizeof(double));&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; VSLConvTaskPtr task;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; status = vslsConvNewTask(&amp;amp;task, mode, 2, xshape, yshape, zshape);&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; assert(status == VSL_STATUS_OK);&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; status = vslConvSetStart(task, offset);&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; assert(status == VSL_STATUS_OK);&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; status = vsldConvExec(task, x, xstride, y, ystride, z, zstride);&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; assert(status == VSL_STATUS_OK);&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; vslConvDeleteTask(&amp;amp;task);&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; delete[] x;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;delete[] y;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;delete[] z;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 05 Oct 2015 23:43:23 GMT</pubDate>
    <dc:creator>Emad_B_</dc:creator>
    <dc:date>2015-10-05T23:43:23Z</dc:date>
    <item>
      <title>2D Convolution return wrong result</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-Convolution-return-wrong-result/m-p/1004268#M18792</link>
      <description>&lt;P&gt;I am new to MKL, so this might be a stupid mistake. I am trying to convolve 2D 1024x1024 array with its elements set to 5 with 3x3 kernel with its element set to 1. The expected result is 45 everywhere except the boundary, however, I am getting positive and negative very small fraction close to zero, and all returned status code are ok.&lt;/P&gt;

&lt;P&gt;Here a simple repro:&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; int status = VSL_STATUS_OK;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int mode = VSL_CONV_MODE_FFT; //VSL_CONV_MODE_AUTO; // VSL_CONV_MODE_DIRECT;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int xstride[] = {1, 1024};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int ystride[] = {1, 3};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int zstride[] = {1, 1026};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int xshape[] = {1024, 1024};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int yshape[] = {3, 3};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int zshape[] = {1026, 1026};&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; int offset[] = {0, 0};&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; double* x = new double[1024*1024];&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; (1024*1024); i++) {&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x&lt;I&gt; = 5.0;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; }&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; double* y = new double[3*3];&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; (3*3); i++) {&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y&lt;I&gt; = 1.0;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; }&lt;/I&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; double* z = new double[1026*1026];&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; memset((void*)z, 0, 1026*1026*sizeof(double));&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; VSLConvTaskPtr task;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; status = vslsConvNewTask(&amp;amp;task, mode, 2, xshape, yshape, zshape);&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; assert(status == VSL_STATUS_OK);&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; status = vslConvSetStart(task, offset);&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; assert(status == VSL_STATUS_OK);&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; status = vsldConvExec(task, x, xstride, y, ystride, z, zstride);&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; assert(status == VSL_STATUS_OK);&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; vslConvDeleteTask(&amp;amp;task);&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; delete[] x;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;delete[] y;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;delete[] z;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 05 Oct 2015 23:43:23 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-Convolution-return-wrong-result/m-p/1004268#M18792</guid>
      <dc:creator>Emad_B_</dc:creator>
      <dc:date>2015-10-05T23:43:23Z</dc:date>
    </item>
    <item>
      <title>Hi Emad B.,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-Convolution-return-wrong-result/m-p/1004269#M18793</link>
      <description>&lt;P&gt;Hi Emad B.,&lt;/P&gt;

&lt;P&gt;Since d means double, s means single, please use vsl&lt;STRONG&gt;d&lt;/STRONG&gt;ConvNewTask.&lt;/P&gt;

&lt;P&gt;Evgueni&lt;/P&gt;</description>
      <pubDate>Tue, 06 Oct 2015 04:19:12 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-Convolution-return-wrong-result/m-p/1004269#M18793</guid>
      <dc:creator>Evgueni_P_Intel</dc:creator>
      <dc:date>2015-10-06T04:19:12Z</dc:date>
    </item>
    <item>
      <title>Thanks Evgueni, that's did it</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-Convolution-return-wrong-result/m-p/1004270#M18794</link>
      <description>&lt;P&gt;Thanks Evgueni, that's did it.&lt;/P&gt;</description>
      <pubDate>Tue, 06 Oct 2015 16:16:25 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-Convolution-return-wrong-result/m-p/1004270#M18794</guid>
      <dc:creator>Emad_B_</dc:creator>
      <dc:date>2015-10-06T16:16:25Z</dc:date>
    </item>
  </channel>
</rss>

