Which FFT lib is faster, IPP or MKL?

Which FFT lib is faster, IPP or MKL?

maverick6664's picture

Hi,
I am considering replace FFT library in SETI@home with the Intel's one (currently I'm using fftw-3.0.1) but I'm wondering which is faster, FFT in IPP or MKL.

Requirement is very generous;

1. It's a one-dimension FFT.
2. data length varies up to 16384 (or 32768?), always power of 2.
3. data format is 32bit single float, complex (both in and out)
4. data are always aligned with 32 or 64 byte boundary.
5. speed is the first priority. precision comes next (or later)
6. I'll use it on linux, compiler is icc/icpc and the binary will run on P4 Prescott core.

I saw a benchmark page and found IPP's FFT is fairly fast (faster than ffwt I'm currently using) but MKL FFT is missing in these charts (MKL DFT is there, it's another one). So I don't know how fast MKL FFT is.

So will anybody tell me pros/cons on this matter?

One advantage of IPP over MKL in my case is the data format in my app is an array of complex floats; real/imaginary numbers are put in turns. So IPP is preferable in this. MKL FFT accepts data as a real array and an imaginary array separately. Actually this app analyzies electromagnetic signals....:)

TIA!

Message Edited by maverick6664 on 05-25-2005 03:24 AM

EDIT: I decided to use IPP.....please ignore this.

Thanks!!

Message Edited by maverick6664 on 05-25-2005 03:36 AM

3 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.
vladimir-dudnik (Intel)'s picture

Hi Tia,

I'm glad you choose IPP, hope it will cover all your needs. By the way what platform you are interested in?

Regards,
Vladimir

maverick6664's picture

Mostly I'm working on Linux. I only need non-commercial license. I found IPP libraries have many variants, which accept several formats of input/output. I've install both ipp/mkl using non-commercial license, but found IPP comes in handy, in that the initialization is easy.

BTW one of ipp fft function(s)

IppStatus ippsFFTFwd_CToC_32fc(const Ipp32fc* pSrc, Ipp32fc* pDst, const IppsFFTSpec_C_32ft* pFFTSpec, Ipp8u* pBuffer);

requres both an input array and an output array. Can they be the same one? Many fft/dft libraries uses the same array both as input/output. In addition, the last argument of this function is used as the workspace. I've read with a large workspace, fft's speed is faster. How large should it be (for ex, if the fft data length is 32768?) and that, in this case, the length of work space can not be given. How should I set it? It has FFTGetBufSize_C function, but it "reads" the size, not sets the size. FFTInitAlloc doesn't seem to do it, either.

best regards,

Login to leave a comment.