<?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 Re: ippIIROne_ defeating purpose. in Intel® Integrated Performance Primitives</title>
    <link>https://community.intel.com/t5/Intel-Integrated-Performance/ippIIROne-defeating-purpose/m-p/879430#M9986</link>
    <description>&lt;DIV style="margin:0px;"&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;BR /&gt;So my initial assumption was correct... in the sense that inline C would be faster than ipp in this case (like 2x!)... but getting it to vectorize has eluded me...&lt;BR /&gt;&lt;BR /&gt;consider that pblock is a member pointer to a struct, and that the taps are set up correctly for these equations...&lt;BR /&gt;&lt;BR /&gt;for the biquad filter:&lt;BR /&gt;&lt;BR /&gt;1853:  out = pblock-&amp;gt;filter1.coeffsL[0] * ftemp &lt;BR /&gt;1854:   + pblock-&amp;gt;filter1.coeffsL[1] * pblock-&amp;gt;filter1.indata[0] &lt;BR /&gt;1855:   + pblock-&amp;gt;filter1.coeffsL[2] * pblock-&amp;gt;filter1.indata[1] &lt;BR /&gt;1856:   + pblock-&amp;gt;filter1.coeffsL[3] * pblock-&amp;gt;filter1.indata[2] &lt;BR /&gt;1857:   + pblock-&amp;gt;filter1.coeffsL[4] * pblock-&amp;gt;filter1.indata[3];&lt;BR /&gt;1858:  pblock-&amp;gt;filter1.indata[1] = pblock-&amp;gt;filter1.indata[0];&lt;BR /&gt;1859:  pblock-&amp;gt;filter1.indata[0] = ftemp;&lt;BR /&gt;1860:  pblock-&amp;gt;filter1.indata[3] = pblock-&amp;gt;filter1.indata[2];&lt;BR /&gt;1861:  pblock-&amp;gt;filter1.indata[2] = out;&lt;BR /&gt;1862:  ftemp = out;&lt;BR /&gt;&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1861): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1861, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1861.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1861): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1861, and pblock line 1860.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1860): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1860, and pblock line 1861.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1860): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1860, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1860.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1860): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1860, and pblock line 1861.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1861): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1861, and pblock line 1860.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1859): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1859, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1859.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1859): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1859, and pblock line 1858.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1858): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1858, and pblock line 1859.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1858): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1858, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1858.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1858): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1858, and pblock line 1859.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1859): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1859, and pblock line 1858.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1859.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1859): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1859, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1858.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1858): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1858, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1861.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1861): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1861, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1860.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1860): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1860, and pblock line 1853.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;for the first order IIR:&lt;BR /&gt;&lt;BR /&gt;1871:  temp1 = pblock-&amp;gt;filter2.coeffsL[0] * ftemp;&lt;BR /&gt;1872:  temp2 = pblock-&amp;gt;filter2.coeffsL[1] * ftemp;&lt;BR /&gt;1873:  ftemp = temp1 + pblock-&amp;gt;filter2.buff[0];&lt;BR /&gt;1874:  pblock-&amp;gt;filter2.buff[0] = (ftemp * pblock-&amp;gt;filter2.coeffsL[2]) + temp2;&lt;BR /&gt;&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1874): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1874, and pblock line 1873.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1873): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1873, and pblock line 1874.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1873): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1873, and pblock line 1874.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1874): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1874, and pblock line 1873.&lt;BR /&gt;&lt;BR /&gt;What does it all mean? Is there a good doc that explains what these errors mean and how to fix them?&lt;/P&gt;</description>
    <pubDate>Thu, 02 Oct 2008 18:12:19 GMT</pubDate>
    <dc:creator>drd</dc:creator>
    <dc:date>2008-10-02T18:12:19Z</dc:date>
    <item>
      <title>ippIIROne_ defeating purpose.</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/ippIIROne-defeating-purpose/m-p/879429#M9985</link>
      <description>I have a loop in my code which requires that I process one sample at a time using iir filters (set up as both arbitrary and biquad)...&lt;BR /&gt;
