K
Kazik�
Hello,
at the beginning I shall say that I'm pretty fresh in Intel compiler
and in MKL (Math Kernel Library) business.
I have two quite general questions.
1:
I'm about to write a program performing some fast Fourier transforms
and I'm going to use the FFTW (via Intel's wrapper library). However,
I've started to wonder (in quite general terms) which of complex types
that are provided shall I use. There are std::complex, MKL_Complex 16,
and also FFTW provides fftw_complex type. I'm little bit confused
about that. What are (if there are) "dependencies" between these
types? Do all typical functions (from standard complex c++ library)
like polar(), sqrt() or cosh() support types different than
std::complex?
What is more, I'm really interested in efficiency (speed) of the code.
I've heard quite bad things about this aspect of std::complex [people
I've spoken to suggested me rather splitting complex numbers into real
and imaginary part and perform all the operations "explicitly" on the
Re and Im]. So what do you think? And are MKL_Complex16 or
fftw_complex real alternatives for std::complex in this particular
field?
2:
As I've mentioned above I'm going to use FFTW via Intel's wrapper
library. As I've mentioned as well, I really seek for efficiency of my
code (I perform some scientific computations). My doubt is how
efficient is this "joint" of Intel and FFTW? Maybe it would be better
to use these Intel-built FFT functions? Another doubt concerns
multithreading of FFTW. I know how to make FFTW work multithreaded
using gcc compiler but I know as well that Intel's icc and icpc use
more "general" mechanism to use multi-core processors. So how
effective is this native Intel's mechanism? And what are the results
of using them to multithread FFTW code?
I will be very grateful for any explanations or suggestions.
at the beginning I shall say that I'm pretty fresh in Intel compiler
and in MKL (Math Kernel Library) business.
I have two quite general questions.
1:
I'm about to write a program performing some fast Fourier transforms
and I'm going to use the FFTW (via Intel's wrapper library). However,
I've started to wonder (in quite general terms) which of complex types
that are provided shall I use. There are std::complex, MKL_Complex 16,
and also FFTW provides fftw_complex type. I'm little bit confused
about that. What are (if there are) "dependencies" between these
types? Do all typical functions (from standard complex c++ library)
like polar(), sqrt() or cosh() support types different than
std::complex?
What is more, I'm really interested in efficiency (speed) of the code.
I've heard quite bad things about this aspect of std::complex [people
I've spoken to suggested me rather splitting complex numbers into real
and imaginary part and perform all the operations "explicitly" on the
Re and Im]. So what do you think? And are MKL_Complex16 or
fftw_complex real alternatives for std::complex in this particular
field?
2:
As I've mentioned above I'm going to use FFTW via Intel's wrapper
library. As I've mentioned as well, I really seek for efficiency of my
code (I perform some scientific computations). My doubt is how
efficient is this "joint" of Intel and FFTW? Maybe it would be better
to use these Intel-built FFT functions? Another doubt concerns
multithreading of FFTW. I know how to make FFTW work multithreaded
using gcc compiler but I know as well that Intel's icc and icpc use
more "general" mechanism to use multi-core processors. So how
effective is this native Intel's mechanism? And what are the results
of using them to multithread FFTW code?
I will be very grateful for any explanations or suggestions.