Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

The example of FFT in IPP9.0 (2016XE)

王_子_
Beginner
1,060 Views

hi ,

I want to use FFT on the Xeon Phi ,but the MKL-FFT performance is not good.I want to try IPP ,but I can not find the FFT API in IPP guide .

And the path which the guide mentioned :<install_dir>/ipp/components  not exist .

What is more, I found the oldversion sample for IPP8.0 named ipp-examples/ipp_fft but the compile said these function has been removed .

So please help me to find the FFT example for IPP9.0 ,thank you very much!

0 Kudos
1 Solution
Jonghak_K_Intel
Employee
1,060 Views

Hi,

Please refer this page for the reference guide that matches your IPP version : https://software.intel.com/en-us/articles/intel-integrated-performance-primitives-documentation

Find Volume 1 : Signal Processing -> Transform Functions -> Fast Fourier Transform Functions.

 

Thank you

 

View solution in original post

0 Kudos
2 Replies
Jonghak_K_Intel
Employee
1,061 Views

Hi,

Please refer this page for the reference guide that matches your IPP version : https://software.intel.com/en-us/articles/intel-integrated-performance-primitives-documentation

Find Volume 1 : Signal Processing -> Transform Functions -> Fast Fourier Transform Functions.

 

Thank you

 

0 Kudos
王_子_
Beginner
1,060 Views

JON J K. (Intel) wrote:

Hi,

Please refer this page for the reference guide that matches your IPP version : https://software.intel.com/en-us/articles/intel-integrated-performance-primitives-documentation

Find Volume 1 : Signal Processing -> Transform Functions -> Fast Fourier Transform Functions.

 

Thank you

 

Thank you for your help!I have found the cpu-FFT version according to your guide.

This code is the example for IPP 9.0:

 

#include "ipp.h"
#include "ippi.h"
#include <stdio.h>

#define EXIT_MAIN exitLine:                                  /* Label for Exit */
#define check_sts(st) if((st) != ippStsNoErr) goto exitLine; /* Go to Exit if IPP function returned status different from ippStsNoErr */
int main(int argc, char* argv[])
{

   IppStatus           status;
   IppiFFTSpec_C_32fc  *pSpec = NULL;                              /* Pointer to FFT spec structure */

   Ipp32fc             srcFwd[8 * 8] = {0}, dstFwd[8 * 8] = {0};   /* Source/destination images */
   Ipp32fc             m3 = {-3, 0}, one = {1, 0};

   Ipp8u               *pMemInit = NULL, *pBuffer = NULL;          /* Pointer to the work buffers */
   int                 sizeSpec = 0, sizeInit = 0, sizeBuf = 0;    /* Size of FFT spec structure, init and work buffers */

   srcFwd[0] = m3;
   srcFwd[9] = one;

   check_sts( status = ippiFFTGetSize_C_32fc(3, 3, IPP_FFT_DIV_INV_BY_N, ippAlgHintAccurate, &sizeSpec, &sizeInit, &sizeBuf) )

   /* memory allocation */
   pSpec    = (IppiFFTSpec_C_32fc*) ippMalloc(sizeSpec);
   pBuffer  = (Ipp8u*) ippMalloc(sizeBuf);
   pMemInit = (Ipp8u*) ippMalloc(sizeInit);

   check_sts( status = ippiFFTInit_C_32fc(3, 3, IPP_FFT_DIV_INV_BY_N, ippAlgHintAccurate, pSpec, pMemInit) )

   /* forward FFT transform */
   check_sts( status = ippiFFTFwd_CToC_32fc_C1R(srcFwd, 8*sizeof(Ipp32fc), dstFwd, 8*sizeof(Ipp32fc), pSpec, pBuffer) )

   for(int i=0;i<8;i++)
	{
	   for(int j=0;j<8;j++)
	   {
	   		   printf("%f+%f ",dstFwd[i*8+j].re,dstFwd[i*8+j].im);
	   }
	   printf("\n");
	}


EXIT_MAIN
   ippFree(pMemInit);
   ippFree(pSpec);
   ippFree(pBuffer);
   printf("Exit status %d (%s)\n", (int)status, ippGetStatusString(status));
   return (int)status;

}

 Thank you very much .

0 Kudos
Reply