&lt;BR /&gt;
for example:&lt;BR /&gt;
&lt;BR /&gt;
// ipp32f *data, ftemp;&lt;BR /&gt;
&lt;BR /&gt;
for (int i = 0; i &amp;lt; numSamples; i++)&lt;BR /&gt;
&lt;BR /&gt;
{&lt;BR /&gt;
&lt;BR /&gt;
ftemp = data&lt;I&gt;;&lt;BR /&gt;
&lt;BR /&gt;
ippsIIROne_32f(ftemp, &amp;amp;ftemp, pBQFilter1State);&lt;BR /&gt;
ippsIIROne_32f(ftemp, &amp;amp;ftemp, pFilter2State);&lt;BR /&gt;
&lt;BR /&gt;
// etc.&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
Now, I understand that because these are only opperating on one sample at a time, the performance is going to be poor, plus in this situation I imagine the overhead of the function call defeats the purpose of performance. vTune seems to verify this. Not only that, but since there are no branches / conditions in the loop, I imagine I could get the Intel compiler to vectorize this if I can replace the ipp calls with inline C.&lt;BR /&gt;
&lt;BR /&gt;
Question is: are my assumptions correct here? I think the equivalent C code should be pretty straight forward, but if anyone has some fast C code for the IIR filters they can share, I'd appreciate it :)&lt;BR /&gt;
&lt;BR /&gt;
Thanks.&lt;BR /&gt;
&lt;BR /&gt;
P.S. is it just me or are the threads a chronological mess? How do I sort most recent first?&lt;/I&gt;</description>
      <pubDate>Thu, 25 Sep 2008 16:43:42 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/ippIIROne-defeating-purpose/m-p/879429#M9985</guid>
      <dc:creator>drd</dc:creator>
      <dc:date>2008-09-25T16:43:42Z</dc:date>
    </item>
    <item>
      <title>Re: ippIIROne_ defeating purpose.</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/ippIIROne-defeating-purpose/m-p/879430#M9986</link>
      <description>&lt;DIV style="margin:0px;"&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;BR /&gt;So my initial assumption was correct... in the sense that inline C would be faster than ipp in this case (like 2x!)... but getting it to vectorize has eluded me...&lt;BR /&gt;&lt;BR /&gt;consider that pblock is a member pointer to a struct, and that the taps are set up correctly for these equations...&lt;BR /&gt;&lt;BR /&gt;for the biquad filter:&lt;BR /&gt;&lt;BR /&gt;1853:  out = pblock-&amp;gt;filter1.coeffsL[0] * ftemp &lt;BR /&gt;1854:   + pblock-&amp;gt;filter1.coeffsL[1] * pblock-&amp;gt;filter1.indata[0] &lt;BR /&gt;1855:   + pblock-&amp;gt;filter1.coeffsL[2] * pblock-&amp;gt;filter1.indata[1] &lt;BR /&gt;1856:   + pblock-&amp;gt;filter1.coeffsL[3] * pblock-&amp;gt;filter1.indata[2] &lt;BR /&gt;1857:   + pblock-&amp;gt;filter1.coeffsL[4] * pblock-&amp;gt;filter1.indata[3];&lt;BR /&gt;1858:  pblock-&amp;gt;filter1.indata[1] = pblock-&amp;gt;filter1.indata[0];&lt;BR /&gt;1859:  pblock-&amp;gt;filter1.indata[0] = ftemp;&lt;BR /&gt;1860:  pblock-&amp;gt;filter1.indata[3] = pblock-&amp;gt;filter1.indata[2];&lt;BR /&gt;1861:  pblock-&amp;gt;filter1.indata[2] = out;&lt;BR /&gt;1862:  ftemp = out;&lt;BR /&gt;&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1861): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1861, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1861.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1861): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1861, and pblock line 1860.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1860): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1860, and pblock line 1861.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1860): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1860, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1860.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1860): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1860, and pblock line 1861.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1861): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1861, and pblock line 1860.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1859): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1859, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1859.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1859): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1859, and pblock line 1858.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1858): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1858, and pblock line 1859.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1858): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1858, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1858.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1858): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1858, and pblock line 1859.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1859): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1859, and pblock line 1858.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1859.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1859): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1859, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1858.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1858): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1858, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1861.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1861): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1861, and pblock line 1853.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1853): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1853, and pblock line 1860.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1860): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1860, and pblock line 1853.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;for the first order IIR:&lt;BR /&gt;&lt;BR /&gt;1871:  temp1 = pblock-&amp;gt;filter2.coeffsL[0] * ftemp;&lt;BR /&gt;1872:  temp2 = pblock-&amp;gt;filter2.coeffsL[1] * ftemp;&lt;BR /&gt;1873:  ftemp = temp1 + pblock-&amp;gt;filter2.buff[0];&lt;BR /&gt;1874:  pblock-&amp;gt;filter2.buff[0] = (ftemp * pblock-&amp;gt;filter2.coeffsL[2]) + temp2;&lt;BR /&gt;&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1874): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1874, and pblock line 1873.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1873): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1873, and pblock line 1874.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1873): (col. 3) remark: vector dependence: proven ANTI dependence between pblock line 1873, and pblock line 1874.&lt;BR /&gt;1&amp;gt;......srcFilterfilter.cpp(1874): (col. 3) remark: vector dependence: proven FLOW dependence between pblock line 1874, and pblock line 1873.&lt;BR /&gt;&lt;BR /&gt;What does it all mean? Is there a good doc that explains what these errors mean and how to fix them?&lt;/P&gt;</description>
      <pubDate>Thu, 02 Oct 2008 18:12:19 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/ippIIROne-defeating-purpose/m-p/879430#M9986</guid>
      <dc:creator>drd</dc:creator>
      <dc:date>2008-10-02T18:12:19Z</dc:date>
    </item>
  </channel>
</rss>

