<?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 FFT Order Limitations? in Intel® Integrated Performance Primitives</title>
    <link>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-Order-Limitations/m-p/790859#M2372</link>
    <description>Hi,&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;I cannot seem to find documentation for the minimum and maximum FFT orders supported by IPP.&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="http://software.intel.com/en-us/articles/mkl-ipp-choosing-an-fft/"&gt;http://software.intel.com/en-us/articles/mkl-ipp-choosing-an-fft/&lt;/A&gt;suggests a maximum order (for DFT) of 2^29 (no mention of the range supported for FFT, aside from powers of 2).&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="http://software.intel.com/en-us/forums/showthread.php?t=60410"&gt;http://software.intel.com/en-us/forums/showthread.php?t=60410&lt;/A&gt;suggests a maximum order of 2^27.&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Is the range of supported FFT orders 2^1 ... 2^27?&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Where can I find this information?&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;/DIV&gt;&lt;DIV&gt;Eric&lt;/DIV&gt;</description>
    <pubDate>Thu, 24 Jun 2010 15:11:01 GMT</pubDate>
    <dc:creator>emhjohnson</dc:creator>
    <dc:date>2010-06-24T15:11:01Z</dc:date>
    <item>
      <title>FFT Order Limitations?</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-Order-Limitations/m-p/790859#M2372</link>
      <description>Hi,&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;I cannot seem to find documentation for the minimum and maximum FFT orders supported by IPP.&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="http://software.intel.com/en-us/articles/mkl-ipp-choosing-an-fft/"&gt;http://software.intel.com/en-us/articles/mkl-ipp-choosing-an-fft/&lt;/A&gt;suggests a maximum order (for DFT) of 2^29 (no mention of the range supported for FFT, aside from powers of 2).&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="http://software.intel.com/en-us/forums/showthread.php?t=60410"&gt;http://software.intel.com/en-us/forums/showthread.php?t=60410&lt;/A&gt;suggests a maximum order of 2^27.&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Is the range of supported FFT orders 2^1 ... 2^27?&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Where can I find this information?&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;/DIV&gt;&lt;DIV&gt;Eric&lt;/DIV&gt;</description>
      <pubDate>Thu, 24 Jun 2010 15:11:01 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-Order-Limitations/m-p/790859#M2372</guid>
      <dc:creator>emhjohnson</dc:creator>
      <dc:date>2010-06-24T15:11:01Z</dc:date>
    </item>
    <item>
      <title>FFT Order Limitations?</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-Order-Limitations/m-p/790860#M2373</link>
      <description>&lt;P&gt;To answer my own question, I used the lovely trial and error code below (and managed a segfault):&lt;/P&gt;
&lt;DIV&gt;
&lt;P&gt;&lt;B&gt;Code:&lt;/B&gt;&lt;/P&gt;
&lt;CODE&gt;
#include &lt;STDIO.H&gt;
#include &lt;STRING.H&gt;
#include &lt;IPP.H&gt;
#include &lt;IPPCORE.H&gt;
#include &lt;IPPS.H&gt;

static
const char * ippStatusErrStr(IppStatus status)
{
    switch (status)
    {
        case ippStsNullPtrErr:   return "IPP Null Pointer Error";
        case ippStsFftOrderErr:  return "IPP FFT Order Error";
        case ippStsFftFlagErr:   return "IPP FFT Flag Error";
        case ippStsMemAllocErr:  return "IPP Memory Allocate Error";
        default:                 return "Unrecognized IPP Error";
    };
}

