Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.

How to parallelize FFT computation in MKL?

hadesmajesty
Beginner
729 Views

I try to parallelize the fft computation in each row of the matrix fu(m,2), but the result is not correct. The following is my code:

type(DFTI_DESCRIPTOR), SAVE,POINTER :: My_FFT_Handle

nthreads=omp_get_max_threads ();

Status = DftiCreateDescriptor(My_FFT_Handle, DFTI_DOUBLE, DFTI_REAL, 1, m)

Status = DftiSetValue (My_FFT_Handle, DFTI_NUMBER_OF_USER_THREADS, nThreads);

Status = DftiCommitDescriptor(My_FFT_Handle)

!$OMP PARALLEL DO

do ic=1,2

Status = DftiComputeForward(My_FFT_Handle,fu(:,ic))

end do

!$OMP END PARALLEL DO

stop

The results of fu(:,2) is sometimes not correct. Whats wrong in the code?

Thank you.

0 Kudos
3 Replies
Gennady_F_Intel
Moderator
729 Views
Please look at the example #4 from the KB "Different parallelization techniques and Intel MKL FFT"

0 Kudos
Dmitry_B_Intel
Employee
729 Views
Hi, hidesmajesty,

The real in-place FFT specified by DftiCreateDescriptor(..., DFTI_REAL, 1, M) accepts input of M real values and needs space of M+2 real elements for output. That means the matrix should be declared/allocated thus:
double precision fu(M+2,2)

Thanks
Dima
0 Kudos
hadesmajesty
Beginner
729 Views
Thank you Dima.

It seems there is no difference by allocating fu(M+2,2) in sequential code, but by doing this in parallel code, I can obtain the correct result.

By the way, the additional data in fu(M+1:M+2,:) are meaningless and they are there to just make the routine work, are they?
0 Kudos
Reply