int main(int argc, char **argv)
{
    int n;

    for (n = 1; n &amp;lt; 33; n++)
    {
        IppStatus status;
        IppsFFTSpec_R_32f *spec;

        status = ippsFFTInitAlloc_R_32f (&amp;amp;spec,
                                         n,
                                         IPP_FFT_DIV_INV_BY_N,
                                         ippAlgHintNone);

        if (status != ippStsNoErr)
        {
            printf ("Error for order %d: %s\n", n, ippStatusErrStr(status));
        }
        else
        {
            printf ("Created order %d R_32f input FFT\n", n);
            ippsFFTFree_R_32f (spec);
        }
    }
    
    return 0;
}
&lt;/IPPS.H&gt;&lt;/IPPCORE.H&gt;&lt;/IPP.H&gt;&lt;/STRING.H&gt;&lt;/STDIO.H&gt;&lt;/CODE&gt;
&lt;/DIV&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;DIV&gt;
&lt;P&gt;&lt;B&gt;Output:&lt;/B&gt;&lt;/P&gt;
&lt;CODE&gt;
Created order 1 R_32f input FFT
Created order 2 R_32f input FFT
Created order 3 R_32f input FFT
Created order 4 R_32f input FFT
Created order 5 R_32f input FFT
Created order 6 R_32f input FFT
Created order 7 R_32f input FFT
Created order 8 R_32f input FFT
Created order 9 R_32f input FFT
Created order 10 R_32f input FFT
Created order 11 R_32f input FFT
Created order 12 R_32f input FFT
Created order 13 R_32f input FFT
Created order 14 R_32f input FFT
Created order 15 R_32f input FFT
Created order 16 R_32f input FFT
Created order 17 R_32f input FFT
Created order 18 R_32f input FFT
Created order 19 R_32f input FFT
Created order 20 R_32f input FFT
Created order 21 R_32f input FFT
Created order 22 R_32f input FFT
Created order 23 R_32f input FFT
Created order 24 R_32f input FFT
Created order 25 R_32f input FFT
Created order 26 R_32f input FFT
Created order 27 R_32f input FFT
Error for order 28: IPP Memory Allocate Error
Segmentation fault
&lt;/CODE&gt;
&lt;/DIV&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;DIV&gt;
&lt;P&gt;-Eric&lt;/P&gt;
&lt;/DIV&gt;</description>
      <pubDate>Fri, 25 Jun 2010 19:27:39 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-Order-Limitations/m-p/790860#M2373</guid>
      <dc:creator>emhjohnson</dc:creator>
      <dc:date>2010-06-25T19:27:39Z</dc:date>
    </item>
    <item>
      <title>I had a 32 bit app that i</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-Order-Limitations/m-p/790861#M2374</link>
      <description>&lt;P&gt;I had a 32 bit app that I converted to x64 and instead of windowing smaller FFTs for most data I need I can use a single FFT that is 27th order, sometimes 28th or 29th.&lt;/P&gt;&lt;P&gt;I am using VS2019 C++, IPP 2019 update 5, dynamically linked.&lt;/P&gt;&lt;P&gt;I am using the same build setup on my office PC (win 10 pro 1903, core i7-7700, 32GB RAM) and home PC (win 10 pro 1903, core i5-2500, 16GB RAM) and the same release compiles on both machines as well.&lt;/P&gt;&lt;P&gt;Here is the strange part:&lt;/P&gt;&lt;P&gt;The initial call to set up the 64f FFT:&amp;nbsp;&lt;/P&gt;
&lt;PRE class="brush:cpp; class-name:dark;"&gt;			status = ippsFFTGetSize_R_64f(useOrder, IPP_FFT_DIV_INV_BY_N, ippAlgHintAccurate, &amp;amp;specSize, &amp;amp;specBufferSize, &amp;amp;scratchBufferSize);
&lt;/PRE&gt;

&lt;P&gt;The lesser spec machine (core i5-2500) allows a maximum FFT order of 28, after which status is -17 (invalid FFT order)&lt;/P&gt;
&lt;P&gt;The higher spec machine (core i7-7700) allows a maximum FFT order of 27, after which status is -17.&lt;/P&gt;
&lt;P&gt;Is there a rationale for why a 7th gen processor would have this limitation compared to a 2nd gen one?&amp;nbsp; Also I know "ippAlgHintAccurate" is ignored for x64 since it wont ever use the FPU but I also have win32 configs of the same project which can work with smaller windows.&lt;/P&gt;
&lt;P&gt;I am curious what determines the max FFT order, and quite frankly for x64 this shouldn't even be limited to 27/28.&amp;nbsp; On the plus side even a 28th order FFT on a core i5-2500 is extremely fast.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Nov 2019 16:32:48 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-Order-Limitations/m-p/790861#M2374</guid>
      <dc:creator>Mesbah__Samy</dc:creator>
      <dc:date>2019-11-20T16:32:48Z</dc:date>
    </item>
    <item>
      <title>Hi Samy.</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-Order-Limitations/m-p/790862#M2375</link>
      <description>&lt;P&gt;Hi Samy.&lt;/P&gt;&lt;P&gt;I confirm your issue. The&amp;nbsp; "Core i5-2500" has AVX instruction set while "Core i7-7700" has AVX2. IPP has two branches for them and avx2 supports 2^27 only.&amp;nbsp; We will fix the bug&amp;nbsp;in one on the next IPP releases to support 2^28. As a workaround, you can manually switch IPP to run AVX code on "Core i7-7700" but&amp;nbsp;it may&amp;nbsp;affect&amp;nbsp;performance.&lt;/P&gt;
&lt;PRE class="brush:cpp; class-name:dark;"&gt;    Ipp64u defaultFeatures;
    ippGetCpuFeatures(&amp;amp;defaultFeatures, 0);
    defaultFeatures &amp;amp;= (ippCPUID_AVX2-1);
    status =  ippSetCpuFeatures(defaultFeatures);
&lt;/PRE&gt;

&lt;P&gt;Thanks for your feedback.&lt;/P&gt;</description>
      <pubDate>Fri, 22 Nov 2019 16:35:15 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-Order-Limitations/m-p/790862#M2375</guid>
      <dc:creator>Andrey_B_Intel</dc:creator>
      <dc:date>2019-11-22T16:35:15Z</dc:date>
    </item>
  </channel>
</rss>

